From ec98526ff78c9c702de007113ca1fd0fff4f3324 Mon Sep 17 00:00:00 2001 From: StevanFreeborn Date: Mon, 11 Jul 2022 18:07:42 -0500 Subject: [PATCH] finished integration tests for quotes controller --- .../QuotesControllerIntegrationTests.cs | 71 +++++++++++++++++++ server/Controllers/v1/QuotesController.cs | 2 +- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/server.tests/v1/integrationTests/QuotesControllerIntegrationTests.cs b/server.tests/v1/integrationTests/QuotesControllerIntegrationTests.cs index dfd13d1..c3c029b 100644 --- a/server.tests/v1/integrationTests/QuotesControllerIntegrationTests.cs +++ b/server.tests/v1/integrationTests/QuotesControllerIntegrationTests.cs @@ -1,5 +1,6 @@ using FluentAssertions; using Microsoft.AspNetCore.Mvc; +using MongoDB.Bson; using server.Models; using server.tests.Helpers; using server.tests.Http; @@ -212,5 +213,75 @@ namespace server.tests.v1.IntegrationTests quote.Narrator.ToLower().Should().Contain(narrator); } } + + [Fact] + public async Task GetQuotesById_ValidQuoteId_Returns200StatusCodeWithQuote() + { + var response = await _client.GetAsync(_endpoint); + + var data = await response.Content.ReadAsStreamAsync(); + + var quotes = JsonSerializer.Deserialize>(data, _serializerOptions); + + var quoteId = quotes[0].Id; + + var url = $"{_endpoint}/{quoteId}"; + + response = await _client.GetAsync(url); + + data = await response.Content.ReadAsStreamAsync(); + + var quote = JsonSerializer.Deserialize(data, _serializerOptions); + + response.StatusCode.Should().Be(HttpStatusCode.OK); + AssertHelper.CheckForRateLimitingHeaders(response.Headers); + + quote.Should().NotBeNull(); + quote.Should().BeOfType(); + quote.Id.Should().Be(quoteId); + } + + [Fact] + public async Task GetQuotesById_InvalidQuoteId_Returns400StatusCodeWithValidationProblemDetails() + { + var quoteId = "1"; + + var url = $"{_endpoint}/{quoteId}"; + + var response = await _client.GetAsync(url); + + var data = await response.Content.ReadAsStreamAsync(); + + var details = JsonSerializer.Deserialize(data, _serializerOptions); + + response.StatusCode.Should().Be(HttpStatusCode.BadRequest); + AssertHelper.CheckForRateLimitingHeaders(response.Headers); + + details.Should().NotBeNull(); + details.Should().BeOfType(); + details.Detail.Should().NotBeNull(); + details.Errors.Should().NotBeNull(); + } + + [Fact] + public async Task GetQuoteByIdAsync_ValidQuoteIdForNonExistentQuote_Returns404StatusCodeWithProblemDetails() + { + var quoteId = ObjectId.GenerateNewId(); + + var url = $"{_endpoint}/{quoteId}"; + + var response = await _client.GetAsync(url); + + var data = await response.Content.ReadAsStreamAsync(); + + var details = JsonSerializer.Deserialize(data, _serializerOptions); + + response.StatusCode.Should().Be(HttpStatusCode.NotFound); + AssertHelper.CheckForRateLimitingHeaders(response.Headers); + + details.Should().NotBeNull(); + details.Should().BeOfType(); + details.Detail.Should().NotBeNull(); + } } } diff --git a/server/Controllers/v1/QuotesController.cs b/server/Controllers/v1/QuotesController.cs index a5a18d6..a9ed1ba 100644 --- a/server/Controllers/v1/QuotesController.cs +++ b/server/Controllers/v1/QuotesController.cs @@ -67,7 +67,7 @@ namespace server.Controllers.v1 if (!ObjectId.TryParse(id, out _)) { ModelState.AddModelError(nameof(id), $"{id} is not a valid id"); - return ValidationProblem(); + return ValidationProblem(detail: "Invalid request"); } try