Big cleanup and adding IdentityBuilder extensions the same way as the EF IdentityBuilder extensions do, allowing customer Identity setup.
This commit is contained in:
+1
-1
@@ -7,7 +7,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AspNetCore.Identity.MongoDbCore" Version="1.0.4" />
|
||||
<PackageReference Include="AspNetCore.Identity.MongoDbCore" Version="1.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http" />
|
||||
|
||||
-150
@@ -1,150 +0,0 @@
|
||||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
{
|
||||
//public class CustomPocoTest : IClassFixture<MongoDatabaseFixture>
|
||||
//{
|
||||
// private readonly MongoDatabaseFixture _fixture;
|
||||
|
||||
// public CustomPocoTest(MongoDatabaseFixture fixture)
|
||||
// {
|
||||
// _fixture = fixture;
|
||||
// }
|
||||
|
||||
// public class User<TKey> where TKey : IEquatable<TKey>
|
||||
// {
|
||||
// public TKey Id { get; set; }
|
||||
// public string UserName { get; set; }
|
||||
// }
|
||||
|
||||
// public class CustomDbContext<TKey> : DbContext where TKey : IEquatable<TKey>
|
||||
// {
|
||||
// public CustomDbContext(DbContextOptions options) : base(options)
|
||||
// { }
|
||||
|
||||
// public DbSet<User<TKey>> Users { get; set; }
|
||||
|
||||
// }
|
||||
|
||||
// public CustomDbContext<TKey> GetContext<TKey>() where TKey : IEquatable<TKey>
|
||||
// {
|
||||
// return DbUtil.Create<CustomDbContext<TKey>>(_fixture.ConnectionString);
|
||||
// }
|
||||
|
||||
// public CustomDbContext<TKey> CreateContext<TKey>(bool delete = false) where TKey : IEquatable<TKey>
|
||||
// {
|
||||
// var db = GetContext<TKey>();
|
||||
// if (delete)
|
||||
// {
|
||||
// db.Database.EnsureDeleted();
|
||||
// }
|
||||
// db.Database.EnsureCreated();
|
||||
// return db;
|
||||
// }
|
||||
|
||||
// [Fact]
|
||||
// public async Task CanUpdateNameGuid()
|
||||
// {
|
||||
// using (var db = CreateContext<Guid>(true))
|
||||
// {
|
||||
// var oldName = Guid.NewGuid().ToString();
|
||||
// var user = new User<Guid> { UserName = oldName, Id = Guid.NewGuid() };
|
||||
// db.Users.Add(user);
|
||||
// await db.SaveChangesAsync();
|
||||
// var newName = Guid.NewGuid().ToString();
|
||||
// user.UserName = newName;
|
||||
// await db.SaveChangesAsync();
|
||||
// Assert.Null(db.Users.SingleOrDefault(u => u.UserName == oldName));
|
||||
// Assert.Equal(user, db.Users.Single(u => u.UserName == newName));
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Fact]
|
||||
// public async Task CanUpdateNameString()
|
||||
// {
|
||||
// using (var db = CreateContext<string>(true))
|
||||
// {
|
||||
// var oldName = Guid.NewGuid().ToString();
|
||||
// var user = new User<string> { UserName = oldName, Id = Guid.NewGuid().ToString() };
|
||||
// db.Users.Add(user);
|
||||
// await db.SaveChangesAsync();
|
||||
// var newName = Guid.NewGuid().ToString();
|
||||
// user.UserName = newName;
|
||||
// await db.SaveChangesAsync();
|
||||
// Assert.Null(db.Users.SingleOrDefault(u => u.UserName == oldName));
|
||||
// Assert.Equal(user, db.Users.Single(u => u.UserName == newName));
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Fact]
|
||||
// public async Task CanCreateUserInt()
|
||||
// {
|
||||
// using (var db = CreateContext<int>(true))
|
||||
// {
|
||||
// var user = new User<int>();
|
||||
// db.Users.Add(user);
|
||||
// await db.SaveChangesAsync();
|
||||
// user.UserName = "Boo";
|
||||
// await db.SaveChangesAsync();
|
||||
// var fetch = db.Users.First(u => u.UserName == "Boo");
|
||||
// Assert.Equal(user, fetch);
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Fact]
|
||||
// public async Task CanCreateUserIntViaSet()
|
||||
// {
|
||||
// using (var db = CreateContext<int>(true))
|
||||
// {
|
||||
// var user = new User<int>();
|
||||
// var users = db.Set<User<int>>();
|
||||
// users.Add(user);
|
||||
// await db.SaveChangesAsync();
|
||||
// user.UserName = "Boo";
|
||||
// await db.SaveChangesAsync();
|
||||
// var fetch = users.First(u => u.UserName == "Boo");
|
||||
// Assert.Equal(user, fetch);
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Fact]
|
||||
// public async Task CanUpdateNameInt()
|
||||
// {
|
||||
// using (var db = CreateContext<int>(true))
|
||||
// {
|
||||
// var oldName = Guid.NewGuid().ToString();
|
||||
// var user = new User<int> { UserName = oldName };
|
||||
// db.Users.Add(user);
|
||||
// await db.SaveChangesAsync();
|
||||
// var newName = Guid.NewGuid().ToString();
|
||||
// user.UserName = newName;
|
||||
// await db.SaveChangesAsync();
|
||||
// Assert.Null(db.Users.SingleOrDefault(u => u.UserName == oldName));
|
||||
// Assert.Equal(user, db.Users.Single(u => u.UserName == newName));
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Fact]
|
||||
// public async Task CanUpdateNameIntWithSet()
|
||||
// {
|
||||
// using (var db = CreateContext<int>(true))
|
||||
// {
|
||||
// var oldName = Guid.NewGuid().ToString();
|
||||
// var user = new User<int> { UserName = oldName };
|
||||
// db.Set<User<int>>().Add(user);
|
||||
// await db.SaveChangesAsync();
|
||||
// var newName = Guid.NewGuid().ToString();
|
||||
// user.UserName = newName;
|
||||
// await db.SaveChangesAsync();
|
||||
// Assert.Null(db.Set<User<int>>().SingleOrDefault(u => u.UserName == oldName));
|
||||
// Assert.Equal(user, db.Set<User<int>>().Single(u => u.UserName == newName));
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
+2
-4
@@ -2,7 +2,6 @@
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Security.Claims;
|
||||
@@ -14,7 +13,6 @@ using Microsoft.Extensions.Logging;
|
||||
using Xunit;
|
||||
using AspNetCore.Identity.MongoDbCore.Models;
|
||||
using AspNetCore.Identity.MongoDbCore.Extensions;
|
||||
using AspNetCore.Identity.MongoDbCore;
|
||||
using MongoDB.Driver;
|
||||
using AspNetCore.Identity.MongoDbCore.IntegrationTests.Infrastructure;
|
||||
using MongoDbGenericRepository;
|
||||
@@ -24,7 +22,7 @@ namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
{
|
||||
// TODO: Add test variation with non IdentityDbContext
|
||||
|
||||
public abstract class SqlStoreTestBase<TUser, TRole, TKey> : IdentitySpecificationTestBase<TUser, TRole, TKey>,
|
||||
public abstract class MongoDbStoreTestBase<TUser, TRole, TKey> : IdentitySpecificationTestBase<TUser, TRole, TKey>,
|
||||
IClassFixture<MongoDatabaseFixture<TUser, TRole, TKey>>
|
||||
where TUser : MongoIdentityUser<TKey>, new()
|
||||
where TRole : MongoIdentityRole<TKey>, new()
|
||||
@@ -32,7 +30,7 @@ namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
{
|
||||
private readonly MongoDatabaseFixture<TUser, TRole, TKey> _fixture;
|
||||
|
||||
protected SqlStoreTestBase(MongoDatabaseFixture<TUser, TRole, TKey> fixture)
|
||||
protected MongoDbStoreTestBase(MongoDatabaseFixture<TUser, TRole, TKey> fixture)
|
||||
{
|
||||
_fixture = fixture;
|
||||
}
|
||||
+1
-3
@@ -3,9 +3,7 @@
|
||||
|
||||
using System;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
using AspNetCore.Identity.MongoDbCore.Models;
|
||||
using AspNetCore.Identity.MongoDbCore;
|
||||
using MongoDbGenericRepository;
|
||||
using AspNetCore.Identity.MongoDbCore.IntegrationTests.Infrastructure;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
@@ -26,7 +24,7 @@ namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
}
|
||||
}
|
||||
|
||||
public class UserStoreGuidTest : SqlStoreTestBase<GuidUser, GuidRole, Guid>
|
||||
public class UserStoreGuidTest : MongoDbStoreTestBase<GuidUser, GuidRole, Guid>
|
||||
{
|
||||
public UserStoreGuidTest(MongoDatabaseFixture<GuidUser, GuidRole, Guid> fixture)
|
||||
: base(fixture)
|
||||
|
||||
+1
-3
@@ -2,8 +2,6 @@
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Xunit;
|
||||
using AspNetCore.Identity.MongoDbCore.Models;
|
||||
|
||||
namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
@@ -23,7 +21,7 @@ namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
}
|
||||
}
|
||||
|
||||
public class UserStoreIntTest : SqlStoreTestBase<IntUser, IntRole, int>
|
||||
public class UserStoreIntTest : MongoDbStoreTestBase<IntUser, IntRole, int>
|
||||
{
|
||||
public UserStoreIntTest(MongoDatabaseFixture<IntUser, IntRole, int> fixture)
|
||||
: base(fixture)
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
}
|
||||
}
|
||||
|
||||
public class UserStoreStringKeyTest : SqlStoreTestBase<StringUser, StringRole, string>
|
||||
public class UserStoreStringKeyTest : MongoDbStoreTestBase<StringUser, StringRole, string>
|
||||
{
|
||||
public UserStoreStringKeyTest(MongoDatabaseFixture<StringUser, StringRole, string> fixture)
|
||||
: base(fixture)
|
||||
|
||||
-1
@@ -222,7 +222,6 @@ namespace AspNetCore.Identity.MongoDbCore.Test
|
||||
{
|
||||
public IdentityUserWithGenerics() : base()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-165
@@ -1,165 +0,0 @@
|
||||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Data.Common;
|
||||
using System.Data.SqlClient;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace AspNetCore.Identity.MongoDbCore.Test.Utilities
|
||||
{
|
||||
//public class SqlServerTestStore : IDisposable
|
||||
//{
|
||||
// public const int CommandTimeout = 90;
|
||||
|
||||
// public static string CreateConnectionString(string name)
|
||||
// {
|
||||
// var connStrBuilder = new SqlConnectionStringBuilder(TestEnvironment.Config["Test:SqlServer:DefaultConnectionString"])
|
||||
// {
|
||||
// InitialCatalog = name
|
||||
// };
|
||||
|
||||
// return connStrBuilder.ConnectionString;
|
||||
// }
|
||||
|
||||
// public static SqlServerTestStore CreateScratch(bool createDatabase = true)
|
||||
// => new SqlServerTestStore(GetScratchDbName()).CreateTransient(createDatabase);
|
||||
|
||||
// private SqlConnection _connection;
|
||||
// private readonly string _name;
|
||||
// private bool _deleteDatabase;
|
||||
|
||||
// private SqlServerTestStore(string name)
|
||||
// {
|
||||
// _name = name;
|
||||
// }
|
||||
|
||||
// private static string GetScratchDbName()
|
||||
// {
|
||||
// string name;
|
||||
// do
|
||||
// {
|
||||
// name = "Scratch_" + Guid.NewGuid();
|
||||
// } while (DatabaseExists(name)
|
||||
// || DatabaseFilesExist(name));
|
||||
|
||||
// return name;
|
||||
// }
|
||||
|
||||
// private static void WaitForExists(SqlConnection connection)
|
||||
// {
|
||||
// var retryCount = 0;
|
||||
// while (true)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// connection.Open();
|
||||
|
||||
// connection.Close();
|
||||
|
||||
// return;
|
||||
// }
|
||||
// catch (SqlException e)
|
||||
// {
|
||||
// if (++retryCount >= 30
|
||||
// || (e.Number != 233 && e.Number != -2 && e.Number != 4060))
|
||||
// {
|
||||
// throw;
|
||||
// }
|
||||
|
||||
// SqlConnection.ClearPool(connection);
|
||||
|
||||
// Thread.Sleep(100);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// private SqlServerTestStore CreateTransient(bool createDatabase)
|
||||
// {
|
||||
// _connection = new SqlConnection(CreateConnectionString(_name));
|
||||
|
||||
// if (createDatabase)
|
||||
// {
|
||||
// using (var master = new SqlConnection(CreateConnectionString("master")))
|
||||
// {
|
||||
// master.Open();
|
||||
// using (var command = master.CreateCommand())
|
||||
// {
|
||||
// command.CommandTimeout = CommandTimeout;
|
||||
// command.CommandText = $"{Environment.NewLine}CREATE DATABASE [{_name}]";
|
||||
|
||||
// command.ExecuteNonQuery();
|
||||
|
||||
// WaitForExists(_connection);
|
||||
// }
|
||||
// }
|
||||
// _connection.Open();
|
||||
// }
|
||||
|
||||
// _deleteDatabase = true;
|
||||
// return this;
|
||||
// }
|
||||
|
||||
// private static bool DatabaseExists(string name)
|
||||
// {
|
||||
// using (var master = new SqlConnection(CreateConnectionString("master")))
|
||||
// {
|
||||
// master.Open();
|
||||
|
||||
// using (var command = master.CreateCommand())
|
||||
// {
|
||||
// command.CommandTimeout = CommandTimeout;
|
||||
// command.CommandText = $@"SELECT COUNT(*) FROM sys.databases WHERE name = N'{name}'";
|
||||
|
||||
// return (int) command.ExecuteScalar() > 0;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// private static bool DatabaseFilesExist(string name)
|
||||
// {
|
||||
// var userFolder = Environment.GetEnvironmentVariable("USERPROFILE") ??
|
||||
// Environment.GetEnvironmentVariable("HOME");
|
||||
// return userFolder != null
|
||||
// && (File.Exists(Path.Combine(userFolder, name + ".mdf"))
|
||||
// || File.Exists(Path.Combine(userFolder, name + "_log.ldf")));
|
||||
// }
|
||||
|
||||
// private void DeleteDatabase(string name)
|
||||
// {
|
||||
// using (var master = new SqlConnection(CreateConnectionString("master")))
|
||||
// {
|
||||
// master.Open();
|
||||
|
||||
// using (var command = master.CreateCommand())
|
||||
// {
|
||||
// command.CommandTimeout = CommandTimeout;
|
||||
// // Query will take a few seconds if (and only if) there are active connections
|
||||
|
||||
// // SET SINGLE_USER will close any open connections that would prevent the drop
|
||||
// command.CommandText
|
||||
// = string.Format(@"IF EXISTS (SELECT * FROM sys.databases WHERE name = N'{0}')
|
||||
// BEGIN
|
||||
// ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
|
||||
// DROP DATABASE [{0}];
|
||||
// END", name);
|
||||
|
||||
// command.ExecuteNonQuery();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// public DbConnection Connection => _connection;
|
||||
|
||||
// public void Dispose()
|
||||
// {
|
||||
// _connection.Dispose();
|
||||
|
||||
// if (_deleteDatabase)
|
||||
// {
|
||||
// DeleteDatabase(_name);
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
Reference in New Issue
Block a user