You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
7.0 KiB
142 lines
7.0 KiB
using Bit.Core.AdminConsole.Entities; |
|
using Bit.Core.AdminConsole.Entities.Provider; |
|
using Bit.Core.AdminConsole.Enums.Provider; |
|
using Bit.Core.AdminConsole.Models.Data.Provider; |
|
using Bit.Core.AdminConsole.Repositories; |
|
using Bit.Core.Auth.Entities; |
|
using Bit.Core.Auth.Enums; |
|
using Bit.Core.Auth.Models.Data; |
|
using Bit.Core.Auth.Repositories; |
|
using Bit.Core.Entities; |
|
using Bit.Core.Repositories; |
|
using Xunit; |
|
|
|
namespace Bit.Infrastructure.IntegrationTest.AdminConsole.Repositories; |
|
|
|
public class ProviderUserRepositoryTests |
|
{ |
|
[Theory, DatabaseData] |
|
public async Task GetManyOrganizationDetailsByUserAsync_ShouldPopulatePropertiesCorrectly( |
|
IUserRepository userRepository, |
|
IOrganizationRepository organizationRepository, |
|
IProviderRepository providerRepository, |
|
IProviderUserRepository providerUserRepository, |
|
IProviderOrganizationRepository providerOrganizationRepository, |
|
ISsoConfigRepository ssoConfigRepository) |
|
{ |
|
var user = await userRepository.CreateTestUserAsync(); |
|
var organizationWithSso = await organizationRepository.CreateTestOrganizationAsync(); |
|
var organizationWithoutSso = await organizationRepository.CreateTestOrganizationAsync(); |
|
|
|
var provider = await providerRepository.CreateAsync(new Provider |
|
{ |
|
Name = "Test Provider", |
|
Enabled = true, |
|
Type = ProviderType.Msp |
|
}); |
|
|
|
var providerUser = await providerUserRepository.CreateAsync(new ProviderUser |
|
{ |
|
ProviderId = provider.Id, |
|
UserId = user.Id, |
|
Status = ProviderUserStatusType.Confirmed, |
|
Type = ProviderUserType.ProviderAdmin |
|
}); |
|
|
|
var providerOrganizationWithSso = await providerOrganizationRepository.CreateAsync(new ProviderOrganization |
|
{ |
|
ProviderId = provider.Id, |
|
OrganizationId = organizationWithSso.Id |
|
}); |
|
|
|
var providerOrganizationWithoutSso = await providerOrganizationRepository.CreateAsync(new ProviderOrganization |
|
{ |
|
ProviderId = provider.Id, |
|
OrganizationId = organizationWithoutSso.Id |
|
}); |
|
|
|
// Create SSO configuration for first organization only |
|
var serializedSsoConfigData = new SsoConfigurationData |
|
{ |
|
MemberDecryptionType = MemberDecryptionType.KeyConnector, |
|
KeyConnectorUrl = "https://keyconnector.example.com" |
|
}.Serialize(); |
|
|
|
var ssoConfig = await ssoConfigRepository.CreateAsync(new SsoConfig |
|
{ |
|
OrganizationId = organizationWithSso.Id, |
|
Enabled = true, |
|
Data = serializedSsoConfigData |
|
}); |
|
var results = (await providerUserRepository.GetManyOrganizationDetailsByUserAsync(user.Id, ProviderUserStatusType.Confirmed)).ToList(); |
|
|
|
Assert.Equal(2, results.Count); |
|
|
|
var orgWithSsoDetails = results.Single(r => r.OrganizationId == organizationWithSso.Id); |
|
var orgWithoutSsoDetails = results.Single(r => r.OrganizationId == organizationWithoutSso.Id); |
|
|
|
// Verify all properties for both organizations |
|
AssertProviderOrganizationDetails(orgWithSsoDetails, organizationWithSso, user, provider, providerUser); |
|
AssertProviderOrganizationDetails(orgWithoutSsoDetails, organizationWithoutSso, user, provider, providerUser); |
|
|
|
// Organization without SSO should have null SSO properties |
|
Assert.Null(orgWithoutSsoDetails.SsoEnabled); |
|
Assert.Null(orgWithoutSsoDetails.SsoConfig); |
|
|
|
// Organization with SSO should have SSO properties populated |
|
Assert.True(orgWithSsoDetails.SsoEnabled); |
|
Assert.NotNull(orgWithSsoDetails.SsoConfig); |
|
Assert.Equal(serializedSsoConfigData, orgWithSsoDetails.SsoConfig); |
|
} |
|
|
|
private static void AssertProviderOrganizationDetails( |
|
ProviderUserOrganizationDetails actual, |
|
Organization expectedOrganization, |
|
User expectedUser, |
|
Provider expectedProvider, |
|
ProviderUser expectedProviderUser) |
|
{ |
|
// Organization properties |
|
Assert.Equal(expectedOrganization.Id, actual.OrganizationId); |
|
Assert.Equal(expectedUser.Id, actual.UserId); |
|
Assert.Equal(expectedOrganization.Name, actual.Name); |
|
Assert.Equal(expectedOrganization.UsePolicies, actual.UsePolicies); |
|
Assert.Equal(expectedOrganization.UseSso, actual.UseSso); |
|
Assert.Equal(expectedOrganization.UseKeyConnector, actual.UseKeyConnector); |
|
Assert.Equal(expectedOrganization.UseScim, actual.UseScim); |
|
Assert.Equal(expectedOrganization.UseGroups, actual.UseGroups); |
|
Assert.Equal(expectedOrganization.UseDirectory, actual.UseDirectory); |
|
Assert.Equal(expectedOrganization.UseEvents, actual.UseEvents); |
|
Assert.Equal(expectedOrganization.UseTotp, actual.UseTotp); |
|
Assert.Equal(expectedOrganization.Use2fa, actual.Use2fa); |
|
Assert.Equal(expectedOrganization.UseApi, actual.UseApi); |
|
Assert.Equal(expectedOrganization.UseResetPassword, actual.UseResetPassword); |
|
Assert.Equal(expectedOrganization.UsersGetPremium, actual.UsersGetPremium); |
|
Assert.Equal(expectedOrganization.UseCustomPermissions, actual.UseCustomPermissions); |
|
Assert.Equal(expectedOrganization.SelfHost, actual.SelfHost); |
|
Assert.Equal(expectedOrganization.Seats, actual.Seats); |
|
Assert.Equal(expectedOrganization.MaxCollections, actual.MaxCollections); |
|
Assert.Equal(expectedOrganization.MaxStorageGb, actual.MaxStorageGb); |
|
Assert.Equal(expectedOrganization.Identifier, actual.Identifier); |
|
Assert.Equal(expectedOrganization.PublicKey, actual.PublicKey); |
|
Assert.Equal(expectedOrganization.PrivateKey, actual.PrivateKey); |
|
Assert.Equal(expectedOrganization.Enabled, actual.Enabled); |
|
Assert.Equal(expectedOrganization.PlanType, actual.PlanType); |
|
Assert.Equal(expectedOrganization.LimitCollectionCreation, actual.LimitCollectionCreation); |
|
Assert.Equal(expectedOrganization.LimitCollectionDeletion, actual.LimitCollectionDeletion); |
|
Assert.Equal(expectedOrganization.LimitItemDeletion, actual.LimitItemDeletion); |
|
Assert.Equal(expectedOrganization.AllowAdminAccessToAllCollectionItems, actual.AllowAdminAccessToAllCollectionItems); |
|
Assert.Equal(expectedOrganization.UseRiskInsights, actual.UseRiskInsights); |
|
Assert.Equal(expectedOrganization.UseOrganizationDomains, actual.UseOrganizationDomains); |
|
Assert.Equal(expectedOrganization.UseAdminSponsoredFamilies, actual.UseAdminSponsoredFamilies); |
|
Assert.Equal(expectedOrganization.UseAutomaticUserConfirmation, actual.UseAutomaticUserConfirmation); |
|
|
|
// Provider-specific properties |
|
Assert.Equal(expectedProvider.Id, actual.ProviderId); |
|
Assert.Equal(expectedProvider.Name, actual.ProviderName); |
|
Assert.Equal(expectedProvider.Type, actual.ProviderType); |
|
Assert.Equal(expectedProviderUser.Id, actual.ProviderUserId); |
|
Assert.Equal(expectedProviderUser.Status, actual.Status); |
|
Assert.Equal(expectedProviderUser.Type, actual.Type); |
|
} |
|
}
|
|
|