88using AuthPermissions . BaseCode . DataLayer . EfCode ;
99using AuthPermissions . BaseCode . SetupCode ;
1010using AuthPermissions . BulkLoadServices . Concrete ;
11+ using AuthPermissions . SupportCode ;
1112using AuthPermissions . SupportCode . AddUsersServices ;
1213using Example3 . MvcWebApp . IndividualAccounts . PermissionsCode ;
14+ using Example6 . MvcWebApp . Sharding . PermissionsCode ;
15+ using Example7 . MvcWebApp . ShardingOnly . PermissionsCode ;
1316using LocalizeMessagesAndErrors . UnitTestingCode ;
1417using Microsoft . EntityFrameworkCore ;
18+ using Microsoft . Extensions . Logging ;
1519using Test . StubClasses ;
1620using Test . TestHelpers ;
1721using TestSupport . EfHelpers ;
@@ -24,6 +28,7 @@ namespace Test.UnitTests.TestSupportCode;
2428public class TestSignInAndCreateTenant
2529{
2630 private readonly ITestOutputHelper _output ;
31+ private static List < LogOutput > _logs ;
2732
2833 public TestSignInAndCreateTenant ( ITestOutputHelper output )
2934 {
@@ -43,10 +48,14 @@ private static (SignInAndCreateTenant service, AuthUsersAdminService userAdmin)
4348 var userAdmin = new AuthUsersAdminService ( context , new StubSyncAuthenticationUsersFactory ( ) ,
4449 authOptions , "en" . SetupAuthPLoggingLocalizer ( ) ) ;
4550 var tenantAdmin = new AuthTenantAdminService ( context , authOptions ,
46- "en" . SetupAuthPLoggingLocalizer ( ) , new StubTenantChangeServiceFactory ( ) , null ) ;
51+ "en" . SetupAuthPLoggingLocalizer ( ) , new StubTenantChangeServiceFactory ( ) , null ) ;
52+ _logs = new List < LogOutput > ( ) ;
53+ ILogger < SignInAndCreateTenant > logger = new LoggerFactory (
54+ new [ ] { new MyLoggerProviderActionOut ( log => _logs . Add ( log ) ) } )
55+ . CreateLogger < SignInAndCreateTenant > ( ) ;
4756 var service = new SignInAndCreateTenant ( authOptions , tenantAdmin ,
4857 new StubAddNewUserManager ( userAdmin , tenantAdmin , loginReturnsError ) ,
49- "en" . SetupAuthPLoggingLocalizer ( ) , null ,
58+ "en" . SetupAuthPLoggingLocalizer ( ) , logger ,
5059 overrideNormal ?? new StubISignUpGetShardingEntry ( "en" . SetupAuthPLoggingLocalizer ( ) , false ) ) ;
5160
5261 return ( service , userAdmin ) ;
@@ -121,13 +130,47 @@ public async Task TestAddUserAndNewTenantAsync_NoVersionSetup(bool hasOwnDb)
121130 user . UserRoles . Select ( x => x . RoleName ) . ToArray ( ) . ShouldEqual ( new [ ] { "Role1" , "Role3" } ) ;
122131 }
123132
133+
134+ [ Fact ]
135+ public async Task TestAddUserAndNewTenantAsync_Shared ( )
136+ {
137+ //SETUP
138+ var options = SqliteInMemory . CreateOptions < AuthPermissionsDbContext > ( ) ;
139+ using var context = new AuthPermissionsDbContext ( options ) ;
140+ context . Database . EnsureCreated ( ) ;
141+
142+ var tuple = CreateISignInAndCreateTenant ( context , TenantTypes . SingleLevel , null ) ;
143+ var authSettings = new AuthPermissionsOptions { InternalData = { EnumPermissionsType = typeof ( Example3Permissions ) } } ;
144+ var rolesSetup = new BulkLoadRolesService ( context , authSettings ) ;
145+ await rolesSetup . AddRolesToDatabaseAsync ( Example3AppAuthSetupData . RolesDefinition ) ;
146+
147+ var userData = new AddNewUserDto { Email = "[email protected] " } ; 148+ var tenantData = new AddNewTenantDto
149+ {
150+ TenantName = "New Tenant" ,
151+ Region = "South" ,
152+ Version = "Free"
153+ } ;
154+ context . ChangeTracker . Clear ( ) ;
155+
156+ //ATTEMPT
157+ var status = await tuple . service . SignUpNewTenantWithVersionAsync ( userData , tenantData , Example3CreateTenantVersions . TenantSetupData ) ;
158+
159+ //VERIFY
160+ context . ChangeTracker . Clear ( ) ;
161+ var log = _logs . LastOrDefault ( ) ;
162+ if ( log != null )
163+ _output . WriteLine ( log . DecodeMessage ( ) ) ;
164+ status . IsValid . ShouldBeTrue ( status . GetAllErrors ( ) ) ;
165+ var tenant = context . Tenants . Single ( ) ;
166+ tenant . TenantFullName . ShouldEqual ( tenantData . TenantName ) ;
167+ tenant . DatabaseInfoName . ShouldBeNull ( ) ;
168+ }
169+
124170 [ Theory ]
125- [ InlineData ( true , null , "OwnDb" ) ]
126- [ InlineData ( false , null , "SharedDb" ) ]
127- [ InlineData ( true , false , "OwnDb" ) ] //The AddNewTenantDto.HasOwnDb is overridden by the version setup data
128- [ InlineData ( false , true , "SharedDb" ) ] //The AddNewTenantDto.HasOwnDb is overridden by the version setup data
129- public async Task TestAddUserAndNewTenantAsync_Sharding ( bool ? setupHasOwnDb , bool ? dtoHasOwnDb ,
130- string databaseInfoName )
171+ [ InlineData ( true ) ]
172+ [ InlineData ( false ) ]
173+ public async Task TestAddUserAndNewTenantAsync_ShardingHybrid ( bool hasOwnDb )
131174 {
132175 //SETUP
133176 var options = SqliteInMemory . CreateOptions < AuthPermissionsDbContext > ( ) ;
@@ -143,25 +186,68 @@ public async Task TestAddUserAndNewTenantAsync_Sharding(bool? setupHasOwnDb, boo
143186 var tenantData = new AddNewTenantDto
144187 {
145188 TenantName = "New Tenant" ,
146- Version = "Free " ,
147- HasOwnDb = dtoHasOwnDb ,
189+ Region = "South " ,
190+ HasOwnDb = hasOwnDb ,
148191 } ;
149- Example3CreateTenantVersions . TenantSetupData . HasOwnDbForEachVersion = new Dictionary < string , bool ? > ( )
192+ context . ChangeTracker . Clear ( ) ;
193+
194+ //ATTEMPT
195+ var status = await tuple . service . SignUpNewTenantAsync ( userData , tenantData ) ;
196+
197+ //VERIFY
198+ context . ChangeTracker . Clear ( ) ;
199+ var log = _logs . LastOrDefault ( ) ;
200+ if ( log != null )
201+ _output . WriteLine ( log . DecodeMessage ( ) ) ;
202+ status . IsValid . ShouldBeTrue ( status . GetAllErrors ( ) ) ;
203+ var tenant = context . Tenants . Single ( ) ;
204+ _output . WriteLine ( tenant . DatabaseInfoName ) ;
205+ tenant . TenantFullName . ShouldEqual ( tenantData . TenantName ) ;
206+ if ( hasOwnDb )
207+ tenant . DatabaseInfoName . ShouldStartWith ( "SignOn-" ) ;
208+ else
209+ tenant . DatabaseInfoName . ShouldEqual ( "Default Database" ) ;
210+ }
211+
212+ [ Fact ]
213+ public async Task TestAddUserAndNewTenantAsync_ShardingOnly ( )
214+ {
215+ //SETUP
216+ var options = SqliteInMemory . CreateOptions < AuthPermissionsDbContext > ( ) ;
217+ using var context = new AuthPermissionsDbContext ( options ) ;
218+ context . Database . EnsureCreated ( ) ;
219+
220+ var getSetShardings = new StubGetSetShardingEntries ( this ) ;
221+
222+ var tuple = CreateISignInAndCreateTenant ( context , TenantTypes . SingleLevel | TenantTypes . AddSharding
223+ , new DemoShardOnlyGetDatabaseForNewTenant ( getSetShardings , "en" . SetupAuthPLoggingLocalizer ( ) ) ) ;
224+ var authSettings = new AuthPermissionsOptions { InternalData = { EnumPermissionsType = typeof ( Example3Permissions ) } } ;
225+ var rolesSetup = new BulkLoadRolesService ( context , authSettings ) ;
226+ await rolesSetup . AddRolesToDatabaseAsync ( Example3AppAuthSetupData . RolesDefinition ) ;
227+
228+ var userData = new AddNewUserDto { Email = "[email protected] " } ; 229+ var tenantData = new AddNewTenantDto
150230 {
151- { "Free" , setupHasOwnDb } ,
231+ TenantName = "New Tenant" ,
232+ Region = "South" ,
233+ Version = "Free" ,
234+ HasOwnDb = true ,
152235 } ;
153-
154236 context . ChangeTracker . Clear ( ) ;
155237
156238 //ATTEMPT
157- var status = await tuple . service . SignUpNewTenantWithVersionAsync ( userData , tenantData , Example3CreateTenantVersions . TenantSetupData ) ;
239+ var status = await tuple . service . SignUpNewTenantWithVersionAsync ( userData , tenantData , Example7CreateTenantVersions . TenantSetupData ) ;
158240
159241 //VERIFY
160242 context . ChangeTracker . Clear ( ) ;
243+ var log = _logs . LastOrDefault ( ) ;
244+ if ( log != null )
245+ _output . WriteLine ( log . DecodeMessage ( ) ) ;
161246 status . IsValid . ShouldBeTrue ( status . GetAllErrors ( ) ) ;
162247 var tenant = context . Tenants . Single ( ) ;
248+ _output . WriteLine ( tenant . DatabaseInfoName ) ;
163249 tenant . TenantFullName . ShouldEqual ( tenantData . TenantName ) ;
164- tenant . DatabaseInfoName . ShouldEqual ( databaseInfoName ) ;
250+ tenant . DatabaseInfoName . ShouldStartWith ( "SignOn-" ) ;
165251 }
166252
167253 [ Fact ]
@@ -225,7 +311,7 @@ public async Task TestAddUserAndNewTenantAsync_Sharding_UndoTenant()
225311
226312 //VERIFY
227313 context . ChangeTracker . Clear ( ) ;
228- status . IsValid . ShouldBeFalse ( status . GetAllErrors ( ) ) ;
314+ status . IsValid . ShouldBeFalse ( ) ;
229315 context . Tenants . Count ( ) . ShouldEqual ( 0 ) ;
230316 }
231317
@@ -266,4 +352,41 @@ public async Task TestAddUserAndNewTenantAsync_Sharding_UndoOnBadUser()
266352 status . IsValid . ShouldBeFalse ( ) ;
267353 context . Tenants . Count ( ) . ShouldEqual ( 0 ) ;
268354 }
355+
356+ //----------------------------------------------------------
357+ //Test the two demo version of the ISignUpGetShardingEntry
358+
359+ [ Fact ]
360+ public async Task DemoGetDatabaseForNewTenant ( )
361+ {
362+ //SETUP
363+ var getSetSharding = new StubGetSetShardingEntries ( this ) ;
364+ var service = new DemoGetDatabaseForNewTenant ( getSetSharding , "en" . SetupAuthPLoggingLocalizer ( ) ) ;
365+
366+ //ATTEMPT
367+ var status = await service . FindOrCreateShardingEntryAsync ( true , "timestamp" , "SouthDb" ) ;
368+
369+ //VERIFY
370+ status . IsValid . ShouldBeTrue ( status . GetAllErrors ( ) ) ;
371+ status . Result . ShouldEqual ( "PostgreSql1" ) ;
372+ }
373+
374+ [ Fact ]
375+ public async Task DemoShardOnlyGetDatabaseForNewTenant ( )
376+ {
377+ //SETUP
378+ var getSetSharding = new StubGetSetShardingEntries ( this ) ;
379+ var service = new DemoShardOnlyGetDatabaseForNewTenant ( getSetSharding , "en" . SetupAuthPLoggingLocalizer ( ) ) ;
380+
381+ //ATTEMPT
382+ var status = await service . FindOrCreateShardingEntryAsync ( true , "timestamp" , "SouthDb" ) ;
383+
384+ //VERIFY
385+ status . IsValid . ShouldBeTrue ( status . GetAllErrors ( ) ) ;
386+ getSetSharding . CalledMethodName . ShouldEqual ( "AddNewShardingEntry" ) ;
387+ getSetSharding . SharingEntryAddUpDel . Name . ShouldEqual ( "SignOn-timestamp" ) ;
388+ getSetSharding . SharingEntryAddUpDel . ConnectionName . ShouldEqual ( "SouthDb" ) ;
389+ getSetSharding . SharingEntryAddUpDel . DatabaseName . ShouldEqual ( "Db-timestamp" ) ;
390+ getSetSharding . SharingEntryAddUpDel . DatabaseType . ShouldEqual ( "SqlServer" ) ;
391+ }
269392}
0 commit comments