continue writing tests for episode controller. add assert helper.
This commit is contained in:
@@ -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 server.Models;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
using server.tests.Helpers;
|
||||||
|
|
||||||
namespace server.tests.integrationTests
|
namespace server.tests.IntegrationTests
|
||||||
{
|
{
|
||||||
public class CharactersControllerIntegrationTests
|
public class CharactersControllerIntegrationTests
|
||||||
{
|
{
|
||||||
@@ -40,9 +41,7 @@ namespace server.tests.integrationTests
|
|||||||
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
characters.Should().NotBeNull();
|
characters.Should().NotBeNull();
|
||||||
characters.Should().BeOfType<List<Character>>();
|
characters.Should().BeOfType<List<Character>>();
|
||||||
@@ -63,9 +62,7 @@ namespace server.tests.integrationTests
|
|||||||
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
characters.Should().NotBeNull();
|
characters.Should().NotBeNull();
|
||||||
characters.Should().BeOfType<List<Character>>();
|
characters.Should().BeOfType<List<Character>>();
|
||||||
@@ -91,12 +88,11 @@ namespace server.tests.integrationTests
|
|||||||
var details = JsonSerializer.Deserialize<ValidationProblemDetails>(data, _serializerOptions);
|
var details = JsonSerializer.Deserialize<ValidationProblemDetails>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
|
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
details.Should().NotBeNull();
|
details.Should().NotBeNull();
|
||||||
details.Should().BeOfType<ValidationProblemDetails>();
|
details.Should().BeOfType<ValidationProblemDetails>();
|
||||||
|
details.Errors.Should().NotBeNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -113,9 +109,7 @@ namespace server.tests.integrationTests
|
|||||||
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
characters.Should().NotBeNull();
|
characters.Should().NotBeNull();
|
||||||
characters.Should().BeOfType<List<Character>>();
|
characters.Should().BeOfType<List<Character>>();
|
||||||
@@ -141,9 +135,7 @@ namespace server.tests.integrationTests
|
|||||||
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
characters.Should().NotBeNull();
|
characters.Should().NotBeNull();
|
||||||
characters.Should().BeOfType<List<Character>>();
|
characters.Should().BeOfType<List<Character>>();
|
||||||
@@ -175,9 +167,7 @@ namespace server.tests.integrationTests
|
|||||||
var character = JsonSerializer.Deserialize<Character>(data, _serializerOptions);
|
var character = JsonSerializer.Deserialize<Character>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
character.Should().NotBeNull();
|
character.Should().NotBeNull();
|
||||||
character.Should().BeOfType<Character>();
|
character.Should().BeOfType<Character>();
|
||||||
@@ -198,9 +188,7 @@ namespace server.tests.integrationTests
|
|||||||
var details = JsonSerializer.Deserialize<ValidationProblemDetails>(data, _serializerOptions);
|
var details = JsonSerializer.Deserialize<ValidationProblemDetails>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
|
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
details.Should().NotBeNull();
|
details.Should().NotBeNull();
|
||||||
details.Should().BeOfType<ValidationProblemDetails>();
|
details.Should().BeOfType<ValidationProblemDetails>();
|
||||||
@@ -222,9 +210,7 @@ namespace server.tests.integrationTests
|
|||||||
var details = JsonSerializer.Deserialize<ProblemDetails>(data, _serializerOptions);
|
var details = JsonSerializer.Deserialize<ProblemDetails>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
details.Should().NotBeNull();
|
details.Should().NotBeNull();
|
||||||
details.Should().BeOfType<ProblemDetails>();
|
details.Should().BeOfType<ProblemDetails>();
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Testing;
|
using Microsoft.AspNetCore.Mvc.Testing;
|
||||||
using server.Models;
|
using server.Models;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
using server.tests.Helpers;
|
||||||
|
|
||||||
namespace server.tests.integrationTests
|
namespace server.tests.IntegrationTests
|
||||||
{
|
{
|
||||||
public class EpisodesControllerIntegrationTests
|
public class EpisodesControllerIntegrationTests
|
||||||
{
|
{
|
||||||
@@ -38,13 +40,58 @@ namespace server.tests.integrationTests
|
|||||||
var episodes = JsonSerializer.Deserialize<List<Episode>>(data, _serializerOptions);
|
var episodes = JsonSerializer.Deserialize<List<Episode>>(data, _serializerOptions);
|
||||||
|
|
||||||
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
AssertHelper.CheckForRateLimitingHeaders(response.Headers);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
|
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
|
|
||||||
|
|
||||||
episodes.Should().NotBeNull();
|
episodes.Should().NotBeNull();
|
||||||
episodes.Should().BeOfType<List<Episode>>();
|
episodes.Should().BeOfType<List<Episode>>();
|
||||||
episodes.Should().HaveCountGreaterThan(0);
|
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 server.Persistence.Repositories;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
namespace server.tests.unitTests
|
namespace server.tests.UnitTests
|
||||||
{
|
{
|
||||||
public class CharacterControllerUnitTests
|
public class CharacterControllerUnitTests
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using server.Models;
|
|||||||
using server.Persistence.Repositories;
|
using server.Persistence.Repositories;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
namespace server.tests.unitTests
|
namespace server.tests.UnitTests
|
||||||
{
|
{
|
||||||
public class EpisodesControllerUnitTests
|
public class EpisodesControllerUnitTests
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user