finished writing tests for getcharacterbyidasync
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Testing;
|
using Microsoft.AspNetCore.Mvc.Testing;
|
||||||
|
using MongoDB.Bson;
|
||||||
using server.Models;
|
using server.Models;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -38,7 +39,7 @@ namespace server.tests.integrationTests
|
|||||||
|
|
||||||
var data = await response.Content.ReadAsStreamAsync();
|
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.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
response.Headers.Should().ContainKey("X-Rate-Limit-Limit");
|
||||||
@@ -155,5 +156,81 @@ namespace server.tests.integrationTests
|
|||||||
character.ActorFullName.ToLower().Should().Contain(actorNameValue);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,5 +66,51 @@ namespace server.tests.unitTests
|
|||||||
details.Should().NotBeNull();
|
details.Should().NotBeNull();
|
||||||
details.Should().BeOfType<ProblemDetails>();
|
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 _))
|
if (!ObjectId.TryParse(id, out _))
|
||||||
{
|
{
|
||||||
ModelState.AddModelError(nameof(id), $"{id} is not a valid id");
|
ModelState.AddModelError(nameof(id), $"{id} is not a valid id");
|
||||||
return ValidationProblem();
|
return ValidationProblem(detail: "Invalid request");
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|||||||
Reference in New Issue
Block a user