Files
analytics/tests/Strata.Analytics.Test.Unit/Biz/Extracts/ExtractGetCurrentUserRoleTest.cs
T
2026-06-23 11:18:54 -05:00

98 lines
4.5 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
using NUnit.Framework;
using Strata.Analytics.Biz.Extracts.Models;
using Strata.Analytics.Biz.Extracts.Services;
using Strata.Analytics.Models.Security;
using Strata.Analytics.Test.Unit.Biz.TestData;
using Strata.CoreLib.Claims.Extensions;
using Strata.Testing.Categories;
namespace Strata.Analytics.Test.Unit.Biz.Extracts
{
[NUnit.Framework.Category(TestCategory.Unit)]
[Parallelizable(ParallelScope.Self)]
public class ExtractGetCurrentUserRoleTest
{
[Test]
public async Task ExtractCurrentUserRole_IsNull_GivenNoRoleAssignments()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var extractService = new ExtractService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
// act
var role = await extractService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.HasValue.Should().BeFalse();
}
[Test]
public async Task ExtractCurrentUserRole_IsEditor_GivenUserIsStrata()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(5, true);
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var extractService = new ExtractService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
// act
var role = await extractService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.Should().Be(ExtractRole.Editor);
}
[Test]
public async Task ExtractCurrentUserRole_UsesCurrentUser_GivenMultipleUsersAssignedToMultipleRoles()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var extractService = new ExtractService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
var userRoleAssignemnt = new ExtractRoleAssignment() { StrataId = 5, ExtractId = 5, IdentityGuid = claimsPrincipal.GetUserGuid(), IdentityName = claimsPrincipal.GetUsername(), IdentityType = IdentityType.User, Role = ExtractRole.Viewer };
var differentUserRoleAssignemnt = new ExtractRoleAssignment() { StrataId = 5, ExtractId = 5, IdentityGuid = Guid.NewGuid(), IdentityName = "Random User", IdentityType = IdentityType.User, Role = ExtractRole.Editor };
dbContext.ExtractRoleAssignments.Add(userRoleAssignemnt);
dbContext.ExtractRoleAssignments.Add(differentUserRoleAssignemnt);
await dbContext.SaveChangesAsync();
// act
var role = await extractService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.Should().Be(userRoleAssignemnt.Role);
}
[Test]
public async Task ExtractCurrentUserRole_ReturnsMostPrivilege_GivenUserAssignedToMultipleRoles()
{
// arrange
var userGroup = "DSS - Admin";
var userGroupGuid = Guid.NewGuid();
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(5, false, false, new string[] { userGroup });
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var extractService = new ExtractService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
var viewerRoleAssignment = new ExtractRoleAssignment() { StrataId = 5, ExtractId = 5, IdentityGuid = claimsPrincipal.GetUserGuid(), IdentityName = claimsPrincipal.GetUsername(), IdentityType = IdentityType.User, Role = ExtractRole.Viewer };
var editorRoleAssignment = new ExtractRoleAssignment() { StrataId = 5, ExtractId = 5, IdentityGuid = userGroupGuid, IdentityName = userGroup, IdentityType = IdentityType.UserGroup, Role = ExtractRole.Editor };
dbContext.ExtractRoleAssignments.Add(viewerRoleAssignment);
dbContext.ExtractRoleAssignments.Add(editorRoleAssignment);
await dbContext.SaveChangesAsync();
// act
var role = await extractService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.Should().Be(ExtractRole.Editor);
}
}
}