public async Task TestGetSingleOnEntityNotFound() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServicesAsync(context, utData.Wrapped); //ATTEMPT var book = await service.ReadSingleAsync <Book>(99); //VERIFY service.IsValid.ShouldBeFalse(); service.Errors.First().ToString().ShouldEqual("Sorry, I could not find the Book you were looking for."); book.ShouldBeNull(); } }
public void TestCallUpdateBookWithExistingAuthorWithTwoIncludes() { //SETUP int bookId; int authorId; var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); var bookSeeded = context.SeedDatabaseFourBooks(); bookId = bookSeeded.First().BookId; authorId = bookSeeded.Last().AuthorsLink.First().AuthorId; } using (var context = new EfCoreContext(options)) { var utData = context.SetupSingleDtoAndEntities <AddNewAuthorToBookUsingIncludesDto>(); var service = new CrudServices(context, utData.ConfigAndMapper); //ATTEMPT var dto = new AddNewAuthorToBookUsingIncludesDto { BookId = bookId, AddThisAuthor = context.Authors.SingleOrDefault(x => x.AuthorId == authorId), Order = 2 }; service.UpdateAndSave(dto); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); service.Message.ShouldEqual("Successfully updated the Book"); var bookAuthorsName = context.Books .Where(x => x.BookId == bookId) .SelectMany(x => x.AuthorsLink.Select(y => y.Author.Name)) .ToArray(); bookAuthorsName.ShouldEqual(new String[] { "Martin Fowler", "Future Person" }); } }
public void TestManyOk() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServices(context, utData.ConfigAndMapper); //ATTEMPT var books = service.ReadManyNoTracked <Book>(); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); books.Count().ShouldEqual(4); context.Entry(books.ToList().First()).State.ShouldEqual(EntityState.Detached); } }
public async Task TestProjectBookTitleManyOk() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServicesAsync(context, utData.ConfigAndMapper); //ATTEMPT var list = await service.ReadManyNoTracked <BookTitle>().ToListAsync(); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); list.Count.ShouldEqual(4); list.Select(x => x.Title).ShouldEqual(new [] { "Refactoring", "Patterns of Enterprise Application Architecture", "Domain-Driven Design", "Quantum Networking" }); } }
public void TestReadSingleCollectionTagsWithConfig() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookWithTags>(); var service = new CrudServices(context, utData.ConfigAndMapper); //ATTEMPT var dto = service.ReadSingle <BookWithTags>(1); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); dto.BookId.ShouldEqual(1); dto.TagIds.ShouldEqual(new[] { "Editor's Choice", "Refactoring" }); } }
public void TestGetSingleOnEntityWhereBad() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServices(context, utData.ConfigAndMapper); //ATTEMPT var book = service.ReadSingle <Book>(x => x.BookId == 99); //VERIFY service.IsValid.ShouldBeFalse(); service.Errors.First().ToString().ShouldEqual("Sorry, I could not find the Book you were looking for."); book.ShouldBeNull(); } }
public async Task TestReadSingleCollection() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookWithAuthors>(); var service = new CrudServicesAsync(context, utData.ConfigAndMapper); //ATTEMPT var dto = await service.ReadSingleAsync <BookWithAuthors>(1); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); dto.BookId.ShouldEqual(1); dto.Authors.Count.ShouldEqual(1); } }
public void TestProjectSingleWhereOk() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitleAndCount>(); var service = new CrudServices(context, utData.ConfigAndMapper); //ATTEMPT var dto = service.ReadSingle <BookTitleAndCount>(x => x.BookId == 1); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); dto.BookId.ShouldEqual(1); dto.Title.ShouldEqual("Refactoring"); } }
public async Task TestProjectFromEntityToDtoOk() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServicesAsync(context, utData.ConfigAndMapper); //ATTEMPT var dto = await service.ProjectFromEntityToDto <Book, BookTitle>(x => x.Where(y => y.BookId == 1)).SingleAsync(); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); dto.BookId.ShouldEqual(1); dto.Title.ShouldEqual("Refactoring"); } }
public async Task TestProjectBookTitleSingleOk() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServicesAsync(context, utData.ConfigAndMapper, new CreateNewDBContextHelper(() => new EfCoreContext(options))); //ATTEMPT var dto = await service.ReadSingleAsync <BookTitle>(1); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); dto.BookId.ShouldEqual(1); dto.Title.ShouldEqual("Refactoring"); } }
public void TestGetSingleOnEntityWhereOk() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServices(context, utData.ConfigAndMapper); //ATTEMPT var book = service.ReadSingle <Book>(x => x.BookId == 1); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); book.BookId.ShouldEqual(1); context.Entry(book).State.ShouldEqual(EntityState.Unchanged); } }
public void TestUpdateViaStatedMethodBad() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <Tests.Dtos.ChangePubDateDto>(); var service = new CrudServices(context, utData.Wrapped); //ATTEMPT var dto = new Tests.Dtos.ChangePubDateDto { BookId = 4, PublishedOn = new DateTime(2000, 1, 1) }; var ex = Assert.Throws <InvalidOperationException>(() => service.UpdateAndSave(dto, nameof(Book.AddReview))); //VERIFY ex.Message.ShouldStartWith("Could not find a method of name AddReview. The method that fit the properties in the DTO/VM are:"); } }
public void TestCreateAuthorNameNullNoValidationOk() { //SETUP var unique = Guid.NewGuid().ToString(); var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); var utData = context.SetupSingleDtoAndEntities <LocalAuthorDto>(); var service = new CrudServices(context, utData.Wrapped); //ATTEMPT var author = new LocalAuthorDto { Name = null, Email = unique }; var ex = Assert.Throws <Microsoft.EntityFrameworkCore.DbUpdateException> (() => service.CreateAndSave(author)); //VERIFY ex.InnerException?.Message.ShouldEqual("SQLite Error 19: 'NOT NULL constraint failed: Authors.Name'."); } }
public void TestCreateAuthorNameGoodNoValidationOk() { //SETUP var unique = Guid.NewGuid().ToString(); var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); var utData = context.SetupSingleDtoAndEntities <LocalAuthorDto>(); var service = new CrudServices(context, utData.Wrapped); //ATTEMPT var author = new LocalAuthorDto { Name = "Name", Email = unique }; service.CreateAndSave(author); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); } }
public async Task TestProjectBookTitleManyOk() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServicesAsync(context, utData.ConfigAndMapper); //ATTEMPT var list = await service.ReadManyWithPreQueryNoTracked <Book, BookTitle>(books => books.Where(x => x.AuthorsLink.Select(y => y.Author.Name).Contains("Martin Fowler"))).ToListAsync(); //VERIFY service.IsValid.ShouldBeTrue(service.GetAllErrors()); list.Count.ShouldEqual(2); list.Select(x => x.Title).ShouldEqual(new [] { "Refactoring", "Patterns of Enterprise Application Architecture" }); } }
public async Task TestProjectSingleWhereBad() { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitleAndCount>(); var service = new CrudServicesAsync(context, utData.ConfigAndMapper); //ATTEMPT var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => service.ReadSingleAsync <BookTitleAndCount>(x => true)); //VERIFY #if NETCOREAPP2_1 ex.Message.ShouldEqual("Source sequence contains more than one element."); #elif NETCOREAPP3_0 ex.Message.ShouldEqual("Enumerator failed to MoveNextAsync."); #endif } }
public void TestCreateAuthorNameNullPerDtoConfigValidationOk() { //SETUP var unique = Guid.NewGuid().ToString(); var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); var utData = context.SetupSingleDtoAndEntities <LocalAuthorDtoWithConfig>(); var service = new CrudServices(context, utData.Wrapped); //ATTEMPT var author = new LocalAuthorDtoWithConfig { Name = null, Email = unique }; service.CreateAndSave(author); //VERIFY service.IsValid.ShouldBeFalse(); service.GetAllErrors().ShouldEqual("Author: The Name field is required."); } }
public void TestReadSingleWhereNullIsError(int bookId, bool shouldBeValid) { //SETUP var options = SqliteInMemory.CreateOptions <EfCoreContext>(); using (var context = new EfCoreContext(options)) { context.Database.EnsureCreated(); context.SeedDatabaseFourBooks(); var utData = context.SetupSingleDtoAndEntities <BookTitle>(); var service = new CrudServices(context, utData.ConfigAndMapper); //ATTEMPT var book = service.ReadSingle <Book>(x => x.BookId == bookId); //VERIFY service.IsValid.ShouldEqual(shouldBeValid); if (!service.IsValid) { service.GetAllErrors().ShouldEqual("Sorry, I could not find the Book you were looking for."); } } }