public async Task Post_AuthorRequest_ResponseContainsExpectedAuthorDto()
        {
            // Arrange
            var expectedId     = Guid.NewGuid();
            var expectedAuthor = new Author
            {
                Id          = expectedId,
                FirstName   = $"Name{expectedId.ToString()}",
                LastName    = "author last name",
                DateOfBirth = DateTime.Now
            };
            var request = AuthorRequestFactory.Create(expectedAuthor.FirstName, expectedAuthor.LastName, expectedAuthor.DateOfBirth);

            A.CallTo(() => _authorRepositoryMock.CreateAsync(A <Author> .That.Matches(a => a.FirstName == expectedAuthor.FirstName)))
            .Returns(Task.FromResult(expectedAuthor));

            using var content = HttpContentFactory.CreateStringContent(request);

            // Act
            using var response = await _client.PostAsync("api/authors", content);

            // Assert
            var authorResponse = await response.DeserializeToAsync <AuthorResponse>();

            authorResponse.FirstName.Should().Be(expectedAuthor.FirstName);
            authorResponse.LastName.Should().Be(expectedAuthor.LastName);
            authorResponse.DateOfBirth.Should().Be(expectedAuthor.DateOfBirth);
        }
        public async Task Post_AuthorRequest_StatusCodeIsCreated()
        {
            // Arrange
            var request = AuthorRequestFactory.Create("Mr", "Andersson", DateTime.Now);

            // Act
            using var content  = HttpContentFactory.CreateStringContent(request);
            using var response = await _client.PostAsync("api/authors", content);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Created);
        }
        public async Task Post_AuthorRequest_ResponseContainsCopyrightAndLocationHeaders()
        {
            // Arrange
            var expectedId       = Guid.NewGuid();
            var expectedLocation = $"{_baseUrl}/api/authors/{expectedId.ToString()}";
            var request          = AuthorRequestFactory.Create($"Name{expectedId.ToString()}", "Andersson", DateTime.Now);

            A.CallTo(() => _authorRepositoryMock.CreateAsync(A <Author> .That.Matches(a => a.FirstName == request.FirstName)))
            .Returns(Task.FromResult(new Author {
                Id = expectedId
            }));

            using var content = HttpContentFactory.CreateStringContent(request);

            // Act
            using var response = await _client.PostAsync("api/authors", content);

            // Assert
            response.Headers.Location.Should().Be(expectedLocation);
            response.Headers.GetValues(Constants.CopyrightHeader).ElementAt(0).Should().Be(Constants.CopyrightValue);
        }
        public async Task Post_AuthorRequest_AuthorIsAdded()
        {
            // Arrange
            var request = AuthorRequestFactory.Create("Mr", "Andersson", DateTime.Now);

            using var content = HttpContentFactory.CreateStringContent(request);

            // Act
            using var response = await _client.PostAsync("api/authors", content);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Created);

            var authorResponse = await response.DeserializeToAsync <AuthorResponse>();

            authorResponse.FirstName.Should().Be(request.FirstName);
            authorResponse.LastName.Should().Be(request.LastName);
            authorResponse.DateOfBirth.Should().Be(request.DateOfBirth);

            response.Headers.Location.Should().Be($"{_baseUrl}/api/authors/{authorResponse.Id.ToString()}");
            response.Headers.GetValues(Constants.CopyrightHeader).ElementAt(0).Should().Be(Constants.CopyrightValue);

            await EnsureAuthorIsCorrectOnDatabaseAsync(authorResponse);
        }