mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 04:53:11 +00:00
80 lines
2.7 KiB
C#
80 lines
2.7 KiB
C#
using Data.SeaHavenIndustries;
|
|
using Data.SeaHavenIndustries.Enums;
|
|
using FluentAssertions;
|
|
using Microsoft.AspNetCore.Identity;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using SeaHaven.DataServices.Implementation;
|
|
using Xunit;
|
|
|
|
namespace Api.SeaHavenIndustries.Tests;
|
|
|
|
public sealed class TeamPermissionOverrideDataServiceTests
|
|
{
|
|
[Fact]
|
|
public async Task GetUserAsync_ReturnsIdentityRoleAndStoredOverrides()
|
|
{
|
|
await using var context = NewContext();
|
|
SeedUserWithRole(context, "u1", "Dispatcher");
|
|
context.UserPermissionOverrides.Add(new UserPermissionOverride
|
|
{
|
|
UserId = "u1",
|
|
PermissionKey = "deleteSites",
|
|
State = UserPermissionState.Deny
|
|
});
|
|
await context.SaveChangesAsync();
|
|
|
|
var result = await new TeamPermissionOverrideDataService(context)
|
|
.GetUserAsync("u1", CancellationToken.None);
|
|
|
|
result.Should().NotBeNull();
|
|
result!.RoleName.Should().Be("Dispatcher");
|
|
result.Overrides["deleteSites"].Should().Be(UserPermissionState.Deny);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task SetOverrideAsync_UpsertsOneCompositeKey()
|
|
{
|
|
await using var context = NewContext();
|
|
SeedUserWithRole(context, "u1", "Scheduler");
|
|
await context.SaveChangesAsync();
|
|
var service = new TeamPermissionOverrideDataService(context);
|
|
|
|
await service.SetOverrideAsync("u1", "deleteSites", UserPermissionState.Allow, CancellationToken.None);
|
|
await service.SetOverrideAsync("u1", "deleteSites", UserPermissionState.Deny, CancellationToken.None);
|
|
|
|
var rows = await context.UserPermissionOverrides.ToListAsync();
|
|
rows.Should().ContainSingle();
|
|
rows[0].State.Should().Be(UserPermissionState.Deny);
|
|
}
|
|
|
|
private static ApplicationDbContext NewContext()
|
|
{
|
|
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
|
|
.UseInMemoryDatabase(Guid.NewGuid().ToString())
|
|
.Options;
|
|
return new ApplicationDbContext(options);
|
|
}
|
|
|
|
private static void SeedUserWithRole(ApplicationDbContext context, string userId, string roleName)
|
|
{
|
|
context.Users.Add(new ApplicationUser
|
|
{
|
|
Id = userId,
|
|
UserName = userId,
|
|
NormalizedUserName = userId.ToUpperInvariant(),
|
|
Email = userId + "@example.com",
|
|
NormalizedEmail = (userId + "@example.com").ToUpperInvariant()
|
|
});
|
|
context.Roles.Add(new IdentityRole
|
|
{
|
|
Id = "role-1",
|
|
Name = roleName,
|
|
NormalizedName = roleName.ToUpperInvariant()
|
|
});
|
|
context.UserRoles.Add(new IdentityUserRole<string>
|
|
{
|
|
UserId = userId,
|
|
RoleId = "role-1"
|
|
});
|
|
}
|
|
}
|