diff --git a/client/client.esproj b/client/client.esproj index 2fe46fe..5d60ada 100644 --- a/client/client.esproj +++ b/client/client.esproj @@ -1,10 +1,10 @@ - - 8fc072ca-af79-4930-b9b1-139230dc3426 - - - set BROWSER=none&&npm start - src\ - Jest - + + 8fc072ca-af79-4930-b9b1-139230dc3426 + + + set BROWSER=none&&npm start + src\ + Jest + \ No newline at end of file diff --git a/criminalmindsapi.sln b/criminalmindsapi.sln index f52c00b..382dc72 100644 --- a/criminalmindsapi.sln +++ b/criminalmindsapi.sln @@ -15,7 +15,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "server.tests", "server.tests\server.tests.csproj", "{F47F6C5F-DB28-44D7-B9CF-6B927755B2D8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "server.integrationTests", "server.integrationTests\server.integrationTests.csproj", "{88C22EC9-3069-41AA-99EC-5503385A3633}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -33,10 +33,10 @@ Global {1EF6EB3C-FCA0-4FF6-8A99-373AFAC6E4EC}.Debug|Any CPU.Build.0 = Debug|Any CPU {1EF6EB3C-FCA0-4FF6-8A99-373AFAC6E4EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {1EF6EB3C-FCA0-4FF6-8A99-373AFAC6E4EC}.Release|Any CPU.Build.0 = Release|Any CPU - {F47F6C5F-DB28-44D7-B9CF-6B927755B2D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F47F6C5F-DB28-44D7-B9CF-6B927755B2D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F47F6C5F-DB28-44D7-B9CF-6B927755B2D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F47F6C5F-DB28-44D7-B9CF-6B927755B2D8}.Release|Any CPU.Build.0 = Release|Any CPU + {88C22EC9-3069-41AA-99EC-5503385A3633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {88C22EC9-3069-41AA-99EC-5503385A3633}.Debug|Any CPU.Build.0 = Debug|Any CPU + {88C22EC9-3069-41AA-99EC-5503385A3633}.Release|Any CPU.ActiveCfg = Release|Any CPU + {88C22EC9-3069-41AA-99EC-5503385A3633}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/server.integrationTests/CharactersEndpointsTests.cs b/server.integrationTests/CharactersEndpointsTests.cs new file mode 100644 index 0000000..4624a4d --- /dev/null +++ b/server.integrationTests/CharactersEndpointsTests.cs @@ -0,0 +1,38 @@ +using Microsoft.AspNetCore.Mvc.Testing; +using server.Models; +using System.Net; +using System.Text.Json; + +namespace server.integrationTests +{ + [TestClass] + public class CharacterEndpointsTests + { + private readonly HttpClient _httpClient; + private readonly JsonSerializerOptions _serializerOptions; + public TestContext? TestContext { get; set; } + + public CharacterEndpointsTests() + { + var webAppFactory = new WebApplicationFactory(); + + _httpClient = webAppFactory.CreateDefaultClient(); + + _serializerOptions = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }; + } + + [TestMethod] + public async Task GetCharacters_AllCharacters_Returns200StatusWithCharacters() + { + var response = await _httpClient.GetAsync("/api/characters"); + var data = await response.Content.ReadAsStringAsync(); + var characters = JsonSerializer.Deserialize>(data, _serializerOptions); + + Assert.IsNotNull(characters); + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + } + } +} \ No newline at end of file diff --git a/server.integrationTests/Usings.cs b/server.integrationTests/Usings.cs new file mode 100644 index 0000000..ab67c7e --- /dev/null +++ b/server.integrationTests/Usings.cs @@ -0,0 +1 @@ +global using Microsoft.VisualStudio.TestTools.UnitTesting; \ No newline at end of file diff --git a/server.integrationTests/server.integrationTests.csproj b/server.integrationTests/server.integrationTests.csproj new file mode 100644 index 0000000..19c5be3 --- /dev/null +++ b/server.integrationTests/server.integrationTests.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + + + + + + + + diff --git a/server.tests/controllers/CharactersControllerTests.cs b/server.tests/controllers/CharactersControllerTests.cs index 5eed596..d801e76 100644 --- a/server.tests/controllers/CharactersControllerTests.cs +++ b/server.tests/controllers/CharactersControllerTests.cs @@ -3,8 +3,10 @@ using Moq; using server.Controllers.v1; using server.Models; using server.Persistence.Repositories; -using System.ComponentModel.DataAnnotations; +using server.tests.Mocks; using System.Net; +using System.Text.Json; +using Xunit.Abstractions; namespace tests.controllers { @@ -12,11 +14,13 @@ namespace tests.controllers { private readonly Mock _mockRepo; private readonly CharactersController _controller; + private readonly ITestOutputHelper _output; - public CharactersControllerTests() + public CharactersControllerTests(ITestOutputHelper output) { _mockRepo = new Mock(); _controller = new CharactersController(_mockRepo.Object); + _output = output; } [Fact] @@ -67,12 +71,54 @@ namespace tests.controllers .Throws(new Exception()); var result = await _controller.GetCharactersAsync(filter) as ObjectResult; - var data = result.Value; + var data = result?.Value; _mockRepo.Verify(repo => repo.GetCharactersAsync(It.IsAny()), Times.Once()); Assert.IsType(result); Assert.IsType(data); Assert.Equal(HttpStatusCode.InternalServerError, (HttpStatusCode)result.StatusCode); } + + [Fact] + public async Task GetCharacterByIdAsync_ValidCharacterId_Returns200StatusWithCharacter() + { + throw new NotImplementedException(); + } + + [Fact] + public async Task GetCharacterByIdAsync_InvalidCharacterId_Returns400StatusWithValidationProblemDetail() + { + var characterId = "1"; + + _controller.ProblemDetailsFactory = new MockProblemDetailsFactory(); + + var result = await _controller.GetCharacterByIdAsync(characterId) as ObjectResult; + var data = result?.Value; + + string json = JsonSerializer.Serialize(result); + + _output.WriteLine(json); + + // Assert.IsType(result); + // Assert.IsType(); + } + + [Fact] + public async Task GetCharacterByIdAsync_RepoThrowsException_Returns500StatusWithProblemDetail() + { + var characterId = "62b7d5506c1b407771829938"; + + _mockRepo + .Setup(repo => repo.GetCharacterByIdAsync(characterId)) + .Throws(new Exception()); + + var result = await _controller.GetCharacterByIdAsync(characterId) as ObjectResult; + var data = result?.Value; + + _mockRepo.Verify(repo => repo.GetCharacterByIdAsync(It.IsAny()), Times.Once()); + Assert.IsType(result); + Assert.IsType(data); + Assert.Equal(HttpStatusCode.InternalServerError, (HttpStatusCode)result.StatusCode); + } } } diff --git a/server/server.csproj b/server/server.csproj index c124798..309d659 100644 --- a/server/server.csproj +++ b/server/server.csproj @@ -1,23 +1,27 @@  - - net6.0 - enable - enable - True - + + net6.0 + enable + enable + True + - - - + + + - - - - - - - - + + + + + + + + + + + +