1
0
mirror of https://github.com/bitwarden/server.git synced 2025-04-06 21:48:12 -05:00

Rename of OrgDto

This commit is contained in:
jrmccannon 2025-03-05 16:21:40 -06:00
parent 53168717fb
commit 56c7cc8bf4
No known key found for this signature in database
GPG Key ID: CF03F3DB01CE96A6
19 changed files with 113 additions and 111 deletions

View File

@ -30,12 +30,12 @@ public class ScimUserRequestModel : BaseScimUserModel
public InviteScimOrganizationUserRequest ToRequest( public InviteScimOrganizationUserRequest ToRequest(
ScimProviderType scimProvider, ScimProviderType scimProvider,
bool hasSecretsManager, bool hasSecretsManager,
OrganizationDto organization, InviteOrganization inviteOrganization,
DateTimeOffset performedAt) => DateTimeOffset performedAt) =>
new( new(
email: EmailForInvite(scimProvider), email: EmailForInvite(scimProvider),
hasSecretsManager: hasSecretsManager, hasSecretsManager: hasSecretsManager,
organization: organization, inviteOrganization: inviteOrganization,
performedAt: performedAt, performedAt: performedAt,
externalId: ExternalIdForInvite()); externalId: ExternalIdForInvite());

View File

@ -93,7 +93,7 @@ public class PostUserCommand(
var request = model.ToRequest( var request = model.ToRequest(
scimProvider: scimProvider, scimProvider: scimProvider,
hasSecretsManager: hasStandaloneSecretsManager, hasSecretsManager: hasStandaloneSecretsManager,
organization: new OrganizationDto(organization, plan), inviteOrganization: new InviteOrganization(organization, plan),
performedAt: timeProvider.GetUtcNow()); performedAt: timeProvider.GetUtcNow());
var result = await inviteOrganizationUsersCommand.InviteScimOrganizationUserAsync(request); var result = await inviteOrganizationUsersCommand.InviteScimOrganizationUserAsync(request);

View File

@ -4,7 +4,7 @@ using Bit.Core.Utilities;
namespace Bit.Core.AdminConsole.Models.Business; namespace Bit.Core.AdminConsole.Models.Business;
public record OrganizationDto public record InviteOrganization
{ {
public Guid OrganizationId { get; init; } public Guid OrganizationId { get; init; }
public int? Seats { get; init; } public int? Seats { get; init; }
@ -16,13 +16,13 @@ public record OrganizationDto
public string GatewaySubscriptionId { get; init; } public string GatewaySubscriptionId { get; init; }
public bool UseSecretsManager { get; init; } public bool UseSecretsManager { get; init; }
public OrganizationDto() public InviteOrganization()
{ {
} }
public OrganizationDto(Organization organization, Plan plan) public InviteOrganization(Organization organization, Plan plan)
{ {
OrganizationId = organization.Id; OrganizationId = organization.Id;
Seats = organization.Seats; Seats = organization.Seats;
@ -35,7 +35,7 @@ public record OrganizationDto
UseSecretsManager = organization.UseSecretsManager; UseSecretsManager = organization.UseSecretsManager;
} }
public OrganizationDto(Organization organization) : this(organization, StaticStore.GetPlan(organization.PlanType)) public InviteOrganization(Organization organization) : this(organization, StaticStore.GetPlan(organization.PlanType))
{ {
} }
} }

View File

@ -59,13 +59,13 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
private async Task<CommandResult<IEnumerable<OrganizationUser>>> InviteOrganizationUsersAsync(InviteOrganizationUsersRequest request) private async Task<CommandResult<IEnumerable<OrganizationUser>>> InviteOrganizationUsersAsync(InviteOrganizationUsersRequest request)
{ {
var existingEmails = new HashSet<string>(await organizationUserRepository.SelectKnownEmailsAsync( var existingEmails = new HashSet<string>(await organizationUserRepository.SelectKnownEmailsAsync(
request.Organization.OrganizationId, request.Invites.SelectMany(i => i.Emails), false), request.InviteOrganization.OrganizationId, request.Invites.SelectMany(i => i.Emails), false),
StringComparer.InvariantCultureIgnoreCase); StringComparer.InvariantCultureIgnoreCase);
var invitesToSend = request.Invites var invitesToSend = request.Invites
.SelectMany(invite => invite.Emails .SelectMany(invite => invite.Emails
.Where(email => !existingEmails.Contains(email)) .Where(email => !existingEmails.Contains(email))
.Select(email => OrganizationUserInviteDto.Create(email, invite, request.Organization.OrganizationId)) .Select(email => OrganizationUserInviteDto.Create(email, invite, request.InviteOrganization.OrganizationId))
).ToArray(); ).ToArray();
if (invitesToSend.Length == 0) if (invitesToSend.Length == 0)
@ -76,11 +76,11 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
var validationResult = await inviteUsersValidation.ValidateAsync(new InviteUserOrganizationValidationRequest var validationResult = await inviteUsersValidation.ValidateAsync(new InviteUserOrganizationValidationRequest
{ {
Invites = invitesToSend.ToArray(), Invites = invitesToSend.ToArray(),
Organization = request.Organization, InviteOrganization = request.InviteOrganization,
PerformedBy = request.PerformedBy, PerformedBy = request.PerformedBy,
PerformedAt = request.PerformedAt, PerformedAt = request.PerformedAt,
OccupiedPmSeats = await organizationUserRepository.GetOccupiedSeatCountByOrganizationIdAsync(request.Organization.OrganizationId), OccupiedPmSeats = await organizationUserRepository.GetOccupiedSeatCountByOrganizationIdAsync(request.InviteOrganization.OrganizationId),
OccupiedSmSeats = await organizationUserRepository.GetOccupiedSmSeatCountByOrganizationIdAsync(request.Organization.OrganizationId) OccupiedSmSeats = await organizationUserRepository.GetOccupiedSmSeatCountByOrganizationIdAsync(request.InviteOrganization.OrganizationId)
}); });
if (validationResult is Invalid<InviteUserOrganizationValidationRequest> invalid) if (validationResult is Invalid<InviteUserOrganizationValidationRequest> invalid)
@ -94,7 +94,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
.Select(MapToDataModel(request.PerformedAt)) .Select(MapToDataModel(request.PerformedAt))
.ToArray(); .ToArray();
var organization = await organizationRepository.GetByIdAsync(validatedRequest!.Value.Organization.OrganizationId); var organization = await organizationRepository.GetByIdAsync(validatedRequest!.Value.InviteOrganization.OrganizationId);
try try
{ {
await organizationUserRepository.CreateManyAsync(organizationUserCollection); await organizationUserRepository.CreateManyAsync(organizationUserCollection);
@ -129,7 +129,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
{ {
if (valid.Value.PasswordManagerSubscriptionUpdate.SeatsRequiredToAdd > 0) if (valid.Value.PasswordManagerSubscriptionUpdate.SeatsRequiredToAdd > 0)
{ {
await paymentService.AdjustSeatsAsync(organization, valid.Value.Organization.Plan, -valid.Value.PasswordManagerSubscriptionUpdate.SeatsRequiredToAdd); await paymentService.AdjustSeatsAsync(organization, valid.Value.InviteOrganization.Plan, -valid.Value.PasswordManagerSubscriptionUpdate.SeatsRequiredToAdd);
organization.Seats = (short?)valid.Value.PasswordManagerSubscriptionUpdate.Seats; organization.Seats = (short?)valid.Value.PasswordManagerSubscriptionUpdate.Seats;
@ -142,7 +142,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
{ {
if (valid.Value.SecretsManagerSubscriptionUpdate.SeatsRequiredToAdd < 0) if (valid.Value.SecretsManagerSubscriptionUpdate.SeatsRequiredToAdd < 0)
{ {
var updateRevert = new SecretsManagerSubscriptionUpdate(organization, valid.Value.Organization.Plan, false) var updateRevert = new SecretsManagerSubscriptionUpdate(organization, valid.Value.InviteOrganization.Plan, false)
{ {
SmSeats = valid.Value.SecretsManagerSubscriptionUpdate.Seats SmSeats = valid.Value.SecretsManagerSubscriptionUpdate.Seats
}; };
@ -180,7 +180,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
try try
{ {
var ownerEmails = (await organizationUserRepository var ownerEmails = (await organizationUserRepository
.GetManyByMinimumRoleAsync(valid.Value.Organization.OrganizationId, OrganizationUserType.Owner)) .GetManyByMinimumRoleAsync(valid.Value.InviteOrganization.OrganizationId, OrganizationUserType.Owner))
.Select(x => x.Email) .Select(x => x.Email)
.Distinct(); .Distinct();
@ -200,7 +200,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
return; return;
} }
var subscriptionUpdate = new SecretsManagerSubscriptionUpdate(organization, valid.Value.Organization.Plan, true) var subscriptionUpdate = new SecretsManagerSubscriptionUpdate(organization, valid.Value.InviteOrganization.Plan, true)
.AdjustSeats(valid.Value.SecretsManagerSubscriptionUpdate.SeatsRequiredToAdd); .AdjustSeats(valid.Value.SecretsManagerSubscriptionUpdate.SeatsRequiredToAdd);
await updateSecretsManagerSubscriptionCommand.UpdateSubscriptionAsync(subscriptionUpdate); await updateSecretsManagerSubscriptionCommand.UpdateSubscriptionAsync(subscriptionUpdate);
@ -213,7 +213,7 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
return; return;
} }
await paymentService.AdjustSeatsAsync(organization, valid.Value.Organization.Plan, valid.Value.PasswordManagerSubscriptionUpdate.SeatsRequiredToAdd); await paymentService.AdjustSeatsAsync(organization, valid.Value.InviteOrganization.Plan, valid.Value.PasswordManagerSubscriptionUpdate.SeatsRequiredToAdd);
organization.Seats = (short?)valid.Value.PasswordManagerSubscriptionUpdate.UpdatedSeatTotal; organization.Seats = (short?)valid.Value.PasswordManagerSubscriptionUpdate.UpdatedSeatTotal;
@ -223,8 +223,8 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
await referenceEventService.RaiseEventAsync( await referenceEventService.RaiseEventAsync(
new ReferenceEvent(ReferenceEventType.AdjustSeats, organization, currentContext) new ReferenceEvent(ReferenceEventType.AdjustSeats, organization, currentContext)
{ {
PlanName = valid.Value.Organization.Plan.Name, PlanName = valid.Value.InviteOrganization.Plan.Name,
PlanType = valid.Value.Organization.Plan.Type, PlanType = valid.Value.InviteOrganization.Plan.Type,
Seats = valid.Value.PasswordManagerSubscriptionUpdate.UpdatedSeatTotal, Seats = valid.Value.PasswordManagerSubscriptionUpdate.UpdatedSeatTotal,
PreviousSeats = valid.Value.PasswordManagerSubscriptionUpdate.Seats PreviousSeats = valid.Value.PasswordManagerSubscriptionUpdate.Seats
}); });

View File

@ -5,24 +5,24 @@ namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUse
public class InviteOrganizationUsersRequest public class InviteOrganizationUsersRequest
{ {
public OrganizationUserInvite[] Invites { get; } = []; public OrganizationUserInvite[] Invites { get; } = [];
public OrganizationDto Organization { get; } public InviteOrganization InviteOrganization { get; }
public Guid PerformedBy { get; } public Guid PerformedBy { get; }
public DateTimeOffset PerformedAt { get; } public DateTimeOffset PerformedAt { get; }
public InviteOrganizationUsersRequest(OrganizationUserInvite[] invites, public InviteOrganizationUsersRequest(OrganizationUserInvite[] invites,
OrganizationDto organization, InviteOrganization inviteOrganization,
Guid performedBy, Guid performedBy,
DateTimeOffset performedAt) DateTimeOffset performedAt)
{ {
Invites = invites; Invites = invites;
Organization = organization; InviteOrganization = inviteOrganization;
PerformedBy = performedBy; PerformedBy = performedBy;
PerformedAt = performedAt; PerformedAt = performedAt;
} }
public InviteOrganizationUsersRequest(InviteScimOrganizationUserRequest request) : public InviteOrganizationUsersRequest(InviteScimOrganizationUserRequest request) :
this([OrganizationUserInvite.Create(request, request.ExternalId)], this([OrganizationUserInvite.Create(request, request.ExternalId)],
request.Organization, request.InviteOrganization,
Guid.Empty, Guid.Empty,
request.PerformedAt) request.PerformedAt)
{ } { }

View File

@ -6,13 +6,13 @@ namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUse
public record InviteScimOrganizationUserRequest : OrganizationUserSingleEmailInvite public record InviteScimOrganizationUserRequest : OrganizationUserSingleEmailInvite
{ {
public OrganizationDto Organization { get; private init; } public InviteOrganization InviteOrganization { get; private init; }
public DateTimeOffset PerformedAt { get; private init; } public DateTimeOffset PerformedAt { get; private init; }
public string ExternalId { get; private init; } = string.Empty; public string ExternalId { get; private init; } = string.Empty;
public InviteScimOrganizationUserRequest(string email, public InviteScimOrganizationUserRequest(string email,
bool hasSecretsManager, bool hasSecretsManager,
OrganizationDto organization, InviteOrganization inviteOrganization,
DateTimeOffset performedAt, DateTimeOffset performedAt,
string externalId) : base( string externalId) : base(
email: email, email: email,
@ -21,7 +21,7 @@ public record InviteScimOrganizationUserRequest : OrganizationUserSingleEmailInv
permissions: new Permissions(), permissions: new Permissions(),
accessSecretsManager: hasSecretsManager) accessSecretsManager: hasSecretsManager)
{ {
Organization = organization; InviteOrganization = inviteOrganization;
PerformedAt = performedAt; PerformedAt = performedAt;
ExternalId = externalId; ExternalId = externalId;
} }

View File

@ -10,7 +10,7 @@ public class InviteUserOrganizationValidationRequest
public InviteUserOrganizationValidationRequest(InviteUserOrganizationValidationRequest request, PasswordManagerSubscriptionUpdate subscriptionUpdate, SecretsManagerSubscriptionUpdate smSubscriptionUpdate) public InviteUserOrganizationValidationRequest(InviteUserOrganizationValidationRequest request, PasswordManagerSubscriptionUpdate subscriptionUpdate, SecretsManagerSubscriptionUpdate smSubscriptionUpdate)
{ {
Invites = request.Invites; Invites = request.Invites;
Organization = request.Organization; InviteOrganization = request.InviteOrganization;
PerformedBy = request.PerformedBy; PerformedBy = request.PerformedBy;
PerformedAt = request.PerformedAt; PerformedAt = request.PerformedAt;
OccupiedPmSeats = request.OccupiedPmSeats; OccupiedPmSeats = request.OccupiedPmSeats;
@ -20,7 +20,7 @@ public class InviteUserOrganizationValidationRequest
} }
public OrganizationUserInviteDto[] Invites { get; init; } = []; public OrganizationUserInviteDto[] Invites { get; init; } = [];
public OrganizationDto Organization { get; init; } public InviteOrganization InviteOrganization { get; init; }
public Guid PerformedBy { get; init; } public Guid PerformedBy { get; init; }
public DateTimeOffset PerformedAt { get; init; } public DateTimeOffset PerformedAt { get; init; }
public int OccupiedPmSeats { get; init; } public int OccupiedPmSeats { get; init; }

View File

@ -28,7 +28,7 @@ public class InviteUsersValidation(
return new Invalid<InviteUserOrganizationValidationRequest>(invalidEnvironment.ErrorMessageString); return new Invalid<InviteUserOrganizationValidationRequest>(invalidEnvironment.ErrorMessageString);
} }
if (InvitingUserOrganizationValidation.Validate(request.Organization) is Invalid<OrganizationDto> organizationValidation) if (InvitingUserOrganizationValidation.Validate(request.InviteOrganization) is Invalid<InviteOrganization> organizationValidation)
{ {
return new Invalid<InviteUserOrganizationValidationRequest>(organizationValidation.ErrorMessageString); return new Invalid<InviteUserOrganizationValidationRequest>(organizationValidation.ErrorMessageString);
} }
@ -49,7 +49,7 @@ public class InviteUsersValidation(
return new Invalid<InviteUserOrganizationValidationRequest>(invalidSmSubscriptionUpdate.ErrorMessageString); return new Invalid<InviteUserOrganizationValidationRequest>(invalidSmSubscriptionUpdate.ErrorMessageString);
} }
var provider = await providerRepository.GetByOrganizationIdAsync(request.Organization.OrganizationId); var provider = await providerRepository.GetByOrganizationIdAsync(request.InviteOrganization.OrganizationId);
if (provider is not null && if (provider is not null &&
InvitingUserOrganizationProviderValidation.Validate(ProviderDto.FromProviderEntity(provider)) is InvitingUserOrganizationProviderValidation.Validate(ProviderDto.FromProviderEntity(provider)) is
@ -58,9 +58,9 @@ public class InviteUsersValidation(
return new Invalid<InviteUserOrganizationValidationRequest>(invalidProviderValidation.ErrorMessageString); return new Invalid<InviteUserOrganizationValidationRequest>(invalidProviderValidation.ErrorMessageString);
} }
var paymentSubscription = await paymentService.GetSubscriptionAsync(await organizationRepository.GetByIdAsync(request.Organization.OrganizationId)); var paymentSubscription = await paymentService.GetSubscriptionAsync(await organizationRepository.GetByIdAsync(request.InviteOrganization.OrganizationId));
if (InviteUserPaymentValidation.Validate(PaymentSubscriptionDto.FromSubscriptionInfo(paymentSubscription, request.Organization)) is if (InviteUserPaymentValidation.Validate(PaymentSubscriptionDto.FromSubscriptionInfo(paymentSubscription, request.InviteOrganization)) is
Invalid<PaymentSubscriptionDto> invalidPaymentValidation) Invalid<PaymentSubscriptionDto> invalidPaymentValidation)
{ {
return new Invalid<InviteUserOrganizationValidationRequest>(invalidPaymentValidation.ErrorMessageString); return new Invalid<InviteUserOrganizationValidationRequest>(invalidPaymentValidation.ErrorMessageString);

View File

@ -5,23 +5,23 @@ namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUse
public static class InvitingUserOrganizationValidation public static class InvitingUserOrganizationValidation
{ {
public static ValidationResult<OrganizationDto> Validate(OrganizationDto organization) public static ValidationResult<InviteOrganization> Validate(InviteOrganization inviteOrganization)
{ {
if (organization.Seats is null) if (inviteOrganization.Seats is null)
{ {
return new Valid<OrganizationDto>(organization); return new Valid<InviteOrganization>(inviteOrganization);
} }
if (string.IsNullOrWhiteSpace(organization.GatewayCustomerId)) if (string.IsNullOrWhiteSpace(inviteOrganization.GatewayCustomerId))
{ {
return new Invalid<OrganizationDto>(NoPaymentMethodFoundError); return new Invalid<InviteOrganization>(NoPaymentMethodFoundError);
} }
if (string.IsNullOrWhiteSpace(organization.GatewaySubscriptionId)) if (string.IsNullOrWhiteSpace(inviteOrganization.GatewaySubscriptionId))
{ {
return new Invalid<OrganizationDto>(NoSubscriptionFoundError); return new Invalid<InviteOrganization>(NoSubscriptionFoundError);
} }
return new Valid<OrganizationDto>(organization); return new Valid<InviteOrganization>(inviteOrganization);
} }
} }

View File

@ -40,23 +40,23 @@ public class PasswordManagerSubscriptionUpdate
PasswordManagerPlan = plan; PasswordManagerPlan = plan;
} }
public static PasswordManagerSubscriptionUpdate Create(OrganizationDto organizationDto, int occupiedSeats, int seatsToAdd) public static PasswordManagerSubscriptionUpdate Create(InviteOrganization inviteOrganization, int occupiedSeats, int seatsToAdd)
{ {
return new PasswordManagerSubscriptionUpdate( return new PasswordManagerSubscriptionUpdate(
organizationDto.Seats, inviteOrganization.Seats,
organizationDto.MaxAutoScaleSeats, inviteOrganization.MaxAutoScaleSeats,
occupiedSeats, occupiedSeats,
seatsToAdd, seatsToAdd,
organizationDto.Plan.PasswordManager); inviteOrganization.Plan.PasswordManager);
} }
public static PasswordManagerSubscriptionUpdate Create(InviteUserOrganizationValidationRequest validationRequest) public static PasswordManagerSubscriptionUpdate Create(InviteUserOrganizationValidationRequest validationRequest)
{ {
return new PasswordManagerSubscriptionUpdate( return new PasswordManagerSubscriptionUpdate(
validationRequest.Organization.Seats, validationRequest.InviteOrganization.Seats,
validationRequest.Organization.MaxAutoScaleSeats, validationRequest.InviteOrganization.MaxAutoScaleSeats,
validationRequest.OccupiedPmSeats, validationRequest.OccupiedPmSeats,
validationRequest.Invites.Length, validationRequest.Invites.Length,
validationRequest.Organization.Plan.PasswordManager); validationRequest.InviteOrganization.Plan.PasswordManager);
} }
} }

View File

@ -9,10 +9,10 @@ public class PaymentSubscriptionDto
public ProductTierType ProductTierType { get; init; } public ProductTierType ProductTierType { get; init; }
public string SubscriptionStatus { get; init; } public string SubscriptionStatus { get; init; }
public static PaymentSubscriptionDto FromSubscriptionInfo(SubscriptionInfo subscriptionInfo, OrganizationDto organizationDto) => public static PaymentSubscriptionDto FromSubscriptionInfo(SubscriptionInfo subscriptionInfo, InviteOrganization inviteOrganization) =>
new() new()
{ {
SubscriptionStatus = subscriptionInfo?.Subscription?.Status ?? string.Empty, SubscriptionStatus = subscriptionInfo?.Subscription?.Status ?? string.Empty,
ProductTierType = organizationDto.Plan.ProductTier ProductTierType = inviteOrganization.Plan.ProductTier
}; };
} }

View File

@ -34,25 +34,25 @@ public class SecretsManagerSubscriptionUpdate
SecretsManagerPlan = plan; SecretsManagerPlan = plan;
} }
public static SecretsManagerSubscriptionUpdate Create(OrganizationDto organizationDto, int occupiedSeats, int seatsToAdd, int passwordManagerSeatTotal) public static SecretsManagerSubscriptionUpdate Create(InviteOrganization inviteOrganization, int occupiedSeats, int seatsToAdd, int passwordManagerSeatTotal)
{ {
return new SecretsManagerSubscriptionUpdate(organizationDto.UseSecretsManager, return new SecretsManagerSubscriptionUpdate(inviteOrganization.UseSecretsManager,
organizationDto.SmSeats, inviteOrganization.SmSeats,
organizationDto.SmMaxAutoScaleSeats, inviteOrganization.SmMaxAutoScaleSeats,
occupiedSeats, occupiedSeats,
seatsToAdd, seatsToAdd,
passwordManagerSeatTotal, passwordManagerSeatTotal,
organizationDto.Plan.SecretsManager); inviteOrganization.Plan.SecretsManager);
} }
public static SecretsManagerSubscriptionUpdate Create(InviteUserOrganizationValidationRequest refined, PasswordManagerSubscriptionUpdate passwordManagerSubscriptionUpdate) public static SecretsManagerSubscriptionUpdate Create(InviteUserOrganizationValidationRequest refined, PasswordManagerSubscriptionUpdate passwordManagerSubscriptionUpdate)
{ {
return new SecretsManagerSubscriptionUpdate(refined.Organization.UseSecretsManager, return new SecretsManagerSubscriptionUpdate(refined.InviteOrganization.UseSecretsManager,
refined.Organization.SmSeats, refined.InviteOrganization.SmSeats,
refined.Organization.SmMaxAutoScaleSeats, refined.InviteOrganization.SmMaxAutoScaleSeats,
refined.OccupiedSmSeats, refined.OccupiedSmSeats,
refined.Invites.Count(x => x.AccessSecretsManager), refined.Invites.Count(x => x.AccessSecretsManager),
passwordManagerSubscriptionUpdate.UpdatedSeatTotal, passwordManagerSubscriptionUpdate.UpdatedSeatTotal,
refined.Organization.Plan.SecretsManager); refined.InviteOrganization.Plan.SecretsManager);
} }
} }

View File

@ -303,7 +303,7 @@ public class GroupsControllerPutTests
// Arrange repositories // Arrange repositories
sutProvider.GetDependency<IGroupRepository>().GetManyUserIdsByIdAsync(group.Id).Returns(currentGroupUsers ?? []); sutProvider.GetDependency<IGroupRepository>().GetManyUserIdsByIdAsync(group.Id).Returns(currentGroupUsers ?? []);
sutProvider.GetDependency<IGroupRepository>().GetByIdWithCollectionsAsync(group.Id) sutProvider.GetDependency<IGroupRepository>().GetByIdWithCollectionsAsync(group.Id)!
.Returns(new Tuple<Group, ICollection<CollectionAccessSelection>>(group, currentCollectionAccess ?? [])); .Returns(new Tuple<Group, ICollection<CollectionAccessSelection>>(group, currentCollectionAccess ?? []));
if (savingUser != null) if (savingUser != null)
{ {

View File

@ -7,28 +7,28 @@ namespace Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers.Invi
public static class InviteUserOrganizationValidationRequestHelpers public static class InviteUserOrganizationValidationRequestHelpers
{ {
public static InviteUserOrganizationValidationRequest GetInviteValidationRequestMock(InviteScimOrganizationUserRequest request, public static InviteUserOrganizationValidationRequest GetInviteValidationRequestMock(InviteScimOrganizationUserRequest request,
OrganizationDto organizationDto) => InviteOrganization inviteOrganization) =>
new() new()
{ {
Invites = Invites =
[ [
OrganizationUserInviteDto.Create(request.Email, OrganizationUserInviteDto.Create(request.Email,
OrganizationUserInvite.Create(request, request.ExternalId), organizationDto.OrganizationId) OrganizationUserInvite.Create(request, request.ExternalId), inviteOrganization.OrganizationId)
], ],
Organization = organizationDto, InviteOrganization = inviteOrganization,
PerformedBy = Guid.Empty, PerformedBy = Guid.Empty,
PerformedAt = request.PerformedAt, PerformedAt = request.PerformedAt,
OccupiedPmSeats = 0, OccupiedPmSeats = 0,
OccupiedSmSeats = 0, OccupiedSmSeats = 0,
PasswordManagerSubscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0), PasswordManagerSubscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(inviteOrganization, 0, 0),
SecretsManagerSubscriptionUpdate = SecretsManagerSubscriptionUpdate.Create(organizationDto, 0, 0, 0) SecretsManagerSubscriptionUpdate = SecretsManagerSubscriptionUpdate.Create(inviteOrganization, 0, 0, 0)
}; };
public static InviteUserOrganizationValidationRequest WithPasswordManagerUpdate(this InviteUserOrganizationValidationRequest request, PasswordManagerSubscriptionUpdate passwordManagerSubscriptionUpdate) => public static InviteUserOrganizationValidationRequest WithPasswordManagerUpdate(this InviteUserOrganizationValidationRequest request, PasswordManagerSubscriptionUpdate passwordManagerSubscriptionUpdate) =>
new() new()
{ {
Invites = request.Invites, Invites = request.Invites,
Organization = request.Organization, InviteOrganization = request.InviteOrganization,
PerformedBy = request.PerformedBy, PerformedBy = request.PerformedBy,
PerformedAt = request.PerformedAt, PerformedAt = request.PerformedAt,
OccupiedPmSeats = request.OccupiedPmSeats, OccupiedPmSeats = request.OccupiedPmSeats,
@ -41,7 +41,7 @@ public static class InviteUserOrganizationValidationRequestHelpers
new() new()
{ {
Invites = request.Invites, Invites = request.Invites,
Organization = request.Organization, InviteOrganization = request.InviteOrganization,
PerformedBy = request.PerformedBy, PerformedBy = request.PerformedBy,
PerformedAt = request.PerformedAt, PerformedAt = request.PerformedAt,
OccupiedPmSeats = request.OccupiedPmSeats, OccupiedPmSeats = request.OccupiedPmSeats,

View File

@ -38,7 +38,7 @@ public class InviteOrganizationUserCommandTests
// Arrange // Arrange
user.Email = address.Address; user.Email = address.Address;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var request = new InviteScimOrganizationUserRequest(user.Email, var request = new InviteScimOrganizationUserRequest(user.Email,
true, true,
@ -60,15 +60,15 @@ public class InviteOrganizationUserCommandTests
// Assert // Assert
Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result); Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result);
sutProvider.GetDependency<IPaymentService>() await sutProvider.GetDependency<IPaymentService>()
.DidNotReceiveWithAnyArgs() .DidNotReceiveWithAnyArgs()
.AdjustSeatsAsync(Arg.Any<Organization>(), Arg.Any<Plan>(), Arg.Any<int>()); .AdjustSeatsAsync(Arg.Any<Organization>(), Arg.Any<Plan>(), Arg.Any<int>());
sutProvider.GetDependency<ISendOrganizationInvitesCommand>() await sutProvider.GetDependency<ISendOrganizationInvitesCommand>()
.DidNotReceiveWithAnyArgs() .DidNotReceiveWithAnyArgs()
.SendInvitesAsync(Arg.Any<SendInvitesRequest>()); .SendInvitesAsync(Arg.Any<SendInvitesRequest>());
sutProvider.GetDependency<IUpdateSecretsManagerSubscriptionCommand>() await sutProvider.GetDependency<IUpdateSecretsManagerSubscriptionCommand>()
.DidNotReceiveWithAnyArgs() .DidNotReceiveWithAnyArgs()
.UpdateSubscriptionAsync(Arg.Any<Core.Models.Business.SecretsManagerSubscriptionUpdate>()); .UpdateSubscriptionAsync(Arg.Any<Core.Models.Business.SecretsManagerSubscriptionUpdate>());
} }
@ -78,17 +78,17 @@ public class InviteOrganizationUserCommandTests
public async Task InviteScimOrganizationUserAsync_WhenEmailDoesNotExistAndRequestIsValid_ThenUserIsSavedAndInviteIsSent( public async Task InviteScimOrganizationUserAsync_WhenEmailDoesNotExistAndRequestIsValid_ThenUserIsSavedAndInviteIsSent(
MailAddress address, MailAddress address,
Organization organization, Organization organization,
OrganizationUser user, OrganizationUser orgUser,
FakeTimeProvider timeProvider, FakeTimeProvider timeProvider,
string externalId, string externalId,
SutProvider<InviteOrganizationUsersCommand> sutProvider) SutProvider<InviteOrganizationUsersCommand> sutProvider)
{ {
// Arrange // Arrange
user.Email = address.Address; orgUser.Email = address.Address;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var request = new InviteScimOrganizationUserRequest(user.Email, var request = new InviteScimOrganizationUserRequest(orgUser.Email,
true, true,
organizationDto, organizationDto,
timeProvider.GetUtcNow(), timeProvider.GetUtcNow(),
@ -112,16 +112,16 @@ public class InviteOrganizationUserCommandTests
// Assert // Assert
Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result); Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result);
sutProvider.GetDependency<IOrganizationUserRepository>() await sutProvider.GetDependency<IOrganizationUserRepository>()
.Received(1) .Received(1)
.CreateManyAsync(Arg.Is<IEnumerable<CreateOrganizationUser>>(users => .CreateManyAsync(Arg.Is<IEnumerable<CreateOrganizationUser>>(users =>
users.Any(user => user.OrganizationUser.Email == request.Email))); users.Any(user => user.OrganizationUser.Email == request.Email)));
sutProvider.GetDependency<ISendOrganizationInvitesCommand>() await sutProvider.GetDependency<ISendOrganizationInvitesCommand>()
.Received(1) .Received(1)
.SendInvitesAsync(Arg.Is<SendInvitesRequest>(invite => .SendInvitesAsync(Arg.Is<SendInvitesRequest>(invite =>
invite.Organization == organization && invite.Organization == organization &&
invite.Users.Count(x => x.Email == user.Email) == 1)); invite.Users.Count(x => x.Email == orgUser.Email) == 1));
} }
[Theory] [Theory]
@ -139,7 +139,7 @@ public class InviteOrganizationUserCommandTests
user.Email = address.Address; user.Email = address.Address;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var request = new InviteScimOrganizationUserRequest(user.Email, var request = new InviteScimOrganizationUserRequest(user.Email,
true, true,
@ -166,13 +166,13 @@ public class InviteOrganizationUserCommandTests
Assert.IsType<Failure<ScimInviteOrganizationUsersResponse>>(result); Assert.IsType<Failure<ScimInviteOrganizationUsersResponse>>(result);
var failure = result as Failure<ScimInviteOrganizationUsersResponse>; var failure = result as Failure<ScimInviteOrganizationUsersResponse>;
Assert.Equal(errorMessage, failure.ErrorMessage); Assert.Equal(errorMessage, failure!.ErrorMessage);
sutProvider.GetDependency<IOrganizationUserRepository>() await sutProvider.GetDependency<IOrganizationUserRepository>()
.DidNotReceive() .DidNotReceive()
.CreateManyAsync(Arg.Any<IEnumerable<CreateOrganizationUser>>()); .CreateManyAsync(Arg.Any<IEnumerable<CreateOrganizationUser>>());
sutProvider.GetDependency<ISendOrganizationInvitesCommand>() await sutProvider.GetDependency<ISendOrganizationInvitesCommand>()
.DidNotReceive() .DidNotReceive()
.SendInvitesAsync(Arg.Any<SendInvitesRequest>()); .SendInvitesAsync(Arg.Any<SendInvitesRequest>());
} }
@ -194,7 +194,7 @@ public class InviteOrganizationUserCommandTests
organization.MaxAutoscaleSeats = 2; organization.MaxAutoscaleSeats = 2;
ownerDetails.Type = OrganizationUserType.Owner; ownerDetails.Type = OrganizationUserType.Owner;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var request = new InviteScimOrganizationUserRequest(user.Email, var request = new InviteScimOrganizationUserRequest(user.Email,
true, true,
@ -226,7 +226,9 @@ public class InviteOrganizationUserCommandTests
// Assert // Assert
Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result); Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result);
sutProvider.GetDependency<IMailService>() Assert.NotNull(organizationDto.MaxAutoScaleSeats);
await sutProvider.GetDependency<IMailService>()
.Received(1) .Received(1)
.SendOrganizationMaxSeatLimitReachedEmailAsync(organization, .SendOrganizationMaxSeatLimitReachedEmailAsync(organization,
organizationDto.MaxAutoScaleSeats.Value, organizationDto.MaxAutoScaleSeats.Value,
@ -250,7 +252,7 @@ public class InviteOrganizationUserCommandTests
organization.MaxAutoscaleSeats = 2; organization.MaxAutoscaleSeats = 2;
ownerDetails.Type = OrganizationUserType.Owner; ownerDetails.Type = OrganizationUserType.Owner;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var request = new InviteScimOrganizationUserRequest(user.Email, var request = new InviteScimOrganizationUserRequest(user.Email,
true, true,
@ -285,12 +287,12 @@ public class InviteOrganizationUserCommandTests
// Assert // Assert
Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result); Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result);
sutProvider.GetDependency<IPaymentService>() await sutProvider.GetDependency<IPaymentService>()
.AdjustSeatsAsync(organization, organizationDto.Plan, passwordManagerUpdate.SeatsRequiredToAdd); .AdjustSeatsAsync(organization, organizationDto.Plan, passwordManagerUpdate.SeatsRequiredToAdd);
orgRepository.Received(1).ReplaceAsync(Arg.Is<Organization>(x => x.Seats == passwordManagerUpdate.UpdatedSeatTotal)); await orgRepository.Received(1).ReplaceAsync(Arg.Is<Organization>(x => x.Seats == passwordManagerUpdate.UpdatedSeatTotal));
sutProvider.GetDependency<IApplicationCacheService>() await sutProvider.GetDependency<IApplicationCacheService>()
.Received(1) .Received(1)
.UpsertOrganizationAbilityAsync(Arg.Is<Organization>(x => x.Seats == passwordManagerUpdate.UpdatedSeatTotal)); .UpsertOrganizationAbilityAsync(Arg.Is<Organization>(x => x.Seats == passwordManagerUpdate.UpdatedSeatTotal));
} }
@ -313,7 +315,7 @@ public class InviteOrganizationUserCommandTests
organization.MaxAutoscaleSeats = 2; organization.MaxAutoscaleSeats = 2;
ownerDetails.Type = OrganizationUserType.Owner; ownerDetails.Type = OrganizationUserType.Owner;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var request = new InviteScimOrganizationUserRequest(user.Email, var request = new InviteScimOrganizationUserRequest(user.Email,
true, true,
@ -352,7 +354,7 @@ public class InviteOrganizationUserCommandTests
// Assert // Assert
Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result); Assert.IsType<Success<ScimInviteOrganizationUsersResponse>>(result);
sutProvider.GetDependency<IUpdateSecretsManagerSubscriptionCommand>() await sutProvider.GetDependency<IUpdateSecretsManagerSubscriptionCommand>()
.Received(1) .Received(1)
.UpdateSubscriptionAsync(Arg.Is<Core.Models.Business.SecretsManagerSubscriptionUpdate>(update => .UpdateSubscriptionAsync(Arg.Is<Core.Models.Business.SecretsManagerSubscriptionUpdate>(update =>
update.SmSeats == secretsManagerSubscriptionUpdate.UpdatedSeatTotal)); update.SmSeats == secretsManagerSubscriptionUpdate.UpdatedSeatTotal));

View File

@ -12,9 +12,9 @@ public class InviteUserOrganizationValidationTests
[BitAutoData] [BitAutoData]
public void Validate_WhenOrganizationIsFreeTier_ShouldReturnValidResponse(Organization organization) public void Validate_WhenOrganizationIsFreeTier_ShouldReturnValidResponse(Organization organization)
{ {
var result = InvitingUserOrganizationValidation.Validate(new OrganizationDto(organization)); var result = InvitingUserOrganizationValidation.Validate(new InviteOrganization(organization));
Assert.IsType<Valid<OrganizationDto>>(result); Assert.IsType<Valid<InviteOrganization>>(result);
} }
[Theory] [Theory]
@ -24,9 +24,9 @@ public class InviteUserOrganizationValidationTests
{ {
organization.GatewayCustomerId = string.Empty; organization.GatewayCustomerId = string.Empty;
var result = InvitingUserOrganizationValidation.Validate(new OrganizationDto(organization)); var result = InvitingUserOrganizationValidation.Validate(new InviteOrganization(organization));
Assert.IsType<Invalid<OrganizationDto>>(result); Assert.IsType<Invalid<InviteOrganization>>(result);
Assert.Equal(InviteUserValidationErrorMessages.NoPaymentMethodFoundError, result.ErrorMessageString); Assert.Equal(InviteUserValidationErrorMessages.NoPaymentMethodFoundError, result.ErrorMessageString);
} }
@ -37,9 +37,9 @@ public class InviteUserOrganizationValidationTests
{ {
organization.GatewaySubscriptionId = string.Empty; organization.GatewaySubscriptionId = string.Empty;
var result = InvitingUserOrganizationValidation.Validate(new OrganizationDto(organization)); var result = InvitingUserOrganizationValidation.Validate(new InviteOrganization(organization));
Assert.IsType<Invalid<OrganizationDto>>(result); Assert.IsType<Invalid<InviteOrganization>>(result);
Assert.Equal(InviteUserValidationErrorMessages.NoSubscriptionFoundError, result.ErrorMessageString); Assert.Equal(InviteUserValidationErrorMessages.NoSubscriptionFoundError, result.ErrorMessageString);
} }
} }

View File

@ -20,7 +20,7 @@ public class InviteUserPaymentValidationTests
var result = InviteUserPaymentValidation.Validate(new PaymentSubscriptionDto var result = InviteUserPaymentValidation.Validate(new PaymentSubscriptionDto
{ {
SubscriptionStatus = StripeConstants.SubscriptionStatus.Active, SubscriptionStatus = StripeConstants.SubscriptionStatus.Active,
ProductTierType = new OrganizationDto(organization).Plan.ProductTier ProductTierType = new InviteOrganization(organization).Plan.ProductTier
}); });
Assert.IsType<Valid<PaymentSubscriptionDto>>(result); Assert.IsType<Valid<PaymentSubscriptionDto>>(result);

View File

@ -17,7 +17,7 @@ public class PasswordManagerInviteUserValidationTests
{ {
organization.Seats = null; organization.Seats = null;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0);
@ -35,7 +35,7 @@ public class PasswordManagerInviteUserValidationTests
var seatsOccupiedByUsers = 4; var seatsOccupiedByUsers = 4;
var additionalSeats = 4; var additionalSeats = 4;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, seatsOccupiedByUsers, additionalSeats); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, seatsOccupiedByUsers, additionalSeats);
@ -54,7 +54,7 @@ public class PasswordManagerInviteUserValidationTests
var seatsOccupiedByUsers = 4; var seatsOccupiedByUsers = 4;
var additionalSeats = 1; var additionalSeats = 1;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, seatsOccupiedByUsers, additionalSeats); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, seatsOccupiedByUsers, additionalSeats);
@ -73,7 +73,7 @@ public class PasswordManagerInviteUserValidationTests
var additionalSeats = 4; var additionalSeats = 4;
organization.PlanType = PlanType.Free; organization.PlanType = PlanType.Free;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, seatsOccupiedByUsers, additionalSeats); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, seatsOccupiedByUsers, additionalSeats);

View File

@ -21,13 +21,13 @@ public class SecretsManagerInviteUserValidationTests
{ {
organization.UseSecretsManager = false; organization.UseSecretsManager = false;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0);
var request = new InviteUserOrganizationValidationRequest var request = new InviteUserOrganizationValidationRequest
{ {
Invites = [new OrganizationUserInviteDto()], Invites = [new OrganizationUserInviteDto()],
Organization = organizationDto, InviteOrganization = organizationDto,
PerformedBy = Guid.Empty, PerformedBy = Guid.Empty,
PerformedAt = default, PerformedAt = default,
OccupiedPmSeats = 0, OccupiedPmSeats = 0,
@ -48,7 +48,7 @@ public class SecretsManagerInviteUserValidationTests
{ {
organization.UseSecretsManager = false; organization.UseSecretsManager = false;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0);
var invite = OrganizationUserInvite.Create(["email@test.com"], [], OrganizationUserType.User, new Permissions(), string.Empty, true); var invite = OrganizationUserInvite.Create(["email@test.com"], [], OrganizationUserType.User, new Permissions(), string.Empty, true);
@ -56,7 +56,7 @@ public class SecretsManagerInviteUserValidationTests
var request = new InviteUserOrganizationValidationRequest var request = new InviteUserOrganizationValidationRequest
{ {
Invites = [OrganizationUserInviteDto.Create(invite.Emails.First(), invite, organizationDto.OrganizationId)], Invites = [OrganizationUserInviteDto.Create(invite.Emails.First(), invite, organizationDto.OrganizationId)],
Organization = organizationDto, InviteOrganization = organizationDto,
PerformedBy = Guid.Empty, PerformedBy = Guid.Empty,
PerformedAt = default, PerformedAt = default,
OccupiedPmSeats = 0, OccupiedPmSeats = 0,
@ -79,13 +79,13 @@ public class SecretsManagerInviteUserValidationTests
organization.SmSeats = null; organization.SmSeats = null;
organization.UseSecretsManager = true; organization.UseSecretsManager = true;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0);
var request = new InviteUserOrganizationValidationRequest var request = new InviteUserOrganizationValidationRequest
{ {
Invites = [new OrganizationUserInviteDto()], Invites = [new OrganizationUserInviteDto()],
Organization = organizationDto, InviteOrganization = organizationDto,
PerformedBy = Guid.Empty, PerformedBy = Guid.Empty,
PerformedAt = default, PerformedAt = default,
OccupiedPmSeats = 0, OccupiedPmSeats = 0,
@ -109,13 +109,13 @@ public class SecretsManagerInviteUserValidationTests
organization.UseSecretsManager = true; organization.UseSecretsManager = true;
organization.PlanType = PlanType.EnterpriseAnnually; organization.PlanType = PlanType.EnterpriseAnnually;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0);
var request = new InviteUserOrganizationValidationRequest var request = new InviteUserOrganizationValidationRequest
{ {
Invites = [OrganizationUserInviteDto.Create("email@test.com", OrganizationUserInvite.Create(["email@test.com"], [], OrganizationUserType.User, new Permissions(), string.Empty, true), organization.Id)], Invites = [OrganizationUserInviteDto.Create("email@test.com", OrganizationUserInvite.Create(["email@test.com"], [], OrganizationUserType.User, new Permissions(), string.Empty, true), organization.Id)],
Organization = organizationDto, InviteOrganization = organizationDto,
PerformedBy = Guid.Empty, PerformedBy = Guid.Empty,
PerformedAt = default, PerformedAt = default,
OccupiedPmSeats = 0, OccupiedPmSeats = 0,
@ -140,13 +140,13 @@ public class SecretsManagerInviteUserValidationTests
organization.UseSecretsManager = true; organization.UseSecretsManager = true;
organization.PlanType = PlanType.EnterpriseAnnually; organization.PlanType = PlanType.EnterpriseAnnually;
var organizationDto = new OrganizationDto(organization); var organizationDto = new InviteOrganization(organization);
var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0); var subscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0);
var request = new InviteUserOrganizationValidationRequest var request = new InviteUserOrganizationValidationRequest
{ {
Invites = [OrganizationUserInviteDto.Create("email@test.com", OrganizationUserInvite.Create(["email@test.com"], [], OrganizationUserType.User, new Permissions(), string.Empty, true), organization.Id)], Invites = [OrganizationUserInviteDto.Create("email@test.com", OrganizationUserInvite.Create(["email@test.com"], [], OrganizationUserType.User, new Permissions(), string.Empty, true), organization.Id)],
Organization = organizationDto, InviteOrganization = organizationDto,
PerformedBy = Guid.Empty, PerformedBy = Guid.Empty,
PerformedAt = default, PerformedAt = default,
OccupiedPmSeats = 0, OccupiedPmSeats = 0,