mirror of
https://github.com/alex289/CleanArchitecture.git
synced 2025-06-30 02:31:08 +00:00
feat: Extend tests to verify deleted entity query behavior
This commit is contained in:
parent
9e74b9f66a
commit
76da8251d5
@ -56,6 +56,35 @@ public sealed class TenantControllerTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(2)]
|
[Test, Order(2)]
|
||||||
|
public async Task Should_Not_Get_Deleted_Tenant_By_Id()
|
||||||
|
{
|
||||||
|
var response = await _fixture.ServerClient.GetAsync($"/api/v1/Tenant/{_fixture.DeletedTenantId}");
|
||||||
|
|
||||||
|
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
||||||
|
|
||||||
|
var message = await response.Content.ReadAsJsonAsync<TenantViewModel>();
|
||||||
|
|
||||||
|
message?.Data.Should().BeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test, Order(3)]
|
||||||
|
public async Task Should_Get_All_Tenants_Including_Deleted()
|
||||||
|
{
|
||||||
|
var response = await _fixture.ServerClient.GetAsync(
|
||||||
|
"api/v1/Tenant?searchTerm=Test&pageSize=5&page=1&includeDeleted=true");
|
||||||
|
|
||||||
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
|
|
||||||
|
var message = await response.Content.ReadAsJsonAsync<PagedResult<TenantViewModel>>();
|
||||||
|
|
||||||
|
message?.Data!.Items.Should().NotBeEmpty();
|
||||||
|
message!.Data!.Items.Should().HaveCount(2);
|
||||||
|
message.Data!.Items
|
||||||
|
.FirstOrDefault(x => x.Id == _fixture.DeletedTenantId)
|
||||||
|
.Should().NotBeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test, Order(4)]
|
||||||
public async Task Should_Create_Tenant()
|
public async Task Should_Create_Tenant()
|
||||||
{
|
{
|
||||||
var request = new CreateTenantViewModel("Test Tenant 2");
|
var request = new CreateTenantViewModel("Test Tenant 2");
|
||||||
@ -80,7 +109,7 @@ public sealed class TenantControllerTests
|
|||||||
tenantMessage.Data.Name.Should().Be(request.Name);
|
tenantMessage.Data.Name.Should().Be(request.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(3)]
|
[Test, Order(5)]
|
||||||
public async Task Should_Update_Tenant()
|
public async Task Should_Update_Tenant()
|
||||||
{
|
{
|
||||||
var request = new UpdateTenantViewModel(_fixture.CreatedTenantId, "Test Tenant 3");
|
var request = new UpdateTenantViewModel(_fixture.CreatedTenantId, "Test Tenant 3");
|
||||||
@ -107,7 +136,7 @@ public sealed class TenantControllerTests
|
|||||||
tenantMessage.Data.Name.Should().Be(request.Name);
|
tenantMessage.Data.Name.Should().Be(request.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(4)]
|
[Test, Order(6)]
|
||||||
public async Task Should_Delete_Tenant()
|
public async Task Should_Delete_Tenant()
|
||||||
{
|
{
|
||||||
var response = await _fixture.ServerClient.DeleteAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
|
var response = await _fixture.ServerClient.DeleteAsync($"/api/v1/Tenant/{_fixture.CreatedTenantId}");
|
||||||
|
@ -63,6 +63,35 @@ public sealed class UserControllerTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(2)]
|
[Test, Order(2)]
|
||||||
|
public async Task Should_Get_All_User_Including_Deleted()
|
||||||
|
{
|
||||||
|
var response = await _fixture.ServerClient.GetAsync("/api/v1/user?includeDeleted=true");
|
||||||
|
|
||||||
|
response.StatusCode.Should().Be(HttpStatusCode.OK);
|
||||||
|
|
||||||
|
var message = await response.Content.ReadAsJsonAsync<PagedResult<UserViewModel>>();
|
||||||
|
|
||||||
|
message?.Data.Should().NotBeNull();
|
||||||
|
|
||||||
|
var content = message!.Data!.Items.ToList();
|
||||||
|
|
||||||
|
content.Count.Should().Be(3);
|
||||||
|
|
||||||
|
content.FirstOrDefault(x => x.Id == _fixture.DeletedUserId).Should().NotBeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test, Order(3)]
|
||||||
|
public async Task Should_Not_Get_Deleted_User_By_Id()
|
||||||
|
{
|
||||||
|
var response = await _fixture.ServerClient.GetAsync("/api/v1/user/" + _fixture.DeletedUserId);
|
||||||
|
|
||||||
|
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
|
||||||
|
|
||||||
|
var message = await response.Content.ReadAsJsonAsync<UserViewModel>();
|
||||||
|
message?.Data.Should().BeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test, Order(4)]
|
||||||
public async Task Should_Create_User()
|
public async Task Should_Create_User()
|
||||||
{
|
{
|
||||||
var user = new CreateUserViewModel(
|
var user = new CreateUserViewModel(
|
||||||
@ -80,7 +109,7 @@ public sealed class UserControllerTests
|
|||||||
message?.Data.Should().NotBeEmpty();
|
message?.Data.Should().NotBeEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(3)]
|
[Test, Order(5)]
|
||||||
public async Task Should_Login_User()
|
public async Task Should_Login_User()
|
||||||
{
|
{
|
||||||
var user = new LoginUserViewModel(
|
var user = new LoginUserViewModel(
|
||||||
@ -95,7 +124,7 @@ public sealed class UserControllerTests
|
|||||||
message?.Data.Should().NotBeEmpty();
|
message?.Data.Should().NotBeEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(4)]
|
[Test, Order(6)]
|
||||||
public async Task Should_Get_The_Current_Active_Users()
|
public async Task Should_Get_The_Current_Active_Users()
|
||||||
{
|
{
|
||||||
var response = await _fixture.ServerClient.GetAsync("/api/v1/user/me");
|
var response = await _fixture.ServerClient.GetAsync("/api/v1/user/me");
|
||||||
@ -114,7 +143,7 @@ public sealed class UserControllerTests
|
|||||||
content.LastName.Should().Be(TestAuthenticationOptions.LastName);
|
content.LastName.Should().Be(TestAuthenticationOptions.LastName);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(5)]
|
[Test, Order(7)]
|
||||||
public async Task Should_Update_User()
|
public async Task Should_Update_User()
|
||||||
{
|
{
|
||||||
var user = new UpdateUserViewModel(
|
var user = new UpdateUserViewModel(
|
||||||
@ -155,7 +184,7 @@ public sealed class UserControllerTests
|
|||||||
userContent.Role.Should().Be(user.Role);
|
userContent.Role.Should().Be(user.Role);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(6)]
|
[Test, Order(8)]
|
||||||
public async Task Should_Change_User_Password()
|
public async Task Should_Change_User_Password()
|
||||||
{
|
{
|
||||||
var user = new ChangePasswordViewModel(
|
var user = new ChangePasswordViewModel(
|
||||||
@ -188,7 +217,7 @@ public sealed class UserControllerTests
|
|||||||
loginMessage?.Data.Should().NotBeEmpty();
|
loginMessage?.Data.Should().NotBeEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test, Order(7)]
|
[Test, Order(9)]
|
||||||
public async Task Should_Delete_User()
|
public async Task Should_Delete_User()
|
||||||
{
|
{
|
||||||
var response = await _fixture.ServerClient.DeleteAsync("/api/v1/user/" + TestAuthenticationOptions.TestUserId);
|
var response = await _fixture.ServerClient.DeleteAsync("/api/v1/user/" + TestAuthenticationOptions.TestUserId);
|
||||||
|
@ -10,6 +10,7 @@ namespace CleanArchitecture.IntegrationTests.Fixtures;
|
|||||||
public sealed class TenantTestFixture : TestFixtureBase
|
public sealed class TenantTestFixture : TestFixtureBase
|
||||||
{
|
{
|
||||||
public Guid CreatedTenantId { get; } = Guid.NewGuid();
|
public Guid CreatedTenantId { get; } = Guid.NewGuid();
|
||||||
|
public Guid DeletedTenantId { get; } = Guid.NewGuid();
|
||||||
|
|
||||||
public async Task SeedTestData()
|
public async Task SeedTestData()
|
||||||
{
|
{
|
||||||
@ -21,9 +22,8 @@ public sealed class TenantTestFixture : TestFixtureBase
|
|||||||
CreatedTenantId,
|
CreatedTenantId,
|
||||||
"Test Tenant"));
|
"Test Tenant"));
|
||||||
|
|
||||||
// This tenant should not be included in any queries
|
|
||||||
var deletedTenant = new Tenant(
|
var deletedTenant = new Tenant(
|
||||||
Guid.NewGuid(),
|
DeletedTenantId,
|
||||||
"Test Tenant2");
|
"Test Tenant2");
|
||||||
deletedTenant.Delete();
|
deletedTenant.Delete();
|
||||||
context.Tenants.Add(deletedTenant);
|
context.Tenants.Add(deletedTenant);
|
||||||
|
@ -11,6 +11,8 @@ namespace CleanArchitecture.IntegrationTests.Fixtures;
|
|||||||
|
|
||||||
public sealed class UserTestFixture : TestFixtureBase
|
public sealed class UserTestFixture : TestFixtureBase
|
||||||
{
|
{
|
||||||
|
public Guid DeletedUserId { get; } = Guid.NewGuid();
|
||||||
|
|
||||||
public async Task SeedTestData()
|
public async Task SeedTestData()
|
||||||
{
|
{
|
||||||
await GlobalSetupFixture.RespawnDatabaseAsync();
|
await GlobalSetupFixture.RespawnDatabaseAsync();
|
||||||
@ -30,9 +32,8 @@ public sealed class UserTestFixture : TestFixtureBase
|
|||||||
"$2a$12$Blal/uiFIJdYsCLTMUik/egLbfg3XhbnxBC6Sb5IKz2ZYhiU/MzL2",
|
"$2a$12$Blal/uiFIJdYsCLTMUik/egLbfg3XhbnxBC6Sb5IKz2ZYhiU/MzL2",
|
||||||
UserRole.Admin));
|
UserRole.Admin));
|
||||||
|
|
||||||
// This user should not be included in any queries
|
|
||||||
var deletedUsed = new User(
|
var deletedUsed = new User(
|
||||||
Guid.NewGuid(),
|
DeletedUserId,
|
||||||
Ids.Seed.TenantId,
|
Ids.Seed.TenantId,
|
||||||
"admin2@email.com",
|
"admin2@email.com",
|
||||||
"Admin2",
|
"Admin2",
|
||||||
|
@ -27,6 +27,7 @@ public sealed class GetTenantsByIdsTestFixture : TestFixtureBase
|
|||||||
using var context = Factory.Services.GetRequiredService<ApplicationDbContext>();
|
using var context = Factory.Services.GetRequiredService<ApplicationDbContext>();
|
||||||
|
|
||||||
var tenant = CreateTenant();
|
var tenant = CreateTenant();
|
||||||
|
tenant.Delete();
|
||||||
|
|
||||||
context.Tenants.Add(tenant);
|
context.Tenants.Add(tenant);
|
||||||
await context.SaveChangesAsync();
|
await context.SaveChangesAsync();
|
||||||
|
@ -33,6 +33,7 @@ public sealed class GetUsersByIdsTestFixture : TestFixtureBase
|
|||||||
"Admin Tenant"));
|
"Admin Tenant"));
|
||||||
|
|
||||||
var user = CreateUser();
|
var user = CreateUser();
|
||||||
|
user.Delete();
|
||||||
|
|
||||||
context.Users.Add(user);
|
context.Users.Add(user);
|
||||||
await context.SaveChangesAsync();
|
await context.SaveChangesAsync();
|
||||||
|
@ -31,5 +31,6 @@ public sealed class GetTenantsByIdsTests
|
|||||||
|
|
||||||
new Guid(tenant.Id).Should().Be(createdTenant.Id);
|
new Guid(tenant.Id).Should().Be(createdTenant.Id);
|
||||||
tenant.Name.Should().Be(createdTenant.Name);
|
tenant.Name.Should().Be(createdTenant.Name);
|
||||||
|
tenant.DeletedAt.Should().NotBeNullOrWhiteSpace();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -31,5 +31,6 @@ public sealed class GetUsersByIdsTests
|
|||||||
user.Email.Should().Be(createdUser.Email);
|
user.Email.Should().Be(createdUser.Email);
|
||||||
user.FirstName.Should().Be(createdUser.FirstName);
|
user.FirstName.Should().Be(createdUser.FirstName);
|
||||||
user.LastName.Should().Be(createdUser.LastName);
|
user.LastName.Should().Be(createdUser.LastName);
|
||||||
|
user.DeletedAt.Should().NotBeNullOrWhiteSpace();
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user