continue writing tests for episode controller. add assert helper.

This commit is contained in:
StevanFreeborn
2022-07-06 19:46:19 -05:00
parent ae782e8c56
commit 1e404b0467
5 changed files with 79 additions and 31 deletions
+15
View File
@@ -0,0 +1,15 @@
using FluentAssertions;
using System.Net.Http.Headers;
namespace server.tests.Helpers
{
internal static class AssertHelper
{
public static void CheckForRateLimitingHeaders(HttpResponseHeaders headers)
{
headers.Should().ContainKey("X-Rate-Limit-Limit");
headers.Should().ContainKey("X-Rate-Limit-Remaining");
headers.Should().ContainKey("X-Rate-Limit-Reset");
}
}
}
@@ -5,8 +5,9 @@ using MongoDB.Bson;
using server.Models;
using System.Net;
using System.Text.Json;
using server.tests.Helpers;
namespace server.tests.integrationTests
namespace server.tests.IntegrationTests
{
public class CharactersControllerIntegrationTests
{
@@ -40,9 +41,7 @@ namespace server.tests.integrationTests
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
characters.Should().NotBeNull();
characters.Should().BeOfType<List<Character>>();
@@ -63,9 +62,7 @@ namespace server.tests.integrationTests
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
characters.Should().NotBeNull();
characters.Should().BeOfType<List<Character>>();
@@ -91,12 +88,11 @@ namespace server.tests.integrationTests
var details = JsonSerializer.Deserialize<ValidationProblemDetails>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
details.Should().NotBeNull();
details.Should().BeOfType<ValidationProblemDetails>();
details.Errors.Should().NotBeNull();
}
[Fact]
@@ -113,9 +109,7 @@ namespace server.tests.integrationTests
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
characters.Should().NotBeNull();
characters.Should().BeOfType<List<Character>>();
@@ -141,9 +135,7 @@ namespace server.tests.integrationTests
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
characters.Should().NotBeNull();
characters.Should().BeOfType<List<Character>>();
@@ -175,9 +167,7 @@ namespace server.tests.integrationTests
var character = JsonSerializer.Deserialize<Character>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
character.Should().NotBeNull();
character.Should().BeOfType<Character>();
@@ -198,9 +188,7 @@ namespace server.tests.integrationTests
var details = JsonSerializer.Deserialize<ValidationProblemDetails>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
details.Should().NotBeNull();
details.Should().BeOfType<ValidationProblemDetails>();
@@ -222,9 +210,7 @@ namespace server.tests.integrationTests
var details = JsonSerializer.Deserialize<ProblemDetails>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
details.Should().NotBeNull();
details.Should().BeOfType<ProblemDetails>();
@@ -1,10 +1,12 @@
using FluentAssertions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Testing;
using server.Models;
using System.Net;
using System.Text.Json;
using server.tests.Helpers;
namespace server.tests.integrationTests
namespace server.tests.IntegrationTests
{
public class EpisodesControllerIntegrationTests
{
@@ -38,13 +40,58 @@ namespace server.tests.integrationTests
var episodes = JsonSerializer.Deserialize<List<Episode>>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
episodes.Should().NotBeNull();
episodes.Should().BeOfType<List<Episode>>();
episodes.Should().HaveCountGreaterThan(0);
}
[Fact]
public async Task GetEpisodesAsync_SeasonOneEpisodes_Returns200StatusCodeWithEpisodes()
{
var seasonValue = 1;
var url = $"{_endpoint}?season={seasonValue}";
var response = await _client.GetAsync(url);
var data = await response.Content.ReadAsStreamAsync();
var episodes = JsonSerializer.Deserialize<List<Episode>>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
episodes.Should().NotBeNull();
episodes.Should().BeOfType<List<Episode>>();
episodes.Should().HaveCountGreaterThan(0);
foreach (var episode in episodes)
{
episode.Season.Should().Be(seasonValue);
}
}
[Fact]
public async Task GetEpisodesAsync_InvalidSeasonQueryParameter_Returns400StatusCodeWithValidationProblemDetails()
{
var seasonValue = "test";
var url = $"{_endpoint}?season={seasonValue}";
var response = await _client.GetAsync(url);
var data = await response.Content.ReadAsStreamAsync();
var details = JsonSerializer.Deserialize<ValidationProblemDetails>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
details.Should().NotBeNull();
details.Should().BeOfType<ValidationProblemDetails>();
details.Errors.Should().NotBeNull();
}
}
}
@@ -6,7 +6,7 @@ using server.Models;
using server.Persistence.Repositories;
using System.Net;
namespace server.tests.unitTests
namespace server.tests.UnitTests
{
public class CharacterControllerUnitTests
{
@@ -6,7 +6,7 @@ using server.Models;
using server.Persistence.Repositories;
using System.Net;
namespace server.tests.unitTests
namespace server.tests.UnitTests
{
public class EpisodesControllerUnitTests
{