feat: initial commit
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using AutoMapper;
|
||||
using NUnit.Framework;
|
||||
using Strata.Analytics.Biz.DbContexts;
|
||||
using Strata.Analytics.Biz.Workbooks.Services;
|
||||
using Strata.Analytics.Models.Utils;
|
||||
using Strata.Analytics.Models.Workbooks;
|
||||
using Strata.Analytics.Test.Unit.Biz.TestData;
|
||||
using Strata.CoreLib.Claims;
|
||||
using Strata.CoreLib.Claims.Extensions;
|
||||
using Strata.Testing.Categories;
|
||||
|
||||
namespace Strata.Analytics.Test.Unit.Biz.Workbooks
|
||||
{
|
||||
[Category(TestCategory.Unit)]
|
||||
[Parallelizable(ParallelScope.Self)]
|
||||
public class WorkbookCrudTests
|
||||
{
|
||||
private IClaimsPrincipalAccessor _claimsPrincipalAccessor;
|
||||
private AnalyticsDbContext _dbContext;
|
||||
private IMapper _mapper;
|
||||
private WorkbookService _workbookService;
|
||||
|
||||
[OneTimeSetUp]
|
||||
public void OneTimeSetup()
|
||||
{
|
||||
_claimsPrincipalAccessor = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
|
||||
_dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(_claimsPrincipalAccessor);
|
||||
_mapper = AutoMapperMock.GetAutoMapper();
|
||||
_workbookService = new WorkbookService(_dbContext, _claimsPrincipalAccessor, _mapper);
|
||||
_dbContext.Workbooks.AddRange(WorkbookTestData.Workbooks());
|
||||
_dbContext.Worksheets.AddRange(WorkbookTestData.Worksheets());
|
||||
_dbContext.SaveChanges();
|
||||
}
|
||||
|
||||
[OneTimeTearDown]
|
||||
public async Task OneTimeTearDown()
|
||||
{
|
||||
await _dbContext.Database.EnsureDeletedAsync();
|
||||
}
|
||||
|
||||
[Test, Order(1)]
|
||||
public async Task CanCreateWorkbook()
|
||||
{
|
||||
// arrange
|
||||
var workbookCreateInfo = new WorkbookCreateInfo
|
||||
{
|
||||
Name = "New",
|
||||
Description = "This is a New Workbook",
|
||||
DefaultDataSourceId = 1001
|
||||
};
|
||||
|
||||
// act
|
||||
var result = await _workbookService.CreateAsync(workbookCreateInfo, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.That(result.WorkbookId, Is.GreaterThan(WorkbookTestData.Workbooks().Max(wb => wb.WorkbookId)));
|
||||
Assert.That(result.Name, Is.EqualTo(workbookCreateInfo.Name));
|
||||
Assert.That(result.Description, Is.EqualTo(workbookCreateInfo.Description));
|
||||
Assert.That(result.DefaultDataSourceId, Is.EqualTo(workbookCreateInfo.DefaultDataSourceId));
|
||||
Assert.That(result.CreatedByUserGuid, Is.EqualTo(_claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid()));
|
||||
Assert.That(result.UpdatedByUserGuid, Is.EqualTo(_claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid()));
|
||||
|
||||
Assert.That(result.Worksheets.Count(), Is.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test, Order(1)]
|
||||
public async Task CanCreateWorkbookWithSheets()
|
||||
{
|
||||
var newWorksheets = new List<WorksheetSaveInfo>();
|
||||
var worksheet1 = new WorksheetSaveInfo
|
||||
{
|
||||
Name = "New Worksheet",
|
||||
SortOrder = 3,
|
||||
WorksheetType = WorksheetType.Adhoc,
|
||||
Content = JsonDocument.Parse("{\"MyContent\": \"stuff goes here\"}")
|
||||
};
|
||||
var worksheet2 = new WorksheetSaveInfo
|
||||
{
|
||||
Name = "New Worksheet2",
|
||||
SortOrder = 4,
|
||||
WorksheetType = WorksheetType.Dashboard,
|
||||
Content = JsonDocument.Parse("{\"MyContent\": \"stuff2 goes here\"}")
|
||||
};
|
||||
newWorksheets.Add(worksheet1);
|
||||
newWorksheets.Add(worksheet2);
|
||||
// arrange
|
||||
var workbookCreateInfo = new WorkbookCreateInfo
|
||||
{
|
||||
Name = "New",
|
||||
Description = "This is a New Workbook",
|
||||
DefaultDataSourceId = 1001,
|
||||
Worksheets = newWorksheets
|
||||
};
|
||||
|
||||
// act
|
||||
var result = await _workbookService.CreateAsync(workbookCreateInfo, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.That(result.WorkbookId, Is.GreaterThan(WorkbookTestData.Workbooks().Max(wb => wb.WorkbookId)));
|
||||
Assert.That(result.Name, Is.EqualTo(workbookCreateInfo.Name));
|
||||
Assert.That(result.Description, Is.EqualTo(workbookCreateInfo.Description));
|
||||
Assert.That(result.DefaultDataSourceId, Is.EqualTo(workbookCreateInfo.DefaultDataSourceId));
|
||||
Assert.That(result.CreatedByUserGuid, Is.EqualTo(_claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid()));
|
||||
Assert.That(result.UpdatedByUserGuid, Is.EqualTo(_claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid()));
|
||||
|
||||
Assert.That(result.Worksheets.Count(), Is.EqualTo(2));
|
||||
}
|
||||
|
||||
|
||||
[Test, Order(1)]
|
||||
public async Task CanUpdateWorkbook()
|
||||
{
|
||||
// arrange
|
||||
var workbookId = _dbContext.Workbooks.First().WorkbookId;
|
||||
await _workbookService.SaveRoleAssignmentsAsync(workbookId,
|
||||
new Batch<WorkbookRoleAssignmentSaveInfo, Guid>
|
||||
{
|
||||
Updates = new WorkbookRoleAssignmentSaveInfo[]
|
||||
{
|
||||
new()
|
||||
{
|
||||
IdentityGuid = _claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid(),
|
||||
Role = WorkbookRole.Editor
|
||||
}
|
||||
}
|
||||
}, CancellationToken.None);
|
||||
|
||||
var workbook = await _workbookService.GetByIdAsync(workbookId, CancellationToken.None);
|
||||
|
||||
var workbookSaveInfo = new WorkbookSaveInfo();
|
||||
_mapper.Map(workbook, workbookSaveInfo);
|
||||
|
||||
var updatedWorksheet = workbook.Worksheets[1];
|
||||
updatedWorksheet.Name = "Updated WS Name";
|
||||
updatedWorksheet.Content = JsonDocument.Parse("{\"MyContent\": \"updated content here\"}");
|
||||
|
||||
var newWorksheet = new WorksheetSaveInfo
|
||||
{
|
||||
Name = "New Worksheet",
|
||||
SortOrder = 3,
|
||||
WorksheetType = WorksheetType.Adhoc,
|
||||
Content = JsonDocument.Parse("{\"MyContent\": \"stuff goes here\"}")
|
||||
};
|
||||
|
||||
var batch = new Batch<WorksheetSaveInfo, int>
|
||||
{
|
||||
Updates = new List<WorksheetSaveInfo> { _mapper.Map<WorksheetSaveInfo>(updatedWorksheet), newWorksheet },
|
||||
Deletes = new List<int> { workbook.Worksheets[0].WorksheetId }
|
||||
};
|
||||
|
||||
|
||||
workbookSaveInfo.WorksheetBatch = batch;
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
|
||||
|
||||
// act
|
||||
var result = await _workbookService.UpdateAsync(workbook.WorkbookId, workbookSaveInfo, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.That(result.WorkbookId, Is.EqualTo(workbook.WorkbookId));
|
||||
Assert.That(result.Name, Is.EqualTo(workbookSaveInfo.Name));
|
||||
Assert.That(result.Description, Is.EqualTo(workbookSaveInfo.Description));
|
||||
Assert.That(result.DefaultDataSourceId, Is.EqualTo(workbookSaveInfo.DefaultDataSourceId));
|
||||
Assert.That(result.CreatedByUserGuid, Is.EqualTo(workbook.CreatedByUserGuid));
|
||||
Assert.That(result.UpdatedByUserGuid, Is.EqualTo(_claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid()));
|
||||
Assert.That(result.CreatedDate, Is.EqualTo(workbook.CreatedDate));
|
||||
Assert.That(result.UpdatedDate, Is.EqualTo(DateTimeOffset.UtcNow).Within(500).Milliseconds); // this could fail in debug
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
foreach (var worksheetId in workbookSaveInfo.WorksheetBatch.Deletes)
|
||||
{
|
||||
var resultWorksheet = result.Worksheets.FirstOrDefault(ws => ws.WorksheetId == worksheetId);
|
||||
Assert.That(resultWorksheet, Is.Null);
|
||||
}
|
||||
|
||||
foreach (var worksheetSaveInfo in workbookSaveInfo.WorksheetBatch.Updates)
|
||||
{
|
||||
// get the worksheet - if it was added, grab the last
|
||||
var resultWorksheet = worksheetSaveInfo.WorksheetId.HasValue ?
|
||||
result.Worksheets.FirstOrDefault(ws => ws.WorksheetId == worksheetSaveInfo.WorksheetId) : result.Worksheets.LastOrDefault();
|
||||
|
||||
var expectedCreatedBy = worksheetSaveInfo.WorksheetId.HasValue
|
||||
? workbook.Worksheets.First(ws => ws.WorksheetId == worksheetSaveInfo.WorksheetId)
|
||||
.CreatedByUserGuid
|
||||
: _claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid();
|
||||
|
||||
var expectedUpdateBy = !worksheetSaveInfo.WorksheetId.HasValue || worksheetSaveInfo.WorksheetId == updatedWorksheet.WorksheetId
|
||||
? _claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid() : workbook.Worksheets
|
||||
.First(ws => ws.WorksheetId == worksheetSaveInfo.WorksheetId)
|
||||
.UpdatedByUserGuid;
|
||||
|
||||
Assert.That(resultWorksheet.WorkbookId, Is.EqualTo(workbook.WorkbookId));
|
||||
Assert.That(resultWorksheet.Name, Is.EqualTo(worksheetSaveInfo.Name));
|
||||
Assert.That(AnalyticsDbContextJsonSafe.JsonDocumentToString(resultWorksheet.Content), Is.EqualTo(AnalyticsDbContextJsonSafe.JsonDocumentToString(worksheetSaveInfo.Content)));
|
||||
Assert.That(resultWorksheet.SortOrder, Is.EqualTo(worksheetSaveInfo.SortOrder));
|
||||
Assert.That(resultWorksheet.CreatedByUserGuid, Is.EqualTo(expectedCreatedBy));
|
||||
Assert.That(resultWorksheet.UpdatedByUserGuid, Is.EqualTo(expectedUpdateBy));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
[Test, Order(int.MaxValue)] // always run last
|
||||
public async Task CanDeleteWorkbookAndCascadeToChildren()
|
||||
{
|
||||
// arrange
|
||||
var workbookId = _dbContext.Workbooks.First().WorkbookId;
|
||||
await _workbookService.SaveRoleAssignmentsAsync(workbookId,
|
||||
new Batch<WorkbookRoleAssignmentSaveInfo, Guid>
|
||||
{
|
||||
Updates = new WorkbookRoleAssignmentSaveInfo[]
|
||||
{
|
||||
new()
|
||||
{
|
||||
IdentityGuid = _claimsPrincipalAccessor.GetCurrentClaimsPrincipal().GetUserGuid(),
|
||||
Role = WorkbookRole.Editor
|
||||
}
|
||||
}
|
||||
}, CancellationToken.None);
|
||||
|
||||
var workbook = await _workbookService.GetByIdAsync(workbookId, CancellationToken.None);
|
||||
|
||||
Assert.That(workbook.Worksheets.Count, Is.GreaterThan(0));
|
||||
await _dbContext.SaveChangesAsync();
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
|
||||
|
||||
// act
|
||||
await _workbookService.DeleteAsync(workbookId, CancellationToken.None);
|
||||
var deletedWorkbook = _dbContext.Workbooks.Where(wb => wb.WorkbookId == workbook.WorkbookId);
|
||||
var deletedWorksheets = _dbContext.Worksheets.Where(ws => ws.WorkbookId == workbook.WorkbookId);
|
||||
var deletedRoleAssignments = _dbContext.WorkbookRoleAssignments.Where(ra => ra.WorkbookId == workbook.WorkbookId);
|
||||
|
||||
// assert
|
||||
Assert.That(deletedWorkbook, Is.Empty);
|
||||
Assert.That(deletedWorksheets, Is.Empty);
|
||||
Assert.That(deletedRoleAssignments, Is.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using Strata.Analytics.Models.Security;
|
||||
using Strata.Analytics.Biz.Workbooks.Services;
|
||||
using Strata.Analytics.Test.Unit.Biz.TestData;
|
||||
using Strata.CoreLib.Claims.Extensions;
|
||||
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 WorkbookGetCurrentUserRoleTest
|
||||
{
|
||||
[Test]
|
||||
public async Task WorkbookCurrentUserRole_IsNull_GivenNoRoleAssignments()
|
||||
{
|
||||
// arrange
|
||||
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
|
||||
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
|
||||
var workbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
|
||||
|
||||
// act
|
||||
var role = await workbookService.GetCurrentUserRoleAsync(5, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
role.HasValue.Should().BeFalse();
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public async Task WorkbookCurrentUserRole_IsEditor_GivenUserIsStrata()
|
||||
{
|
||||
// arrange
|
||||
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(5, true);
|
||||
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
|
||||
var workbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
|
||||
|
||||
// act
|
||||
var role = await workbookService.GetCurrentUserRoleAsync(5, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
role.Should().Be(WorkbookRole.Editor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task WorkbookCurrentUserRole_UsesCurrentUser_GivenMultipleUsersAssignedToMultipleRoles()
|
||||
{
|
||||
// arrange
|
||||
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
|
||||
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
|
||||
var workbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
|
||||
|
||||
var userRoleAssignemnt = new WorkbookRoleAssignment() { StrataId = 5, WorkbookId = 5, IdentityGuid = claimsPrincipal.GetUserGuid(), IdentityName = claimsPrincipal.GetUsername(), IdentityType = IdentityType.User, Role = WorkbookRole.Viewer };
|
||||
var differentUserRoleAssignemnt = new WorkbookRoleAssignment() { StrataId = 5, WorkbookId = 5, IdentityGuid = Guid.NewGuid(), IdentityName = "Random User", IdentityType = IdentityType.User, Role = WorkbookRole.Editor };
|
||||
|
||||
dbContext.WorkbookRoleAssignments.Add(userRoleAssignemnt);
|
||||
dbContext.WorkbookRoleAssignments.Add(differentUserRoleAssignemnt);
|
||||
|
||||
await dbContext.SaveChangesAsync();
|
||||
|
||||
// act
|
||||
var role = await workbookService.GetCurrentUserRoleAsync(5, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
role.Should().Be(userRoleAssignemnt.Role);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task WorkbookCurrentUserRole_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 workbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
|
||||
|
||||
var viewerRoleAssignment = new WorkbookRoleAssignment() { StrataId = 5, WorkbookId = 5, IdentityGuid = claimsPrincipal.GetUserGuid(), IdentityName = claimsPrincipal.GetUsername(), IdentityType = IdentityType.User, Role = WorkbookRole.Viewer };
|
||||
var editorRoleAssignment = new WorkbookRoleAssignment() { StrataId = 5, WorkbookId = 5, IdentityGuid = userGroupGuid, IdentityName = userGroup, IdentityType = IdentityType.UserGroup, Role = WorkbookRole.Editor };
|
||||
dbContext.WorkbookRoleAssignments.Add(viewerRoleAssignment);
|
||||
dbContext.WorkbookRoleAssignments.Add(editorRoleAssignment);
|
||||
|
||||
await dbContext.SaveChangesAsync();
|
||||
|
||||
// act
|
||||
var role = await workbookService.GetCurrentUserRoleAsync(5, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
role.Should().Be(WorkbookRole.Editor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
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<WorkbookRoleAssignmentSaveInfo, Guid>()
|
||||
{
|
||||
Updates = new List<WorkbookRoleAssignmentSaveInfo>()
|
||||
{
|
||||
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<WorkbookRoleAssignmentSaveInfo, Guid>()
|
||||
{
|
||||
Updates = new List<WorkbookRoleAssignmentSaveInfo>()
|
||||
{
|
||||
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<WorkbookRoleAssignmentSaveInfo, Guid>()
|
||||
{
|
||||
Deletes = new List<Guid>() { existingRoleAssigment.IdentityGuid }
|
||||
};
|
||||
|
||||
// act
|
||||
await WorkbookService.SaveRoleAssignmentsAsync(5, batch, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
dbContext.WorkbookRoleAssignments.Should().HaveCount(0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using Strata.Analytics.Models.Workbooks;
|
||||
using Strata.Analytics.Biz.Workbooks.Services;
|
||||
using Strata.Analytics.Test.Unit.Biz.TestData;
|
||||
using Strata.CoreLib.Claims.Extensions;
|
||||
using Strata.Testing.Categories;
|
||||
|
||||
namespace Strata.Analytics.Test.Unit.Biz.Workbooks
|
||||
{
|
||||
[NUnit.Framework.Category(TestCategory.Unit)]
|
||||
[Parallelizable(ParallelScope.Self)]
|
||||
public class WorkbookSourceCreateTest
|
||||
{
|
||||
|
||||
[Test]
|
||||
public async Task Workbook_CurrentUserAssignedAsEditor_GivenUserIsNotStrata()
|
||||
{
|
||||
// arrange
|
||||
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor();
|
||||
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
|
||||
var workbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
|
||||
|
||||
// act
|
||||
var workbook = await workbookService.CreateAsync(new WorkbookCreateInfo() { Name = "Workbook1" }, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
workbook.CreatedByUserGuid.Should().Be(claimsPrincipal.GetUserGuid());
|
||||
workbook.CurrentUserRole.Should().Be(WorkbookRole.Editor);
|
||||
dbContext.WorkbookRoleAssignments.Should().HaveCount(1);
|
||||
dbContext.WorkbookRoleAssignments.FirstOrDefault().IdentityGuid.Should().Be(claimsPrincipal.GetUserGuid());
|
||||
dbContext.WorkbookRoleAssignments.FirstOrDefault().Role.Should().Be(WorkbookRole.Editor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Workbook_CurrentUserAssignedAsEditorButNoRoleAssignmentsCreated_GivenUserIsStrata()
|
||||
{
|
||||
// arrange
|
||||
var claimsPrincipal = IClaimsPrincipalAccessorMock.GetClaimsPrincipalAccessor(5, true);
|
||||
var dbContext = AnalyticsDbContextMock.GetAnalyticsDbContext(claimsPrincipal);
|
||||
var workbookService = new WorkbookService(dbContext, claimsPrincipal, AutoMapperMock.GetAutoMapper());
|
||||
|
||||
// act
|
||||
var workbook = await workbookService.CreateAsync(new WorkbookCreateInfo() { Name = "Workbook1" }, CancellationToken.None);
|
||||
|
||||
// assert
|
||||
workbook.CreatedByUserGuid.Should().Be(claimsPrincipal.GetUserGuid());
|
||||
workbook.CurrentUserRole.Should().Be(WorkbookRole.Editor);
|
||||
dbContext.WorkbookRoleAssignments.Should().HaveCount(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user