コード例 #1
0
        public async Task GetAllMovies_restores_all_read_model_entities_correctly(
            MovieDocument[] documents, SomeDocument[] residuals)
        {
            // Arrange
            string collectionId = "GetAllMovies";

            await InitializeCollection(collectionId);

            var sut = new CosmosDbMovieRepository(
                DocumentClient,
                new CollectionReference(DatabaseId, collectionId));

            Task Create(object d) => CreateDocument(collectionId, d);

            await Task.WhenAll(documents.Select(Create));

            await Task.WhenAll(residuals.Select(Create));

            // Act
            ImmutableArray <Movie> actual = await sut.GetAllMovies();

            // Assert
            actual.Should().BeEquivalentTo(
                expectation: documents,
                c => c.Excluding(x => x.ETag).ExcludingMissingMembers());
        }
コード例 #2
0
        public async Task given_document_not_found_then_FindMovie_returns_null(
            Guid movieId)
        {
            var   sut    = new CosmosDbMovieRepository(DocumentClient, Collection);
            Movie actual = await sut.FindMovie(movieId);

            actual.Should().BeNull();
        }
コード例 #3
0
        public void given_ETag_is_null_then_UpdateMovie_fails(Movie movie)
        {
            movie.ETag = default;
            IDocumentClient client = DocumentClient;
            var             sut    = new CosmosDbMovieRepository(client, Collection);

            Func <Task> action = () => sut.UpdateMovie(movie);

            action.Should()
            .Throw <ArgumentException>()
            .Where(x => x.ParamName == "movie");
        }
コード例 #4
0
        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,
            });
        }
コード例 #5
0
        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,
            });
        }
コード例 #6
0
        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);
            });
        }