public async Task TestSaveChangesAsyncAddNoSqlOk() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], nameof(TestSqlSaveChanges)); using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { await sqlContext.Database.EnsureCreatedAsync(); await noSqlContext.Database.EnsureCreatedAsync(); //ATTEMPT var book = DddEfTestData.CreateDummyBookTwoAuthorsTwoReviews(); sqlContext.Add(book); await sqlContext.SaveChangesAsync(); //VERIFY sqlContext.Books.Count().ShouldEqual(1); var noSqlBook = noSqlContext.Books.SingleOrDefault(p => p.BookId == book.BookId); noSqlBook.ShouldNotBeNull(); noSqlBook.AuthorsOrdered.ShouldEqual("Author1, Author2"); noSqlBook.ReviewsCount.ShouldEqual(2); } }
public async Task TestSaveChangesDeleteNoSqlOk() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], GetType().Name); using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { sqlContext.Database.EnsureCreated(); noSqlContext.Database.EnsureCreated(); var book = DddEfTestData.CreateDummyBookTwoAuthorsTwoReviews(); sqlContext.Add(book); await sqlContext.SaveChangesAsync(); //ATTEMPT sqlContext.Remove(book); await sqlContext.SaveChangesAsync(); //VERIFY sqlContext.Books.Count().ShouldEqual(0); var noSqlBook = noSqlContext.Books.SingleOrDefault(p => p.BookId == book.BookId); noSqlBook.ShouldBeNull(); } }
public void TestSaveChangesSoftDeleteNoSqlOk() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], nameof(TestSqlSaveChanges)); using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { sqlContext.Database.EnsureCreated(); noSqlContext.Database.EnsureCreated(); var book = DddEfTestData.CreateDummyBookTwoAuthorsTwoReviews(); sqlContext.Add(book); sqlContext.SaveChanges(); //ATTEMPT book.SoftDeleted = true; sqlContext.SaveChanges(); //VERIFY sqlContext.Books.Count().ShouldEqual(0); sqlContext.Books.IgnoreQueryFilters().Count().ShouldEqual(1); var noSqlBook = noSqlContext.Books.SingleOrDefault(p => p.BookId == book.BookId); noSqlBook.ShouldBeNull(); } }
public async Task TestSaveChangesAsyncUpdatesNoSqlFail() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], "UNKNOWNDATABASENAME"); using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { await sqlContext.Database.EnsureCreatedAsync(); //ATTEMPT var book = DddEfTestData.CreateDummyBookOneAuthor(); sqlContext.Add(book); var ex = await Assert.ThrowsAsync <CosmosException>(async() => await sqlContext.SaveChangesAsync()); //VERIFY sqlContext.Books.Count().ShouldEqual(0); ex.Message.ShouldStartWith("Response status code does not indicate success: 404 Substatus:"); } }
public async Task TestNoSqlBookUpdaterFail_NoBookAddedToSqlDatabase() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], "UNKNOWNDATASBASENAME"); using (var sqlContext = new SqlDbContext(_sqlOptions)) using (var noSqlContext = new NoSqlDbContext(builder.Options)) { await sqlContext.Database.EnsureCreatedAsync(); var updater = new NoSqlBookUpdater(noSqlContext); //ATTEMPT var book = DddEfTestData.CreateDummyBookOneAuthor(); sqlContext.Add(book); var hasUpdates = updater.FindBookChangesToProjectToNoSql(sqlContext); var ex = await Assert.ThrowsAsync <HttpException>(async() => await updater.CallBaseSaveChangesWithNoSqlWriteInTransactionAsync(sqlContext, () => sqlContext.SaveChangesAsync())); //VERIFY ex.Message.ShouldEqual("NotFound"); hasUpdates.ShouldBeTrue(); sqlContext.Books.Count().ShouldEqual(0); } }
public async Task TestNoSqlBookUpdaterOk() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], GetType().Name); using var sqlContext = new SqlDbContext(_sqlOptions); using var noSqlContext = new NoSqlDbContext(builder.Options); await sqlContext.Database.EnsureCreatedAsync(); await noSqlContext.Database.EnsureCreatedAsync(); var updater = new NoSqlBookUpdater(noSqlContext); //ATTEMPT var book = DddEfTestData.CreateDummyBookOneAuthor(); sqlContext.Add(book); var numBooksChanged = updater.FindNumBooksChanged(sqlContext); await updater.CallBaseSaveChangesWithNoSqlWriteInTransactionAsync(sqlContext, numBooksChanged, () => sqlContext.SaveChangesAsync()); //VERIFY numBooksChanged.ShouldEqual(1); sqlContext.Books.Count().ShouldEqual(1); noSqlContext.Books.Find(book.BookId).ShouldNotBeNull(); }
public async Task TestNoSqlBookUpdaterOk() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], nameof(TestNoSqlBookUpdaterAsync)); using (var sqlContext = new SqlDbContext(_sqlOptions)) using (var noSqlContext = new NoSqlDbContext(builder.Options)) { await sqlContext.Database.EnsureCreatedAsync(); await noSqlContext.Database.EnsureCreatedAsync(); var updater = new NoSqlBookUpdater(noSqlContext); //ATTEMPT var book = DddEfTestData.CreateDummyBookOneAuthor(); sqlContext.Add(book); var hasUpdates = updater.FindBookChangesToProjectToNoSql(sqlContext); await updater.CallBaseSaveChangesWithNoSqlWriteInTransactionAsync(sqlContext, () => sqlContext.SaveChangesAsync()); //VERIFY hasUpdates.ShouldBeTrue(); sqlContext.Books.Count().ShouldEqual(1); (await noSqlContext.Books.CountAsync(p => p.BookId == book.BookId)).ShouldEqual(1); } }
public async Task TestNoSqlBookUpdaterFail_NoBookAddedToSqlDatabase() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], "UNKNOWNDATASBASENAME"); using (var sqlContext = new SqlDbContext(_sqlOptions)) using (var noSqlContext = new NoSqlDbContext(builder.Options)) { await sqlContext.Database.EnsureCreatedAsync(); var updater = new NoSqlBookUpdater(noSqlContext); //ATTEMPT var book = DddEfTestData.CreateDummyBookOneAuthor(); sqlContext.Add(book); var numBooksChanged = updater.FindNumBooksChanged(sqlContext); var ex = await Assert.ThrowsAsync <CosmosException>(async() => await updater.CallBaseSaveChangesWithNoSqlWriteInTransactionAsync(sqlContext, numBooksChanged, () => sqlContext.SaveChangesAsync())); //VERIFY ex.Message.ShouldStartWith("Response status code does not indicate success: 404 Substatus:"); numBooksChanged.ShouldEqual(1); sqlContext.Books.Count().ShouldEqual(0); } }
public void TestAverageReviewSqlServerOk() { //SETUP var options = this.CreateUniqueClassOptionsWithLogging <SqlDbContext>( log => _output.WriteLine(log.Message)); using (var context = new SqlDbContext(options)) { context.Database.EnsureCreated(); context.WipeAllDataFromDatabase(); var book = DddEfTestData.CreateDummyBookOneAuthor(); book.AddReview(5, "test", "test"); context.Add(book); context.SaveChanges(); //ATTEMPT var aveReviews = context.Books .Select(p => p.Reviews.Select(y => (double?)y.NumStars).Average()) .Single(); //VERIFY aveReviews.ShouldEqual(5); } }
public async Task TestSaveChangesIndirectUpdatesNoSqlOk() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], GetType().Name); using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { sqlContext.Database.EnsureCreated(); noSqlContext.Database.EnsureCreated(); var book = DddEfTestData.CreateDummyBookTwoAuthorsTwoReviews(); sqlContext.Add(book); await sqlContext.SaveChangesAsync(); } using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { //ATTEMPT var book = sqlContext.Books.Include(x => x.Reviews).Single(); book.AddReview(5, "xxx", "yyy"); await sqlContext.SaveChangesAsync(); //VERIFY sqlContext.Books.Count().ShouldEqual(1); var noSqlBook = noSqlContext.Books.Single(p => p.BookId == book.BookId); noSqlBook.AuthorsOrdered.ShouldEqual("Author1, Author2"); noSqlBook.ReviewsCount.ShouldEqual(3); } }
public void TestSaveChangesUpdatesNoSqlFail() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], "UNKNOWNDATABASENAME"); using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { sqlContext.Database.EnsureCreated(); //ATTEMPT var book = DddEfTestData.CreateDummyBookTwoAuthorsTwoReviews(); sqlContext.Add(book); var ex = Assert.Throws <WebException>(() => sqlContext.SaveChanges()); //VERIFY sqlContext.Books.Count().ShouldEqual(0); } }
public void TestSerializeFourBooks() { //SETUP var books = DddEfTestData.CreateFourBooks(); //ATTEMPT var jsonString = books.DefaultSerializeToJson(); //VERIFY }
public void TestProjectionMappingBookTitle() { //SETUP var wrappedMapper = AutoMapperHelpers.CreateWrapperMapper <Book, BookTitle>(); //ATTEMPT var input = DddEfTestData.CreateFourBooks().AsQueryable(); var list = input.ProjectTo <BookTitle>(wrappedMapper.MapperReadConfig).ToList(); //VERIFY list.First().Title.ShouldEqual("Refactoring"); }
public void TestDirectMappingBookTitle() { //SETUP var wrappedMapper = AutoMapperHelpers.CreateWrapperMapper <Book, BookTitle>(); //ATTEMPT var input = DddEfTestData.CreateFourBooks().First(); var data = wrappedMapper.MapperSaveConfig.CreateMapper().Map <BookTitle>(input); //VERIFY data.Title.ShouldEqual("Refactoring"); }
public void TestBuildCallNoParameters() { //SETUP var method = typeof(Book).GetMethod(nameof(Book.RemovePromotion)); var target = DddEfTestData.CreateFourBooks().Last(); //ATTEMPT var action = BuildCall.CallMethodReturnVoid(method, typeof(Tests.Dtos.ChangePubDateDto), typeof(Book), new List<PropertyMatch>()); action.Invoke(target); //VERIFY target.ActualPrice.ShouldEqual(target.OrgPrice); }
public void TestProjectionMappingBookTitleAndCount() { //SETUP var genSerConfig = new BookTitleAndCountConfig(); var mapperConfig = AutoMapperHelpers.CreateReadConfig <Book, BookTitleAndCount>(genSerConfig.AlterReadMapping); //ATTEMPT var input = DddEfTestData.CreateFourBooks().AsQueryable(); var list = input.ProjectTo <BookTitleAndCount>(mapperConfig).ToList(); //VERIFY list.Last().Title.ShouldEqual("Quantum Networking"); list.Last().ReviewsCount.ShouldEqual(2); }
public void TestDirectMappingBookTitleAndCount() { //SETUP var genSerConfig = new BookTitleAndCountConfig(); var mapperConfig = AutoMapperHelpers.CreateReadConfig <Book, BookTitleAndCount>(genSerConfig.AlterReadMapping); //ATTEMPT var input = DddEfTestData.CreateFourBooks().Last(); var data = mapperConfig.CreateMapper().Map <BookTitleAndCount>(input); //VERIFY data.Title.ShouldEqual("Quantum Networking"); data.ReviewsCount.ShouldEqual(2); }
public void TestDirectMappingToBookNotSetPrivateSetter() { //SETUP var wrappedMapper = AutoMapperHelpers.CreateWrapperMapper <BookTitle, Book>(); var entity = DddEfTestData.CreateFourBooks().First(); //ATTEMPT var dto = new BookTitle { Title = "New Title" }; var data = wrappedMapper.MapperSaveConfig.CreateMapper().Map(dto, entity); //VERIFY data.Title.ShouldEqual("Refactoring"); }
public void TestBuildCallChangePubDateDto() { //SETUP var prop = new PropertyMatch(true, PropertyMatch.TypeMatchLevels.Match, typeof(Tests.Dtos.ChangePubDateDto).GetProperty(nameof(Tests.Dtos.ChangePubDateDto.PublishedOn))); var method = typeof(Book).GetMethod(nameof(Book.UpdatePublishedOn)); var dto = new Tests.Dtos.ChangePubDateDto { PublishedOn = new DateTime(2000,1,1)}; var target = DddEfTestData.CreateDummyBooks(1).Single(); //ATTEMPT var action = BuildCall.CallMethodReturnVoid(method, typeof(Tests.Dtos.ChangePubDateDto), typeof(Book), new List<PropertyMatch>{prop}); action.Invoke(dto, target); //VERIFY target.PublishedOn.ShouldEqual(new DateTime(2000, 1, 1)); }
public void TestCreateOrderCorrectBookInfoOk() { //SETUP var book = DddEfTestData.CreateDummyBookOneAuthor(); //ATTEMPT var lineItems = new List <OrderBooksDto> { new OrderBooksDto(book.BookId, book, 3) }; var status = Order.CreateOrderFactory("user", DateTime.Today.AddDays(3), lineItems); //VERIFY status.HasErrors.ShouldBeFalse(); status.Result.LineItems.Count().ShouldEqual(1); status.Result.LineItems.First().NumBooks.ShouldEqual((short)3); status.Result.LineItems.First().BookPrice.ShouldEqual(book.ActualPrice); }
public void TestChangeDeliveryDateOk() { //SETUP var book = DddEfTestData.CreateDummyBookOneAuthor(); var lineItems = new List <OrderBooksDto> { new OrderBooksDto(book.BookId, book, 3) }; var order = Order.CreateOrder("user", DateTime.Today.AddDays(1), lineItems).Result; //ATTEMPT var newDeliverDate = DateTime.Today.AddDays(2); var status = order.ChangeDeliveryDate("user", newDeliverDate); //VERIFY status.IsValid.ShouldBeTrue(); order.ExpectedDeliveryDate.ShouldEqual(newDeliverDate); }
public void TestResetAndSerializeFourBooks() { //SETUP var options = SqliteInMemory.CreateOptions <DddBookContext>(); using (var context = new DddBookContext(options)) { var books = DddEfTestData.CreateFourBooks(); var resetter = new DataResetter(context); resetter.ResetKeysEntityAndRelationships(books); //ATTEMPT var jsonString = books.DefaultSerializeToJson(); //VERIFY } }
public TestScalarFunctions(ITestOutputHelper output) { _output = output; var options = this.CreateUniqueClassOptions <SqlDbContext>(); using (var context = new SqlDbContext(options)) { context.Database.EnsureCreated(); var filepath = TestData.GetFilePath(@"..\..\EfCoreSqlAndCosmos\wwwroot\AddUserDefinedFunctions.sql"); ApplyScriptsToDatabase.ExecuteScriptFileInTransaction(context, filepath); context.WipeAllDataFromDatabase(); var book = DddEfTestData.CreateDummyBookTwoAuthorsTwoReviews(); context.Add(book); context.SaveChanges(); } }
public void TestBookReadMappingsWithConfig() { //SETUP var maps = new MapperConfigurationExpression(); //ATTEMPT var mapCreator = new CreateConfigGenerator(typeof(BookTitleAndCount), _bookInfo, new BookTitleAndCountConfig()); mapCreator.Accessor.AddReadMappingToProfile(maps); //VERIFY var config = new MapperConfiguration(maps); var entity = DddEfTestData.CreateFourBooks().Last(); var dto = config.CreateMapper().Map <BookTitleAndCount>(entity); dto.Title.ShouldEqual("Quantum Networking"); dto.ReviewsCount.ShouldEqual(2); }
public void TestAddBookOk() { //SETUP var options = SqliteInMemory.CreateOptions <SqlDbContext>(); using (var context = new SqlDbContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); //ATTEMPT context.Add(DddEfTestData.CreateDummyBookOneAuthor()); var changes = BookChangeInfo.FindBookChanges(context.ChangeTracker.Entries().ToList(), context); //VERIFY changes.Single().BookId.ShouldNotEqual(Guid.Empty); changes.Single().State.ShouldEqual(EntityState.Added); } }
public void TestCreateOrderWithCorrectLineNumsOk() { //SETUP var book1 = DddEfTestData.CreateDummyBookOneAuthor(); var book2 = DddEfTestData.CreateDummyBookOneAuthor(); //ATTEMPT var bookOrders = new List <OrderBooksDto>() { new OrderBooksDto(book1.BookId, book1, 1), new OrderBooksDto(book2.BookId, book2, 2) }; var status = Order.CreateOrderFactory("user", DateTime.Today.AddDays(3), bookOrders); //VERIFY status.HasErrors.ShouldBeFalse(); status.Result.LineItems.Count().ShouldEqual(2); status.Result.LineItems.First().LineNum.ShouldEqual((byte)1); status.Result.LineItems.Last().LineNum.ShouldEqual((byte)2); }
public void TestChangeDeliveryDateOk() { //SETUP var book = DddEfTestData.CreateDummyBookOneAuthor(); var lineItems = new List <OrderBooksDto> { new OrderBooksDto(book.BookId, book, 3) }; var order = Order.CreateOrderFactory("user", DateTime.Today.AddDays(1), lineItems).Result; //ATTEMPT var newDeliverDate = DateTime.Today.AddDays(2); if (newDeliverDate.DayOfWeek == DayOfWeek.Sunday) { newDeliverDate = newDeliverDate.AddDays(1); } var status = order.ChangeDeliveryDate("user", newDeliverDate); //VERIFY status.HasErrors.ShouldBeFalse(); order.ExpectedDeliveryDate.ShouldEqual(newDeliverDate); }
public void TestSaveChangesDirectUpdatesNoSqlOk() { //SETUP var config = AppSettings.GetConfiguration(); var builder = new DbContextOptionsBuilder <NoSqlDbContext>() .UseCosmos( config["endpoint"], config["authKey"], GetType().Name); using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { sqlContext.Database.EnsureCreated(); noSqlContext.Database.EnsureCreated(); var book = DddEfTestData.CreateDummyBookTwoAuthorsTwoReviews(); sqlContext.Add(book); sqlContext.SaveChanges(); } using (var noSqlContext = new NoSqlDbContext(builder.Options)) using (var sqlContext = new SqlDbContext(_sqlOptions, new NoSqlBookUpdater(noSqlContext))) { //ATTEMPT var book = sqlContext.Books.Single(); book.PublishedOn = DddEfTestData.DummyBookStartDate.AddDays(1); sqlContext.SaveChanges(); //VERIFY sqlContext.Books.Count().ShouldEqual(1); var noSqlBook = noSqlContext.Books.Single(p => p.BookId == book.BookId); noSqlBook.PublishedOn.ShouldEqual(DddEfTestData.DummyBookStartDate.AddDays(1)); noSqlBook.AuthorsOrdered.ShouldEqual("Author1, Author2"); noSqlBook.ReviewsCount.ShouldEqual(2); } }
public void TestCheckUpdateBookCachePropertiesOk() { //SETUP var sqlOptions = SqliteInMemory.CreateOptions <SqlEventsDbContext>(); using (var context = new SqlEventsDbContext(sqlOptions, null)) { context.Database.EnsureCreated(); var books = DddEfTestData.CreateDummyBooksWithEvents(2); books[0].AuthorsOrdered = null; context.AddRange(books); context.SaveChanges(); var service = new HardResetCacheService(context); //ATTEMPT var status = service.CheckUpdateBookCacheProperties(); //VERIFY status.Message.ShouldEqual("Processed 2 books and 2 errors found. See returned string for details"); _output.WriteLine(status.Result); } }