public void Should_Fill_Number_When_Number_Property_Is_Empty() { //Arrange var dateTime = new DateTime(2021, 1, 1); var provider = BuildServiceProvider(dateTime); //Act, Assert provider.RunScoped <IDbContext>(dbContext => { using var transaction = dbContext.BeginTransaction(); var task1 = new NumberingTestEntity { DateTime = dateTime, BranchId = 1 }; var task2 = new NumberingTestEntity { DateTime = dateTime, BranchId = 1 }; dbContext.Set <NumberingTestEntity>().Add(task1); dbContext.Set <NumberingTestEntity>().Add(task2); dbContext.SaveChanges(); task1.Number.ShouldBe("Prefix-100"); task2.Number.ShouldBe("Prefix-105"); dbContext.Set <NumberedEntity>().Any(_ => _.EntityName == $"{typeof(NumberingTestEntity).FullName}") .ShouldBeTrue(); transaction.Commit(); }); }
public void Should_Fill_All_NumberingFields_BasedOn_NumberingOptions() { //Arrange var dateTime = new DateTime(2021, 1, 1); var provider = BuildServiceProvider(dateTime); //Act, Assert provider.RunScoped <IDbContext>(dbContext => { using var transaction = dbContext.BeginTransaction(); var task1 = new NumberingTestEntity { DateTime = dateTime, BranchId = 1 }; var task2 = new NumberingTestEntity { DateTime = dateTime, BranchId = 1 }; dbContext.Set <NumberingTestEntity>().Add(task1); dbContext.Set <NumberingTestEntity>().Add(task2); dbContext.SaveChanges(); task1.Number.ShouldBe("Prefix-100"); task1.NumberBasedOnBranchId.ShouldBe("10"); task1.NumberBasedOnBranchIdDateTime.ShouldBe("1"); task1.NumberBasedOnBranchIdCreatedDateTime.ShouldBe("1"); task2.Number.ShouldBe("Prefix-105"); task2.NumberBasedOnBranchId.ShouldBe("20"); task2.NumberBasedOnBranchIdDateTime.ShouldBe("2"); task2.NumberBasedOnBranchIdCreatedDateTime.ShouldBe("2"); dbContext.Set <NumberedEntity>().Any(_ => _.EntityName == $"{typeof(NumberingTestEntity).FullName}") .ShouldBeTrue(); dbContext.Set <NumberedEntity>() .Any(_ => _.EntityName == $"{typeof(NumberingTestEntity).FullName}_BranchId_1") .ShouldBeTrue(); dbContext.Set <NumberedEntity>() .Any(_ => _.EntityName == $"{typeof(NumberingTestEntity).FullName}_BranchId_1_DateTime_20210101") .ShouldBeTrue(); dbContext.Set <NumberedEntity>() .Any(_ => _.EntityName == $"{typeof(NumberingTestEntity).FullName}_BranchId_1_CreatedDateTime_20210101") .ShouldBeTrue(); dbContext.Set <NumberedEntity>() .Any(_ => _.EntityName == $"{typeof(NumberingTestEntity).FullName}_BranchId_1_CreatedDateTime_20210101" && _.NextValue == 3) .ShouldBeTrue(); transaction.Commit(); }); }
Should_Fill_Numbers_Without_Gap_When_Concurrent_Transactions_Want_Insert_Instance_Of_INumberedEntity() { //Arrange var dateTime = new DateTime(2021, 1, 1); var provider = BuildServiceProvider(dateTime); //Act ExecuteInParallel(delegate { provider.RunScoped <IDbContext>(dbContext => { using var transaction = dbContext.BeginTransaction(); var task = new NumberingTestEntity { DateTime = dateTime }; dbContext.Set <NumberingTestEntity>().Add(task); dbContext.SaveChanges(); transaction.Commit(); }); });