public async Task CreateMovie_creates_document_correctly(Movie movie) { // Arrange movie.ETag = default; IDocumentClient client = DocumentClient; var sut = new CosmosDbMovieRepository(client, Collection); // Act await sut.CreateMovie(movie); // Assert IQueryable <MovieDocument> query = from d in client.CreateDocumentQuery <MovieDocument>() where d.Discriminator == nameof(MovieDocument) && d.Id == movie.Id select d; MovieDocument actual = await query.SingleOrDefault(); actual.Should().BeEquivalentTo(new { movie.Id, movie.Title, Screenings = from s in movie.Screenings select new { s.Id, s.TheaterId, s.TheaterName, s.Seats, s.ScreeningTime, s.DefaultFee, s.ChildrenFee, s.CreatedAt, }, movie.CreatedAt, }); }
public async Task given_document_found_then_FindMovie_restores_read_model_entity_correctly( Movie movie) { // Arrange var sut = new CosmosDbMovieRepository(DocumentClient, Collection); await sut.CreateMovie(movie); // Act Movie actual = await sut.FindMovie(movie.Id); // Assert IQueryable <MovieDocument> query = from d in DocumentClient.CreateDocumentQuery <MovieDocument>() where d.Id == movie.Id select d; MovieDocument document = await query.SingleOrDefault(); actual.Should().BeEquivalentTo(new { document.Id, document.ETag, document.Title, Screenings = from s in document.Screenings select new { s.Id, ETag = default(string), s.TheaterId, s.TheaterName, s.Seats, s.ScreeningTime, s.DefaultFee, s.ChildrenFee, s.CreatedAt, }, document.CreatedAt, }); }
public async Task UpdateMovie_replaces_document_correctly( Movie source, IFixture builder) { // Arrange source.ETag = default; IDocumentClient client = DocumentClient; var sut = new CosmosDbMovieRepository(client, Collection); await sut.CreateMovie(source); IQueryable <string> query = from d in DocumentClient.CreateDocumentQuery <MovieDocument>() where d.Id == source.Id select d.ETag; Movie movie = builder .Build <Movie>() .With(x => x.Id, source.Id) .With(x => x.ETag, await query.SingleOrDefault()) .Create(); // Act await sut.UpdateMovie(movie); // Assert Movie actual = await sut.FindMovie(movie.Id); actual.Should().BeEquivalentTo(movie, c => { c.Excluding(x => x.ETag); c.Excluding(x => x.Screenings[0].ETag); c.Excluding(x => x.Screenings[1].ETag); c.Excluding(x => x.Screenings[2].ETag); return(c); }); }