using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using FluentAssertions; using NUnit.Framework; using Strata.Analytics.Models.Security; using Strata.Analytics.Models.Utils; using Strata.Analytics.Biz.Workbooks.Services; using Strata.Analytics.Test.Unit.Biz.TestData; using Strata.Testing.Categories; using Strata.Analytics.Models.Workbooks; namespace Strata.Analytics.Test.Unit.Biz.Workbooks { [NUnit.Framework.Category(TestCategory.Unit)] [Parallelizable(ParallelScope.Self)] public class WorkbookRoleAssignmentTest { [Test] public async Task WorkbookRoleAssignment_Created_GivenRoleAssignmentWithIdentityIsNotAlreadyInDatabase() { // arrange var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(); var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal); var WorkbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper()); var batch = new Batch() { Updates = new List() { new WorkbookRoleAssignmentSaveInfo() { IdentityGuid = Guid.NewGuid(), IdentityName="Admin", IdentityType=IdentityType.User, Role=WorkbookRole.Editor} } }; // act await WorkbookService.SaveRoleAssignmentsAsync(5, batch, CancellationToken.None); // assert dbContext.WorkbookRoleAssignments.Should().HaveCount(1); dbContext.WorkbookRoleAssignments.FirstOrDefault().WorkbookId.Should().Be(5); dbContext.WorkbookRoleAssignments.FirstOrDefault().IdentityGuid.Should().Be(batch.Updates.First().IdentityGuid); dbContext.WorkbookRoleAssignments.FirstOrDefault().IdentityName.Should().Be(batch.Updates.First().IdentityName); dbContext.WorkbookRoleAssignments.FirstOrDefault().Role.Should().Be(batch.Updates.First().Role); } [Test] public async Task WorkbookRoleAssignment_Updated_GivenRoleAssignmentWithIdentityIsAlreadyInDatabase() { // arrange var strataId = 5; var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(strataId); var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal); var WorkbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper()); var existingRoleAssigment = new WorkbookRoleAssignment() { StrataId = strataId, WorkbookId = 5, IdentityGuid = Guid.NewGuid(), IdentityName = "Admin", IdentityType = IdentityType.User, Role = WorkbookRole.Viewer }; dbContext.WorkbookRoleAssignments.Add(existingRoleAssigment); await dbContext.SaveChangesAsync(); // change role to Editor var batch = new Batch() { Updates = new List() { new WorkbookRoleAssignmentSaveInfo() { IdentityGuid = existingRoleAssigment.IdentityGuid, IdentityName="Admin", IdentityType=IdentityType.User, Role=WorkbookRole.Editor} } }; // act await WorkbookService.SaveRoleAssignmentsAsync(5, batch, CancellationToken.None); // assert dbContext.WorkbookRoleAssignments.Should().HaveCount(1); dbContext.WorkbookRoleAssignments.FirstOrDefault().WorkbookId.Should().Be(5); dbContext.WorkbookRoleAssignments.FirstOrDefault().IdentityGuid.Should().Be(batch.Updates.First().IdentityGuid); dbContext.WorkbookRoleAssignments.FirstOrDefault().IdentityName.Should().Be(batch.Updates.First().IdentityName); dbContext.WorkbookRoleAssignments.FirstOrDefault().Role.Should().Be(batch.Updates.First().Role); } [Test] public async Task WorkbookRoleAssignment_Deleted_GivenIdentityGuidIsPartOfBatchDeletes() { // arrange var strataId = 5; var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(strataId); var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal); var WorkbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper()); var existingRoleAssigment = new WorkbookRoleAssignment() { StrataId = strataId, WorkbookId = 5, IdentityGuid = Guid.NewGuid(), IdentityName = "Admin", IdentityType = IdentityType.User, Role = WorkbookRole.Editor }; dbContext.WorkbookRoleAssignments.Add(existingRoleAssigment); await dbContext.SaveChangesAsync(); var batch = new Batch() { Deletes = new List() { existingRoleAssigment.IdentityGuid } }; // act await WorkbookService.SaveRoleAssignmentsAsync(5, batch, CancellationToken.None); // assert dbContext.WorkbookRoleAssignments.Should().HaveCount(0); } } }