public async Task CreateCoffeeRatingIntegrationTests_Post_Coffee_Rating_Returns_Expected_All_Validation_Errors()
        {
            // Arrange
            var client = this.fixture.factory.CreateClient();

            // Act
            var coffeeItem = new CoffeeRatingCreate()
            {
                CoffeeId = 0,
                Comment  = "",
                Rating   = 10
            };

            var payload     = JsonConvert.SerializeObject(coffeeItem);
            var postContent = new StringContent(payload, Encoding.UTF8, "application/json");

            var response = await client.PostAsync("/api/rating", postContent);

            var json = await response.Content.ReadAsStringAsync();

            var content = JsonConvert.DeserializeObject <ValidationErrorsDto>(json);

            // Assert
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);

            Assert.NotNull(content);
            Assert.Equal(4, content.ValidationErrors.Count());
        }
        public async Task CreateCoffeeRatingIntegrationTests_Post_Coffee_Rating_Returns_Correct_Data()
        {
            // Arrange
            var client = this.fixture.factory.CreateClient();

            // Act
            var coffeeItem = new CoffeeRatingCreate()
            {
                CoffeeId = 2,
                Comment  = "Amazing coffee, 5 stars.",
                Rating   = 5
            };

            var payload     = JsonConvert.SerializeObject(coffeeItem);
            var postContent = new StringContent(payload, Encoding.UTF8, "application/json");

            var response = await client.PostAsync("/api/rating", postContent);

            var json = await response.Content.ReadAsStringAsync();

            var content = JsonConvert.DeserializeObject <CreatedRead>(json);

            // Assert
            response.EnsureSuccessStatusCode();

            var nextAvailableIdInDatabase = 3;

            Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            Assert.Equal(nextAvailableIdInDatabase, content.Id);
        }
        public async Task CreateCoffeeRatingIntegrationTests_Post_Coffee_Rating_Returns_Correct_If_Coffee_Entity_Not_Found()
        {
            // Arrange
            var client = this.fixture.factory.CreateClient();

            // Act
            var coffeeItem = new CoffeeRatingCreate()
            {
                CoffeeId = 99,
                Comment  = "Amazing coffee, 5 stars.",
                Rating   = 5
            };

            var payload     = JsonConvert.SerializeObject(coffeeItem);
            var postContent = new StringContent(payload, Encoding.UTF8, "application/json");

            var response = await client.PostAsync("/api/rating", postContent);

            var json = await response.Content.ReadAsStringAsync();

            var content = JsonConvert.DeserializeObject <CreatedRead>(json);

            // Assert
            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
        }
        public async Task CreateCoffeeRatingIntegrationTests_Post_Coffee_Rating_Returns_Expected_Rating_Validation_Errors()
        {
            // Arrange
            var client = this.fixture.factory.CreateClient();

            // Act
            var coffeeItem = new CoffeeRatingCreate()
            {
                CoffeeId = 2,
                Comment  = "Valid comment",
                Rating   = 999
            };

            var payload     = JsonConvert.SerializeObject(coffeeItem);
            var postContent = new StringContent(payload, Encoding.UTF8, "application/json");

            var response = await client.PostAsync("/api/rating", postContent);

            var json = await response.Content.ReadAsStringAsync();

            var content = JsonConvert.DeserializeObject <ValidationErrorsDto>(json);

            // Assert
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);

            Assert.NotNull(content);
            Assert.Equal(1, content.ValidationErrors.Count());

            var firstValidationError = content.ValidationErrors.ElementAt(0);

            Assert.Equal("Rating", firstValidationError.Field);
            Assert.Equal("Rating must be between 1 and 5.", firstValidationError.Message);
        }