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); } } }