diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/PasswordManager/InviteUsersPasswordManagerValidator.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/PasswordManager/InviteUsersPasswordManagerValidator.cs index cd03735a56f9..56eab7de8e57 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/PasswordManager/InviteUsersPasswordManagerValidator.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/PasswordManager/InviteUsersPasswordManagerValidator.cs @@ -99,7 +99,7 @@ public async Task> ValidateA if (provider is not null) { - var providerValidationResult = InvitingUserOrganizationProviderValidator.Validate(new InviteOrganizationProvider(provider)); + var providerValidationResult = InvitingUserOrganizationProviderValidator.Validate(new InviteOrganizationProvider(provider), request.Seats); if (providerValidationResult is Invalid invalidProviderValidation) { diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/Errors.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/Errors.cs index 759ac1b7807f..3a49222e1262 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/Errors.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/Errors.cs @@ -7,7 +7,10 @@ public record ProviderBillableSeatLimitError(InviteOrganizationProvider InvalidR public const string Code = "Seat limit has been reached. Please contact your provider to add more seats."; } -public record ProviderResellerSeatLimitError(InviteOrganizationProvider InvalidRequest) : Error(Code, InvalidRequest) +public record ProviderResellerSeatLimitError : Error { - public const string Code = "Seat limit has been reached. Contact your provider to purchase additional seats."; + public ProviderResellerSeatLimitError(InviteOrganizationProvider invalidRequest, int? seats) + : base($"Seat limit of {seats} has been reached. Contact your provider to purchase additional seats.", invalidRequest) + { + } } diff --git a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/InvitingUserOrganizationProviderValidator.cs b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/InvitingUserOrganizationProviderValidator.cs index eeb19eec98d4..2bac233fe1fe 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/InvitingUserOrganizationProviderValidator.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/OrganizationUsers/InviteUsers/Validation/Provider/InvitingUserOrganizationProviderValidator.cs @@ -6,7 +6,7 @@ namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUse public static class InvitingUserOrganizationProviderValidator { - public static ValidationResult Validate(InviteOrganizationProvider inviteOrganizationProvider) + public static ValidationResult Validate(InviteOrganizationProvider inviteOrganizationProvider, int? seats) { if (inviteOrganizationProvider is not { Enabled: true }) { @@ -20,7 +20,7 @@ public static ValidationResult Validate(InviteOrgani if (inviteOrganizationProvider.Type == ProviderType.Reseller) { - return new Invalid(new ProviderResellerSeatLimitError(inviteOrganizationProvider)); + return new Invalid(new ProviderResellerSeatLimitError(inviteOrganizationProvider, seats)); } return new Valid(inviteOrganizationProvider); diff --git a/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs b/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs index 9df532deb440..1fc1e4957c67 100644 --- a/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs +++ b/src/Core/AdminConsole/Services/Implementations/OrganizationService.cs @@ -733,7 +733,7 @@ await _sendOrganizationInvitesCommand.SendInvitesAsync(new SendInvitesRequest( if (provider.Type == ProviderType.Reseller) { - return (false, "Seat limit has been reached. Contact your provider to purchase additional seats."); + return (false, $"Seat limit of {organization.Seats} has been reached. Contact your provider to purchase additional seats."); } } diff --git a/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs b/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs index fba575d3bdd5..6632713224d7 100644 --- a/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs +++ b/test/Core.Test/AdminConsole/Services/OrganizationServiceTests.cs @@ -829,7 +829,7 @@ public async Task CanScaleAsync_FailsOnResellerManagedOrganization( var (result, failureMessage) = await sutProvider.Sut.CanScaleAsync(organization, 10); Assert.False(result); - Assert.Contains("Seat limit has been reached. Contact your provider to purchase additional seats.", failureMessage); + Assert.Contains($"Seat limit of {organization.Seats} has been reached. Contact your provider to purchase additional seats.", failureMessage); }