diff --git a/bitwarden_license/src/Scim/Models/ScimUserRequestModel.cs b/bitwarden_license/src/Scim/Models/ScimUserRequestModel.cs index cdd8053cf5..d22c21144d 100644 --- a/bitwarden_license/src/Scim/Models/ScimUserRequestModel.cs +++ b/bitwarden_license/src/Scim/Models/ScimUserRequestModel.cs @@ -1,4 +1,5 @@ using Bit.Core.AdminConsole.Enums; +using Bit.Core.AdminConsole.Models.Business; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models; using Bit.Core.Enums; using Bit.Core.Models.Data; @@ -26,13 +27,17 @@ public class ScimUserRequestModel : BaseScimUserModel }; } - public OrganizationUserSingleEmailInvite ToInvite(ScimProviderType scimProvider, bool hasSecretsManager) => - OrganizationUserSingleEmailInvite.Create( - EmailForInvite(scimProvider), - [], - OrganizationUserType.User, - new Permissions(), - hasSecretsManager); + public InviteScimOrganizationUserRequest ToRequest( + ScimProviderType scimProvider, + bool hasSecretsManager, + OrganizationDto organization, + DateTimeOffset performedAt) => + new( + email: EmailForInvite(scimProvider), + hasSecretsManager: hasSecretsManager, + organization: organization, + performedAt: performedAt, + externalId: ExternalIdForInvite()); private string EmailForInvite(ScimProviderType scimProvider) { diff --git a/bitwarden_license/src/Scim/Users/PostUserCommand.cs b/bitwarden_license/src/Scim/Users/PostUserCommand.cs index b1692bdd48..d8132ac670 100644 --- a/bitwarden_license/src/Scim/Users/PostUserCommand.cs +++ b/bitwarden_license/src/Scim/Users/PostUserCommand.cs @@ -1,4 +1,6 @@ -using Bit.Core; +#nullable enable + +using Bit.Core; using Bit.Core.AdminConsole.Models.Business; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models; @@ -25,7 +27,7 @@ public class PostUserCommand( TimeProvider timeProvider) : IPostUserCommand { - public async Task PostUserAsync(Guid organizationId, ScimUserRequestModel model) + public async Task PostUserAsync(Guid organizationId, ScimUserRequestModel model) { var scimProvider = scimContext.RequestScimProvider; var invite = model.ToOrganizationUserInvite(scimProvider); @@ -57,23 +59,11 @@ public class PostUserCommand( if (featureService.IsEnabled(FeatureFlagKeys.ScimInviteUserOptimization)) { - var request = InviteScimOrganizationUserRequest.Create( - model.ToInvite(scimProvider, hasStandaloneSecretsManager), - OrganizationDto.FromOrganization(organization), - timeProvider.GetUtcNow(), - model.ExternalIdForInvite() - ); - - var result = await inviteOrganizationUsersCommand.InviteScimOrganizationUserAsync(request); - - if (result is Success successfulResponse) - { - var invitedUser = await organizationUserRepository.GetDetailsByIdAsync(successfulResponse.Value.InvitedUser.Id); - - return invitedUser; - } - - return null; + return await InviteScimOrganizationUserAsync(model.ToRequest( + scimProvider: scimProvider, + hasSecretsManager: hasStandaloneSecretsManager, + organization: OrganizationDto.FromOrganization(organization), + performedAt: timeProvider.GetUtcNow())); } var invitedOrgUser = await organizationService.InviteUserAsync(organizationId, invitingUserId: null, EventSystemUser.SCIM, @@ -82,4 +72,19 @@ public class PostUserCommand( return orgUser; } + + private async Task InviteScimOrganizationUserAsync(InviteScimOrganizationUserRequest request) + { + var result = await inviteOrganizationUsersCommand.InviteScimOrganizationUserAsync(request); + + if (result is not Success successfulResponse) + { + return null; + } + + var invitedUser = await organizationUserRepository.GetDetailsByIdAsync(successfulResponse.Value.InvitedUser.Id); + + return invitedUser; + + } } diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs index cb6f79eaef..4824259c53 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUsersCommand.cs @@ -38,7 +38,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService, public async Task> InviteScimOrganizationUserAsync(InviteScimOrganizationUserRequest request) { - var result = await InviteOrganizationUsersAsync(InviteOrganizationUsersRequest.Create(request)); + var result = await InviteOrganizationUsersAsync(new InviteOrganizationUsersRequest(request)); if (result is Failure> failure) { @@ -47,7 +47,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService, if (result.Value.Any()) { - await eventService.LogOrganizationUserEventAsync((IOrganizationUser)result.Value.First(), EventType.OrganizationUser_Invited, EventSystemUser.SCIM, request.PerformedAt.UtcDateTime); + await eventService.LogOrganizationUserEventAsync(result.Value.First(), EventType.OrganizationUser_Invited, EventSystemUser.SCIM, request.PerformedAt.UtcDateTime); } return new Success(new ScimInviteOrganizationUsersResponse @@ -113,7 +113,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService, { logger.LogError(ex, FailedToInviteUsers); - await organizationUserRepository.DeleteManyAsync(organizationUserCollection.Select(x => x.User.Id)); + await organizationUserRepository.DeleteManyAsync(organizationUserCollection.Select(x => x.OrganizationUser.Id)); await RevertSecretsManagerChangesAsync(validatedRequest, organization); @@ -122,7 +122,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService, return new Failure>(FailedToInviteUsers); } - return new Success>(organizationUserCollection.Select(x => x.User)); + return new Success>(organizationUserCollection.Select(x => x.OrganizationUser)); } private async Task RevertPasswordManagerChangesAsync(Valid valid, Organization organization) @@ -162,7 +162,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService, private async Task SendInvitesAsync(IEnumerable users, Organization organization) => await sendOrganizationInvitesCommand.SendInvitesAsync( new SendInvitesRequest( - users.Select(x => x.User), + users.Select(x => x.OrganizationUser), organization)); private async Task SendAdditionalEmailsAsync(Valid valid, Organization organization) diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/CreateOrganizationUser.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/CreateOrganizationUser.cs index cef2c94e00..4c1e4baad9 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/CreateOrganizationUser.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/CreateOrganizationUser.cs @@ -7,7 +7,7 @@ namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUse public class CreateOrganizationUser { - public OrganizationUser User { get; set; } + public OrganizationUser OrganizationUser { get; set; } public CollectionAccessSelection[] Collections { get; set; } = []; public Guid[] Groups { get; set; } = []; } @@ -17,7 +17,7 @@ public static class CreateOrganizationUserExtensions public static Func MapToDataModel(DateTimeOffset performedAt) => o => new CreateOrganizationUser { - User = new OrganizationUser + OrganizationUser = new OrganizationUser { Id = CoreHelpers.GenerateComb(), OrganizationId = o.OrganizationId, diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersRequest.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersRequest.cs index 4462c81ebe..e5ad432753 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersRequest.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersRequest.cs @@ -9,20 +9,21 @@ public class InviteOrganizationUsersRequest public Guid PerformedBy { get; } public DateTimeOffset PerformedAt { get; } - public InviteOrganizationUsersRequest(OrganizationUserInvite[] Invites, - OrganizationDto Organization, - Guid PerformedBy, - DateTimeOffset PerformedAt) + public InviteOrganizationUsersRequest(OrganizationUserInvite[] invites, + OrganizationDto organization, + Guid performedBy, + DateTimeOffset performedAt) { - this.Invites = Invites; - this.Organization = Organization; - this.PerformedBy = PerformedBy; - this.PerformedAt = PerformedAt; + Invites = invites; + Organization = organization; + PerformedBy = performedBy; + PerformedAt = performedAt; } - public static InviteOrganizationUsersRequest Create(InviteScimOrganizationUserRequest request) => - new([OrganizationUserInvite.Create(request.Invite, request.ExternalId)], + public InviteOrganizationUsersRequest(InviteScimOrganizationUserRequest request) : + this([OrganizationUserInvite.Create(request, request.ExternalId)], request.Organization, Guid.Empty, - request.PerformedAt); + request.PerformedAt) + { } } diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersResponse.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersResponse.cs index 7fd22bac7f..76bb5e4399 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersResponse.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteOrganizationUsersResponse.cs @@ -11,11 +11,4 @@ public class ScimInviteOrganizationUsersResponse { public OrganizationUser InvitedUser { get; init; } - public static ScimInviteOrganizationUsersResponse Create(OrganizationUser invitedUser) - { - return new ScimInviteOrganizationUsersResponse - { - InvitedUser = invitedUser - }; - } } diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteScimOrganizationUserRequest.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteScimOrganizationUserRequest.cs index 99a060d2cf..1fb690ed47 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteScimOrganizationUserRequest.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/InviteScimOrganizationUserRequest.cs @@ -1,26 +1,28 @@ using Bit.Core.AdminConsole.Models.Business; +using Bit.Core.Enums; +using Bit.Core.Models.Data; namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models; -public class InviteScimOrganizationUserRequest +public record InviteScimOrganizationUserRequest : OrganizationUserSingleEmailInvite { - public OrganizationUserSingleEmailInvite Invite { get; } - public OrganizationDto Organization { get; } - public DateTimeOffset PerformedAt { get; } - public string ExternalId { get; } = string.Empty; + public OrganizationDto Organization { get; private init; } + public DateTimeOffset PerformedAt { get; private init; } + public string ExternalId { get; private init; } = string.Empty; - private InviteScimOrganizationUserRequest(OrganizationUserSingleEmailInvite invite, + public InviteScimOrganizationUserRequest(string email, + bool hasSecretsManager, OrganizationDto organization, DateTimeOffset performedAt, - string externalId) + string externalId) : base( + email: email, + accessibleCollections: [], + type: OrganizationUserType.User, + permissions: new Permissions(), + accessSecretsManager: hasSecretsManager) { - Invite = invite; Organization = organization; PerformedAt = performedAt; ExternalId = externalId; } - - public static InviteScimOrganizationUserRequest Create(OrganizationUserSingleEmailInvite invite, - OrganizationDto organization, DateTimeOffset performedAt, string externalId) => - new(invite, organization, performedAt, externalId); } diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserInvite.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserInvite.cs index 025107183b..b828fd5a99 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserInvite.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserInvite.cs @@ -12,7 +12,6 @@ public class OrganizationUserInvite public string[] Emails { get; private init; } = []; public CollectionAccessSelection[] AccessibleCollections { get; private init; } = []; public OrganizationUserType Type { get; private init; } = OrganizationUserType.User; - public Permissions Permissions { get; private init; } = new(); public string ExternalId { get; private init; } = string.Empty; public bool AccessSecretsManager { get; private init; } diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserSingleEmailInvite.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserSingleEmailInvite.cs index ac24fefbd8..6ef84beb92 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserSingleEmailInvite.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Models/OrganizationUserSingleEmailInvite.cs @@ -7,15 +7,15 @@ using static Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.Invite namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models; -public class OrganizationUserSingleEmailInvite +public record OrganizationUserSingleEmailInvite { - public string Email { get; private init; } = string.Empty; - public CollectionAccessSelection[] AccessibleCollections { get; private init; } = []; - public Permissions Permissions { get; private init; } = new(); - public OrganizationUserType Type { get; private init; } = OrganizationUserType.User; - public bool AccessSecretsManager { get; private init; } + public string Email { get; init; } = string.Empty; + public CollectionAccessSelection[] AccessibleCollections { get; init; } = []; + public Permissions Permissions { get; init; } = new(); + public OrganizationUserType Type { get; init; } = OrganizationUserType.User; + public bool AccessSecretsManager { get; init; } - public static OrganizationUserSingleEmailInvite Create(string email, + public OrganizationUserSingleEmailInvite(string email, IEnumerable accessibleCollections, OrganizationUserType type, Permissions permissions, @@ -31,13 +31,10 @@ public class OrganizationUserSingleEmailInvite throw new BadRequestException(InvalidCollectionConfigurationErrorMessage); } - return new OrganizationUserSingleEmailInvite - { - Email = email, - AccessibleCollections = accessibleCollections.ToArray(), - Type = type, - Permissions = permissions, - AccessSecretsManager = accessSecretsManager - }; + Email = email; + AccessibleCollections = accessibleCollections.ToArray(); + Type = type; + Permissions = permissions; + AccessSecretsManager = accessSecretsManager; } } diff --git a/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs b/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs index b26217e6ee..6f3f992fd8 100644 --- a/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs +++ b/src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs @@ -590,12 +590,12 @@ public class OrganizationUserRepository : Repository, IO $"[{Schema}].[OrganizationUser_CreateManyWithCollectionsAndGroups]", new { - OrganizationUserData = JsonSerializer.Serialize(organizationUserCollection.Select(x => x.User)), + OrganizationUserData = JsonSerializer.Serialize(organizationUserCollection.Select(x => x.OrganizationUser)), CollectionData = JsonSerializer.Serialize(organizationUserCollection .SelectMany(x => x.Collections, (user, collection) => new CollectionUser { CollectionId = collection.Id, - OrganizationUserId = user.User.Id, + OrganizationUserId = user.OrganizationUser.Id, ReadOnly = collection.ReadOnly, HidePasswords = collection.HidePasswords, Manage = collection.Manage @@ -604,7 +604,7 @@ public class OrganizationUserRepository : Repository, IO .SelectMany(x => x.Groups, (user, group) => new GroupUser { GroupId = group, - OrganizationUserId = user.User.Id + OrganizationUserId = user.OrganizationUser.Id })) }, commandType: CommandType.StoredProcedure); diff --git a/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs b/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs index 2fd5673b13..beec846656 100644 --- a/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs +++ b/src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs @@ -762,19 +762,19 @@ public class OrganizationUserRepository : Repository>(organizationUserCollection.Select(x => x.User))); + dbContext.OrganizationUsers.AddRange(Mapper.Map>(organizationUserCollection.Select(x => x.OrganizationUser))); dbContext.CollectionUsers.AddRange(organizationUserCollection.SelectMany(x => x.Collections, (user, collection) => new CollectionUser { CollectionId = collection.Id, HidePasswords = collection.HidePasswords, - OrganizationUserId = user.User.Id, + OrganizationUserId = user.OrganizationUser.Id, Manage = collection.Manage, ReadOnly = collection.ReadOnly })); dbContext.GroupUsers.AddRange(organizationUserCollection.SelectMany(x => x.Groups, (user, group) => new GroupUser { GroupId = group, - OrganizationUserId = user.User.Id + OrganizationUserId = user.OrganizationUser.Id })); await dbContext.SaveChangesAsync(); diff --git a/test/Core.Test/AdminConsole/Models/InviteOrganizationUserRequestTests.cs b/test/Core.Test/AdminConsole/Models/InviteOrganizationUserRequestTests.cs index fcca3c353f..7a7bb97ee5 100644 --- a/test/Core.Test/AdminConsole/Models/InviteOrganizationUserRequestTests.cs +++ b/test/Core.Test/AdminConsole/Models/InviteOrganizationUserRequestTests.cs @@ -15,7 +15,7 @@ public class InviteOrganizationUserRequestTests public void Create_WhenPassedInvalidEmail_ThrowsException(string email, OrganizationUserType type, Permissions permissions, bool accessSecretsManager) { - var action = () => OrganizationUserSingleEmailInvite.Create(email, [], type, permissions, accessSecretsManager); + var action = () => new OrganizationUserSingleEmailInvite(email, [], type, permissions, accessSecretsManager); var exception = Assert.Throws(action); @@ -30,8 +30,7 @@ public class InviteOrganizationUserRequestTests var invalidCollectionConfiguration = new CollectionAccessSelection { Manage = true, HidePasswords = true }; - var action = () => - OrganizationUserSingleEmailInvite.Create(validEmail, [invalidCollectionConfiguration], type, permissions, accessSecretsManager); + var action = () => new OrganizationUserSingleEmailInvite(validEmail, [invalidCollectionConfiguration], type, permissions, accessSecretsManager); var exception = Assert.Throws(action); @@ -45,7 +44,7 @@ public class InviteOrganizationUserRequestTests const string validEmail = "test@email.com"; var validCollectionConfiguration = new CollectionAccessSelection { Id = Guid.NewGuid(), Manage = true }; - var invite = OrganizationUserSingleEmailInvite.Create(validEmail, [validCollectionConfiguration], type, permissions, accessSecretsManager); + var invite = new OrganizationUserSingleEmailInvite(validEmail, [validCollectionConfiguration], type, permissions, accessSecretsManager); Assert.NotNull(invite); Assert.Equal(validEmail, invite.Email); diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Helpers/InviteScimOrganizationUserRequestHelpers.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Helpers/InviteScimOrganizationUserRequestHelpers.cs deleted file mode 100644 index 46ee17fae3..0000000000 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Helpers/InviteScimOrganizationUserRequestHelpers.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Bit.Core.AdminConsole.Models.Business; -using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models; -using Bit.Core.Enums; -using Bit.Core.Models.Data; - -namespace Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Helpers; - -public static class InviteScimOrganizationUserRequestHelpers -{ - public static InviteScimOrganizationUserRequest GetInviteScimOrganizationUserRequestDefault(string email, - OrganizationDto organizationDto, DateTimeOffset performedAt, string externalId) => - InviteScimOrganizationUserRequest.Create( - OrganizationUserSingleEmailInvite.Create( - email, - [], - OrganizationUserType.User, - new Permissions(), - false), - organizationDto, - performedAt, - externalId - ); -} diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Helpers/InviteUserOrganizationValidationRequestHelpers.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Helpers/InviteUserOrganizationValidationRequestHelpers.cs index 92d372a93c..188bb93f52 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Helpers/InviteUserOrganizationValidationRequestHelpers.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Helpers/InviteUserOrganizationValidationRequestHelpers.cs @@ -12,8 +12,8 @@ public static class InviteUserOrganizationValidationRequestHelpers { Invites = [ - OrganizationUserInviteDto.Create(request.Invite.Email, - OrganizationUserInvite.Create(request.Invite, request.ExternalId), organizationDto.OrganizationId) + OrganizationUserInviteDto.Create(request.Email, + OrganizationUserInvite.Create(request, request.ExternalId), organizationDto.OrganizationId) ], Organization = organizationDto, PerformedBy = Guid.Empty, diff --git a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUserCommandTests.cs b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUserCommandTests.cs index df47a38f5c..369dae409d 100644 --- a/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUserCommandTests.cs +++ b/test/Core.Test/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/InviteOrganizationUserCommandTests.cs @@ -18,7 +18,6 @@ using Bit.Test.Common.AutoFixture.Attributes; using Microsoft.Extensions.Time.Testing; using NSubstitute; using Xunit; -using static Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Helpers.InviteScimOrganizationUserRequestHelpers; using static Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Helpers.InviteUserOrganizationValidationRequestHelpers; namespace Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers; @@ -41,7 +40,8 @@ public class InviteOrganizationUserCommandTests var organizationDto = OrganizationDto.FromOrganization(organization); - var request = GetInviteScimOrganizationUserRequestDefault(user.Email, + var request = new InviteScimOrganizationUserRequest(user.Email, + true, organizationDto, timeProvider.GetUtcNow(), externalId); @@ -58,7 +58,7 @@ public class InviteOrganizationUserCommandTests var result = await sutProvider.Sut.InviteScimOrganizationUserAsync(request); // Assert - Assert.IsType>(result); + Assert.IsType>(result); sutProvider.GetDependency() .DidNotReceiveWithAnyArgs() @@ -88,7 +88,8 @@ public class InviteOrganizationUserCommandTests var organizationDto = OrganizationDto.FromOrganization(organization); - var request = GetInviteScimOrganizationUserRequestDefault(user.Email, + var request = new InviteScimOrganizationUserRequest(user.Email, + true, organizationDto, timeProvider.GetUtcNow(), externalId); @@ -109,12 +110,12 @@ public class InviteOrganizationUserCommandTests var result = await sutProvider.Sut.InviteScimOrganizationUserAsync(request); // Assert - Assert.IsType>(result); + Assert.IsType>(result); sutProvider.GetDependency() .Received(1) .CreateManyAsync(Arg.Is>(users => - users.Any(user => user.User.Email == request.Invite.Email))); + users.Any(user => user.OrganizationUser.Email == request.Email))); sutProvider.GetDependency() .Received(1) @@ -140,7 +141,8 @@ public class InviteOrganizationUserCommandTests var organizationDto = OrganizationDto.FromOrganization(organization); - var request = GetInviteScimOrganizationUserRequestDefault(user.Email, + var request = new InviteScimOrganizationUserRequest(user.Email, + true, organizationDto, timeProvider.GetUtcNow(), externalId); @@ -194,7 +196,8 @@ public class InviteOrganizationUserCommandTests var organizationDto = OrganizationDto.FromOrganization(organization); - var request = GetInviteScimOrganizationUserRequestDefault(user.Email, + var request = new InviteScimOrganizationUserRequest(user.Email, + true, organizationDto, timeProvider.GetUtcNow(), externalId); @@ -221,7 +224,7 @@ public class InviteOrganizationUserCommandTests var result = await sutProvider.Sut.InviteScimOrganizationUserAsync(request); // Assert - Assert.IsType>(result); + Assert.IsType>(result); sutProvider.GetDependency() .Received(1) @@ -249,7 +252,8 @@ public class InviteOrganizationUserCommandTests var organizationDto = OrganizationDto.FromOrganization(organization); - var request = GetInviteScimOrganizationUserRequestDefault(user.Email, + var request = new InviteScimOrganizationUserRequest(user.Email, + true, organizationDto, timeProvider.GetUtcNow(), externalId); @@ -279,7 +283,7 @@ public class InviteOrganizationUserCommandTests var result = await sutProvider.Sut.InviteScimOrganizationUserAsync(request); // Assert - Assert.IsType>(result); + Assert.IsType>(result); sutProvider.GetDependency() .AdjustSeatsAsync(organization, organizationDto.Plan, passwordManagerUpdate.SeatsRequiredToAdd); @@ -311,7 +315,8 @@ public class InviteOrganizationUserCommandTests var organizationDto = OrganizationDto.FromOrganization(organization); - var request = GetInviteScimOrganizationUserRequestDefault(user.Email, + var request = new InviteScimOrganizationUserRequest(user.Email, + true, organizationDto, timeProvider.GetUtcNow(), externalId); @@ -345,7 +350,7 @@ public class InviteOrganizationUserCommandTests var result = await sutProvider.Sut.InviteScimOrganizationUserAsync(request); // Assert - Assert.IsType>(result); + Assert.IsType>(result); sutProvider.GetDependency() .Received(1) diff --git a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs index 27b2159a60..3de89f03f9 100644 --- a/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs +++ b/test/Infrastructure.IntegrationTest/AdminConsole/Repositories/OrganizationUserRepositoryTests.cs @@ -396,9 +396,9 @@ public class OrganizationUserRepositoryTests var orgUserCollection = new List { - new CreateOrganizationUser + new() { - User = new OrganizationUser + OrganizationUser = new OrganizationUser { Id = CoreHelpers.GenerateComb(), OrganizationId = organization.Id, @@ -425,6 +425,7 @@ public class OrganizationUserRepositoryTests await organizationUserRepository.CreateManyAsync(orgUserCollection); - var orgUser = await organizationUserRepository.GetDetailsByIdAsync(orgUserCollection.First().User.Id); + var orgUser = await organizationUserRepository.GetDetailsByIdAsync(orgUserCollection.First().OrganizationUser.Id); + Assert.Equal(orgUserCollection.First().OrganizationUser.Id, orgUser.Id); } }