Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Blazorcrud.Client/Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"dotnetRunMessages": true,
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"applicationUrl": "https://localhost:5002;http://localhost:5003",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Blazorcrud.Server\Blazorcrud.Server.csproj" />
</ItemGroup>

</Project>
1 change: 1 addition & 0 deletions Blazorcrud.Server.IntegrationTests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global using Xunit;
144 changes: 144 additions & 0 deletions Blazorcrud.Server.IntegrationTests/PersonControllerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
using System.Net;
using System.Net.Http.Json;
using System.Threading.Tasks;
using Blazorcrud.Server;
using Blazorcrud.Shared.Data;
using Blazorcrud.Shared.Models;
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;

namespace Blazorcrud.Server.IntegrationTests
{
public class PersonControllerTests : IClassFixture<WebApplicationFactory<Program>>
{
private readonly WebApplicationFactory<Program> _factory;

public PersonControllerTests(WebApplicationFactory<Program> factory)
{
_factory = factory;
}

[Fact]
public async Task Get_People_Returns_Success_And_Content()
{
// Arrange
var client = _factory.CreateClient();

// Act
var response = await client.GetAsync("/api/person?page=1");

// Assert
response.EnsureSuccessStatusCode();
var pagedResult = await response.Content.ReadFromJsonAsync<PagedResult<Person>>();
Assert.NotNull(pagedResult);
Assert.IsType<PagedResult<Person>>(pagedResult);
}

[Fact]
public async Task Get_Person_By_Id_Returns_Success_And_Content()
{
// Arrange
var client = _factory.CreateClient();

// Act
var response = await client.GetAsync("/api/person/1");

// Assert
response.EnsureSuccessStatusCode();
var person = await response.Content.ReadFromJsonAsync<Person>();
Assert.NotNull(person);
Assert.Equal(1, person.PersonId);
}

[Fact]
public async Task Add_Person_Returns_Success()
{
// Arrange
var client = _factory.CreateClient();
var token = await Utilities.GetJwtAsync(client);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
var newPerson = new Person
{
FirstName = "John",
LastName = "Doe",
Gender = Gender.Male,
PhoneNumber = "1234567890",
Addresses = new()
{
new Address { Street = "123 Main St", City = "Anytown", State = "CA", ZipCode = "12345" }
}
};

// Act
var response = await client.PostAsJsonAsync("/api/person", newPerson);

// Assert
response.EnsureSuccessStatusCode();
var person = await response.Content.ReadFromJsonAsync<Person>();
Assert.NotNull(person);
Assert.Equal("John", person.FirstName);
}

[Fact]
public async Task Update_Person_Returns_Success()
{
// Arrange
var client = _factory.CreateClient();
var token = await Utilities.GetJwtAsync(client);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
var newPerson = new Person
{
FirstName = "Jane",
LastName = "Doe",
Gender = Gender.Female,
PhoneNumber = "1234567890",
Addresses = new()
{
new Address { Street = "123 Main St", City = "Anytown", State = "CA", ZipCode = "12345" }
}
};
var response = await client.PostAsJsonAsync("/api/person", newPerson);
response.EnsureSuccessStatusCode();
var person = await response.Content.ReadFromJsonAsync<Person>();

// Act
person.FirstName = "Janet";
response = await client.PutAsJsonAsync("/api/person", person);

// Assert
response.EnsureSuccessStatusCode();
var updatedPerson = await response.Content.ReadFromJsonAsync<Person>();
Assert.NotNull(updatedPerson);
Assert.Equal("Janet", updatedPerson.FirstName);
}

[Fact]
public async Task Delete_Person_Returns_Success()
{
// Arrange
var client = _factory.CreateClient();
var token = await Utilities.GetJwtAsync(client);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
var newPerson = new Person
{
FirstName = "Jim",
LastName = "Doe",
Gender = Gender.Male,
PhoneNumber = "1234567890",
Addresses = new()
{
new Address { Street = "123 Main St", City = "Anytown", State = "CA", ZipCode = "12345" }
}
};
var response = await client.PostAsJsonAsync("/api/person", newPerson);
response.EnsureSuccessStatusCode();
var person = await response.Content.ReadFromJsonAsync<Person>();

// Act
response = await client.DeleteAsync($"/api/person/{person.PersonId}");

// Assert
response.EnsureSuccessStatusCode();
}
}
}
10 changes: 10 additions & 0 deletions Blazorcrud.Server.IntegrationTests/UnitTest1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Blazorcrud.Server.IntegrationTests;

public class UnitTest1
{
[Fact]
public void Test1()
{

}
}
25 changes: 25 additions & 0 deletions Blazorcrud.Server.IntegrationTests/Utilities.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using Blazorcrud.Server.Authorization;
using Blazorcrud.Shared.Models;
using Microsoft.AspNetCore.Mvc.Testing;

namespace Blazorcrud.Server.IntegrationTests
{
public static class Utilities
{
public static async Task<string> GetJwtAsync(HttpClient client)
{
var login = new AuthenticateRequest
{
Username = "admin",
Password = "admin"
};
var response = await client.PostAsJsonAsync("/api/user/authenticate", login);
response.EnsureSuccessStatusCode();
var authResponse = await response.Content.ReadFromJsonAsync<AuthenticateResponse>();
return authResponse.Token;
}
}
}
30 changes: 30 additions & 0 deletions Blazorcrud.Server.Tests/Blazorcrud.Server.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Blazorcrud.Server\Blazorcrud.Server.csproj" />
</ItemGroup>

</Project>
1 change: 1 addition & 0 deletions Blazorcrud.Server.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global using Xunit;
113 changes: 113 additions & 0 deletions Blazorcrud.Server.Tests/PersonControllerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
using Xunit;
using Moq;
using Blazorcrud.Server.Controllers;
using Blazorcrud.Server.Models;
using Blazorcrud.Shared.Models;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Blazorcrud.Shared.Data;
using System.Collections.Generic;

namespace Blazorcrud.Server.Tests
{
public class PersonControllerTests
{
private readonly Mock<IPersonRepository> _mockRepo;
private readonly PersonController _controller;

public PersonControllerTests()
{
_mockRepo = new Mock<IPersonRepository>();
_controller = new PersonController(_mockRepo.Object);
}

[Fact]
public void GetPeople_Returns_OkResult_With_PagedResult_Of_Person()
{
// Arrange
var name = "Test";
var page = 1;
var pagedResult = new PagedResult<Person> { Results = new List<Person> { new Person { PersonId = 1, FirstName = "Test" } } };
_mockRepo.Setup(repo => repo.GetPeople(name, page))
.Returns(pagedResult);

// Act
var result = _controller.GetPeople(name, page);

// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var returnValue = Assert.IsType<PagedResult<Person>>(okResult.Value);
Assert.Single(returnValue.Results);
}

[Fact]
public async Task GetPerson_Returns_OkResult_With_Person()
{
// Arrange
var id = 1;
var person = new Person { PersonId = id, FirstName = "Test" };
_mockRepo.Setup(repo => repo.GetPerson(id))
.ReturnsAsync(person);

// Act
var result = await _controller.GetPerson(id);

// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var returnValue = Assert.IsType<Person>(okResult.Value);
Assert.Equal(id, returnValue.PersonId);
}

[Fact]
public async Task AddPerson_Returns_OkResult_With_Person()
{
// Arrange
var person = new Person { PersonId = 1, FirstName = "Test" };
_mockRepo.Setup(repo => repo.AddPerson(person))
.ReturnsAsync(person);

// Act
var result = await _controller.AddPerson(person);

// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var returnValue = Assert.IsType<Person>(okResult.Value);
Assert.Equal(person.PersonId, returnValue.PersonId);
}

[Fact]
public async Task UpdatePerson_Returns_OkResult_With_Person()
{
// Arrange
var person = new Person { PersonId = 1, FirstName = "Test" };
_mockRepo.Setup(repo => repo.UpdatePerson(person))
.ReturnsAsync(person);

// Act
var result = await _controller.UpdatePerson(person);

// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var returnValue = Assert.IsType<Person>(okResult.Value);
Assert.Equal(person.PersonId, returnValue.PersonId);
}

[Fact]
public async Task DeletePerson_Returns_OkResult_With_Person()
{
// Arrange
var id = 1;
var person = new Person { PersonId = id, FirstName = "Test" };
_mockRepo.Setup(repo => repo.DeletePerson(id))
.ReturnsAsync(person);

// Act
var result = await _controller.DeletePerson(id);

// Assert
var okResult = Assert.IsType<OkObjectResult>(result);
var returnValue = Assert.IsType<Person>(okResult.Value);
Assert.Equal(id, returnValue.PersonId);
}
}
}
10 changes: 10 additions & 0 deletions Blazorcrud.Server.Tests/UnitTest1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Blazorcrud.Server.Tests;

public class UnitTest1
{
[Fact]
public void Test1()
{

}
}
3 changes: 3 additions & 0 deletions Blazorcrud.Server/Blazorcrud.Server.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,7 @@
<ProjectReference Include="..\Blazorcrud.Client\Blazorcrud.Client.csproj" />
<ProjectReference Include="..\Blazorcrud.Shared\Blazorcrud.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="Blazorcrud.Server.IntegrationTests" />
</ItemGroup>
</Project>
1 change: 1 addition & 0 deletions Blazorcrud.Server/PublicProgram.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
public partial class Program { }
Loading