finished writing tests for getcharacterbyidasync

This commit is contained in:
StevanFreeborn
2022-07-06 11:01:46 -05:00
parent 7ac3b16cb8
commit 0a7c522faa
3 changed files with 128 additions and 5 deletions
@@ -1,6 +1,7 @@
using FluentAssertions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Testing;
using MongoDB.Bson;
using server.Models;
using System.Collections;
using System.Collections.Generic;
@@ -38,7 +39,7 @@ namespace server.tests.integrationTests
var data = await response.Content.ReadAsStreamAsync();
var characters = JsonSerializer.Deserialize<List<Character>>(data);
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
@@ -155,5 +156,81 @@ namespace server.tests.integrationTests
character.ActorFullName.ToLower().Should().Contain(actorNameValue);
}
}
[Fact]
public async Task GetCharacterByIdAsync_ValidCharacterId_Returns200StatusCodeWithCharacter()
{
var response = await _client.GetAsync(_endpoint);
var data = await response.Content.ReadAsStreamAsync();
var characters = JsonSerializer.Deserialize<List<Character>>(data, _serializerOptions);
var characterId = characters[0].Id;
var url = $"{_endpoint}/{characterId}";
response = await _client.GetAsync(url);
data = await response.Content.ReadAsStreamAsync();
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");
character.Should().NotBeNull();
character.Should().BeOfType<Character>();
character.Id.Should().Be(characterId);
}
[Fact]
public async Task GetCharacterByIdAsync_InvalidCharacterId_Returns400StatusCodeWithValidationProblemDetails()
{
var characterId = "1";
var url = $"{_endpoint}/{characterId}";
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);
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
response.Headers.Should().ContainKey("X-Rate-Limit-Remaining");
response.Headers.Should().ContainKey("X-Rate-Limit-Reset");
details.Should().NotBeNull();
details.Should().BeOfType<ValidationProblemDetails>();
details.Detail.Should().NotBeNull();
details.Errors.Should().NotBeNull();
}
[Fact]
public async Task GetCharacterByIdAsync_ValidCharacterIdForNonExistentCharacter_Returns404StatusCodeWithProblemDetails()
{
var characterId = ObjectId.GenerateNewId();
var url = $"{_endpoint}/{characterId}";
var response = await _client.GetAsync(url);
var data = await response.Content.ReadAsStreamAsync();
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");
details.Should().NotBeNull();
details.Should().BeOfType<ProblemDetails>();
details.Detail.Should().NotBeNull();
}
}
}
@@ -24,7 +24,7 @@ namespace server.tests.unitTests
{
var filter = new CharacterFilter();
var characters = new List<Character> {new Character(), new Character()};
var characters = new List<Character> { new Character(), new Character() };
_mockRepo
.Setup(repo => repo.GetCharactersAsync(filter))
@@ -32,9 +32,9 @@ namespace server.tests.unitTests
var response = await _controller.GetCharactersAsync(filter) as ObjectResult;
var data = response.Value as List<Character>;
_mockRepo.Verify(repo => repo.GetCharactersAsync(It.IsAny<CharacterFilter>()), Times.Once());
response.Should().NotBeNull();
response.Should().BeOfType<OkObjectResult>();
response.StatusCode.Should().Be((int)HttpStatusCode.OK);
@@ -66,5 +66,51 @@ namespace server.tests.unitTests
details.Should().NotBeNull();
details.Should().BeOfType<ProblemDetails>();
}
[Fact]
public async Task GetCharacterByIdAsync_RepoThrowsException_Returns500StatusCodeWithProblemDetails()
{
var characterId = "62b7d5506c1b407771829926";
_mockRepo
.Setup(repo => repo.GetCharacterByIdAsync(characterId))
.Throws(new Exception());
var response = await _controller.GetCharacterByIdAsync(characterId) as ObjectResult;
var details = response.Value;
_mockRepo.Verify(repo => repo.GetCharacterByIdAsync(It.IsAny<string>()), Times.Once());
response.Should().NotBeNull();
response.Should().BeOfType<ObjectResult>();
response.StatusCode.Should().Be((int)HttpStatusCode.InternalServerError);
details.Should().NotBeNull();
details.Should().BeOfType<ProblemDetails>();
}
[Fact]
public async Task GetCharacterByIdAsync_ValidCharacterId_Returns200StatusCodeWithCharacter()
{
var characterId = "62b7d5506c1b407771829926";
_mockRepo
.Setup(repo => repo.GetCharacterByIdAsync(characterId))
.ReturnsAsync(new Character());
var response = await _controller.GetCharacterByIdAsync(characterId) as ObjectResult;
var character = response.Value;
_mockRepo.Verify(repo => repo.GetCharacterByIdAsync(It.IsAny<string>()), Times.Once());
response.Should().NotBeNull();
response.Should().BeOfType<OkObjectResult>();
response.StatusCode.Should().Be((int)HttpStatusCode.OK);
character.Should().NotBeNull();
character.Should().BeOfType<Character>();
}
}
}
@@ -66,7 +66,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