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
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+