feat: initial commit

This commit is contained in:
Thom Lamb
2026-06-23 11:18:54 -05:00
parent fc3ce9a074
commit 1bb980f070
790 changed files with 149255 additions and 218 deletions
@@ -0,0 +1,57 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using Strata.Analytics.Biz.DataSources.Models;
using Strata.Analytics.Biz.DataSources.Services;
using Strata.Analytics.Test.Unit.Biz.TestData;
using Strata.CoreLib.Claims.Extensions;
using Strata.DataSchema.Client;
using Strata.Testing.Categories;
namespace Strata.Analytics.Test.Unit.Biz.DataSources
{
[NUnit.Framework.Category(TestCategory.Unit)]
[Parallelizable(ParallelScope.Self)]
public class DataSourceCreateTest
{
[Test]
public async Task DataSource_CurrentUserAssignedAsEditor_GivenUserIsNotStrata()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
// act
var dataSource = await dataSourceService.CreateAsync(new DataSourceSaveInfo() { Name = "DataSource1" }, CancellationToken.None);
// assert
dataSource.CreatedByUserGuid.Should().Be(claimsPrincipal.GetUserGuid());
dataSource.CurrentUserRole.Should().Be(DataSourceRole.Editor);
dbContext.DataSourceRoleAssignments.Should().HaveCount(1);
dbContext.DataSourceRoleAssignments.FirstOrDefault().IdentityGuid.Should().Be(claimsPrincipal.GetUserGuid());
dbContext.DataSourceRoleAssignments.FirstOrDefault().Role.Should().Be(DataSourceRole.Editor);
}
[Test]
public async Task DataSource_CurrentUserAssignedAsEditorButNoRoleAssignmentsCreated_GivenUserIsStrata()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(5, true);
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
// act
var dataSource = await dataSourceService.CreateAsync(new DataSourceSaveInfo() { Name = "DataSource1" }, CancellationToken.None);
// assert
dataSource.CreatedByUserGuid.Should().Be(claimsPrincipal.GetUserGuid());
dataSource.CurrentUserRole.Should().Be(DataSourceRole.Editor);
dbContext.DataSourceRoleAssignments.Should().HaveCount(0);
}
}
}
@@ -0,0 +1,99 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using Strata.Analytics.Biz.DataSources.Models;
using Strata.Analytics.Biz.DataSources.Services;
using Strata.Analytics.Models.Security;
using Strata.Analytics.Test.Unit.Biz.TestData;
using Strata.CoreLib.Claims.Extensions;
using Strata.DataSchema.Client;
using Strata.Testing.Categories;
namespace Strata.Analytics.Test.Unit.Biz.DataSources
{
[NUnit.Framework.Category(TestCategory.Unit)]
[Parallelizable(ParallelScope.Self)]
public class DataSourceGetCurrentUserRoleTest
{
[Test]
public async Task DataSourceCurrentUserRole_IsNull_GivenNoRoleAssignments()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
// act
var role = await dataSourceService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.HasValue.Should().BeFalse();
}
[Test]
public async Task DataSourceCurrentUserRole_IsEditor_GivenUserIsStrata()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(5, true);
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
// act
var role = await dataSourceService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.Should().Be(DataSourceRole.Editor);
}
[Test]
public async Task DataSourceCurrentUserRole_UsesCurrentUser_GivenMultipleUsersAssignedToMultipleRoles()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
var userRoleAssignemnt = new DataSourceRoleAssignment() { StrataId = 5, DataSourceId = 5, IdentityGuid = claimsPrincipal.GetUserGuid(), IdentityName = claimsPrincipal.GetUsername(), IdentityType = IdentityType.User, Role = DataSourceRole.Viewer };
var differentUserRoleAssignemnt = new DataSourceRoleAssignment() { StrataId = 5, DataSourceId = 5, IdentityGuid = Guid.NewGuid(), IdentityName = "Random User", IdentityType = IdentityType.User, Role = DataSourceRole.Editor };
dbContext.DataSourceRoleAssignments.Add(userRoleAssignemnt);
dbContext.DataSourceRoleAssignments.Add(differentUserRoleAssignemnt);
await dbContext.SaveChangesAsync();
// act
var role = await dataSourceService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.Should().Be(userRoleAssignemnt.Role);
}
[Test]
public async Task DataSourceCurrentUserRole_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 dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
var viewerRoleAssignment = new DataSourceRoleAssignment() { StrataId = 5, DataSourceId = 5, IdentityGuid = claimsPrincipal.GetUserGuid(), IdentityName = claimsPrincipal.GetUsername(), IdentityType = IdentityType.User, Role = DataSourceRole.Viewer };
var editorRoleAssignment = new DataSourceRoleAssignment() { StrataId = 5, DataSourceId = 5, IdentityGuid = userGroupGuid, IdentityName = userGroup, IdentityType = IdentityType.UserGroup, Role = DataSourceRole.Editor };
dbContext.DataSourceRoleAssignments.Add(viewerRoleAssignment);
dbContext.DataSourceRoleAssignments.Add(editorRoleAssignment);
await dbContext.SaveChangesAsync();
// act
var role = await dataSourceService.GetCurrentUserRoleAsync(5, CancellationToken.None);
// assert
role.Should().Be(DataSourceRole.Editor);
}
}
}
@@ -0,0 +1,110 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using Strata.Analytics.Biz.DataSources.Models;
using Strata.Analytics.Biz.DataSources.Services;
using Strata.Analytics.Models.Security;
using Strata.Analytics.Models.Utils;
using Strata.Analytics.Test.Unit.Biz.TestData;
using Strata.DataSchema.Client;
using Strata.Testing.Categories;
namespace Strata.Analytics.Test.Unit.Biz.DataSources
{
[NUnit.Framework.Category(TestCategory.Unit)]
[Parallelizable(ParallelScope.Self)]
public class DataSourceRoleAssignmentTest
{
[Test]
public async Task DataSourceRoleAssignment_Created_GivenRoleAssignmentWithIdentityIsNotAlreadyInDatabase()
{
// arrange
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
var batch = new Batch<DataSourceRoleAssignmentSaveInfo, Guid>()
{
Updates = new List<DataSourceRoleAssignmentSaveInfo>()
{
new DataSourceRoleAssignmentSaveInfo() { IdentityGuid = Guid.NewGuid(), IdentityName="Admin", IdentityType=IdentityType.User, Role=DataSourceRole.Editor}
}
};
// act
await dataSourceService.SaveRoleAssignmentsAsync(5, batch, CancellationToken.None);
// assert
dbContext.DataSourceRoleAssignments.Should().HaveCount(1);
dbContext.DataSourceRoleAssignments.FirstOrDefault().DataSourceId.Should().Be(5);
dbContext.DataSourceRoleAssignments.FirstOrDefault().IdentityGuid.Should().Be(batch.Updates.First().IdentityGuid);
dbContext.DataSourceRoleAssignments.FirstOrDefault().IdentityName.Should().Be(batch.Updates.First().IdentityName);
dbContext.DataSourceRoleAssignments.FirstOrDefault().Role.Should().Be(batch.Updates.First().Role);
}
[Test]
public async Task DataSourceRoleAssignment_Updated_GivenRoleAssignmentWithIdentityIsAlreadyInDatabase()
{
// arrange
var strataId = 5;
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(strataId);
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
var existingRoleAssigment = new DataSourceRoleAssignment() { StrataId = strataId, DataSourceId = 5, IdentityGuid = Guid.NewGuid(), IdentityName = "Admin", IdentityType = IdentityType.User, Role = DataSourceRole.Viewer };
dbContext.DataSourceRoleAssignments.Add(existingRoleAssigment);
await dbContext.SaveChangesAsync();
// change role to Editor
var batch = new Batch<DataSourceRoleAssignmentSaveInfo, Guid>()
{
Updates = new List<DataSourceRoleAssignmentSaveInfo>()
{
new DataSourceRoleAssignmentSaveInfo() { IdentityGuid = existingRoleAssigment.IdentityGuid, IdentityName="Admin", IdentityType=IdentityType.User, Role=DataSourceRole.Editor}
}
};
// act
await dataSourceService.SaveRoleAssignmentsAsync(5, batch, CancellationToken.None);
// assert
dbContext.DataSourceRoleAssignments.Should().HaveCount(1);
dbContext.DataSourceRoleAssignments.FirstOrDefault().DataSourceId.Should().Be(5);
dbContext.DataSourceRoleAssignments.FirstOrDefault().IdentityGuid.Should().Be(batch.Updates.First().IdentityGuid);
dbContext.DataSourceRoleAssignments.FirstOrDefault().IdentityName.Should().Be(batch.Updates.First().IdentityName);
dbContext.DataSourceRoleAssignments.FirstOrDefault().Role.Should().Be(batch.Updates.First().Role);
}
[Test]
public async Task DataSourceRoleAssignment_Deleted_GivenIdentityGuidIsPartOfBatchDeletes()
{
// arrange
var strataId = 5;
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(strataId);
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
var dataSourceService = new DataSourceService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
var existingRoleAssigment = new DataSourceRoleAssignment() { StrataId = strataId, DataSourceId = 5, IdentityGuid = Guid.NewGuid(), IdentityName = "Admin", IdentityType = IdentityType.User, Role = DataSourceRole.Editor };
dbContext.DataSourceRoleAssignments.Add(existingRoleAssigment);
await dbContext.SaveChangesAsync();
var batch = new Batch<DataSourceRoleAssignmentSaveInfo, Guid>()
{
Deletes = new List<Guid>() { existingRoleAssigment.IdentityGuid }
};
// act
await dataSourceService.SaveRoleAssignmentsAsync(5, batch, CancellationToken.None);
// assert
dbContext.DataSourceRoleAssignments.Should().HaveCount(0);
}
}
}