public void Should_Create_Records_With_ManyToOne_Relationships(IDbProvider db) { Trace.WriteLine(TraceObjectGraphInfo(db)); // Setup var publisher = PublisherFixture.GetFirstPublisher(); var firstBook = BookFixture.GetFirstBook(publisher); var secondBook = BookFixture.GetSecondBook(publisher); db.Create(publisher); db.Create(firstBook); db.Create(secondBook); // Execute var query = db.Query <BookModel>() .Join <PublisherModel>().On((b, p) => b.Publisher.Id == p.Id) .Where((b, p) => p.Id == publisher.Id); var actualBooks = query.ToList(); // Assert actualBooks.Should().HaveCount(2); actualBooks[0].Publisher.Id.Should().Be(publisher.Id); //actualBooks[0].Publisher.Name.Should().Be(publisher.Name); actualBooks[1].Publisher.Id.Should().Be(publisher.Id); //actualBooks[1].Publisher.Name.Should().Be(publisher.Name); }
public async Task Should_Remove_Records_From_ManyToMany_Relationship(IDbProvider db) { Trace.WriteLine(TraceObjectGraphInfo(db)); // Setup var publisher = PublisherFixture.GetThirdPublisher(); await db.Create(publisher); var firstBook = BookFixture.GetFirstBook(publisher); var secondBook = BookFixture.GetSecondBook(publisher); await db.Create(firstBook); await db.Create(secondBook); var expectedAuthor = AuthorFixture.GetThirdAuthor(); expectedAuthor.AddBooks(firstBook, secondBook); await db.Create(expectedAuthor); // Execute expectedAuthor.RemoveBooks(firstBook); await db.Update(expectedAuthor); // Assert var actualAuthor = await db.Query <AuthorModel>() .Where(a => a.Email == expectedAuthor.Email) .SingleAsync(); actualAuthor.Should().NotBeNull(); var moreBooks = await db.Query <BookModel>() .ManyToManyJoin <AuthorModel>() .Where((b, a) => a.Id == actualAuthor.Id) .Select(); actualAuthor.AddBooks(moreBooks.ToArray()); // Excluding publisher info because only its ID is included in the hydration. actualAuthor.Should().BeEquivalentTo(expectedAuthor, options => options.Excluding(a => a.SelectedMemberPath.Contains("Publisher"))); }
public void Should_Create_Records_With_ManyToMany_Relationships(IDbProvider db) { Trace.WriteLine(TraceObjectGraphInfo(db)); // Setup var publisher = PublisherFixture.GetFirstPublisher(); db.Create(publisher); var firstBook = BookFixture.GetFirstBook(publisher); var secondBook = BookFixture.GetSecondBook(publisher); db.Create(firstBook); db.Create(secondBook); var expectedAuthor = AuthorFixture.GetFirstAuthor(); expectedAuthor.AddBooks(firstBook, secondBook); // Execute db.Create(expectedAuthor); // Assert var actualAuthor = db.Query <AuthorModel>() .Where(a => a.Email == expectedAuthor.Email) .Select() .Single(); actualAuthor.Should().NotBeNull(); actualAuthor.AddBooks(db.Query <BookModel>() .ManyToManyJoin <AuthorModel>() .Where((b, a) => a.Id == actualAuthor.Id) .Select().ToArray()); // Excluding publisher info because only its ID is included in the hydration. actualAuthor.ShouldBeEquivalentTo(expectedAuthor, options => options.Excluding(a => a.PropertyPath.Contains("Publisher"))); }