mirror of
https://github.com/bitwarden/server.git
synced 2025-04-07 05:58:13 -05:00
First test of new command.
This commit is contained in:
parent
6ec850e384
commit
e10b7cc78f
@ -73,6 +73,11 @@ public class InviteOrganizationUsersCommand(IEventService eventService,
|
||||
.Select(email => OrganizationUserInviteDto.Create(email, invite, request.Organization.OrganizationId))
|
||||
);
|
||||
|
||||
if (invitesToSend.Any() is false)
|
||||
{
|
||||
return new Success<IEnumerable<OrganizationUser>>([]);
|
||||
}
|
||||
|
||||
// Validate we can add those seats
|
||||
var validationResult = await inviteUsersValidation.ValidateAsync(new InviteUserOrganizationValidationRequest
|
||||
{
|
||||
|
@ -50,9 +50,13 @@ public class PasswordManagerSubscriptionUpdate
|
||||
organizationDto.Plan.PasswordManager);
|
||||
}
|
||||
|
||||
public static PasswordManagerSubscriptionUpdate Create(InviteUserOrganizationValidationRequest refined)
|
||||
public static PasswordManagerSubscriptionUpdate Create(InviteUserOrganizationValidationRequest validationRequest)
|
||||
{
|
||||
return new PasswordManagerSubscriptionUpdate(refined.Organization.Seats, refined.Organization.MaxAutoScaleSeats,
|
||||
refined.OccupiedPmSeats, refined.Invites.Length, refined.Organization.Plan.PasswordManager);
|
||||
return new PasswordManagerSubscriptionUpdate(
|
||||
validationRequest.Organization.Seats,
|
||||
validationRequest.Organization.MaxAutoScaleSeats,
|
||||
validationRequest.OccupiedPmSeats,
|
||||
validationRequest.Invites.Length,
|
||||
validationRequest.Organization.Plan.PasswordManager);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models;
|
||||
using Bit.Core.AdminConsole.Models.Business;
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models;
|
||||
using Bit.Core.Models.StaticStore;
|
||||
|
||||
namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Validation.Models;
|
||||
@ -33,6 +34,17 @@ public class SecretsManagerSubscriptionUpdate
|
||||
SecretsManagerPlan = plan;
|
||||
}
|
||||
|
||||
public static SecretsManagerSubscriptionUpdate Create(OrganizationDto organizationDto, int occupiedSeats, int seatsToAdd, int passwordManagerSeatTotal)
|
||||
{
|
||||
return new SecretsManagerSubscriptionUpdate(organizationDto.UseSecretsManager,
|
||||
organizationDto.SmSeats,
|
||||
organizationDto.SmMaxAutoScaleSeats,
|
||||
occupiedSeats,
|
||||
seatsToAdd,
|
||||
passwordManagerSeatTotal,
|
||||
organizationDto.Plan.SecretsManager);
|
||||
}
|
||||
|
||||
public static SecretsManagerSubscriptionUpdate Create(InviteUserOrganizationValidationRequest refined, PasswordManagerSubscriptionUpdate passwordManagerSubscriptionUpdate)
|
||||
{
|
||||
return new SecretsManagerSubscriptionUpdate(refined.Organization.UseSecretsManager,
|
||||
|
@ -0,0 +1,93 @@
|
||||
using System.Net.Mail;
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.AdminConsole.Models.Business;
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers;
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Models;
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Validation;
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers.Validation.Models;
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Enums;
|
||||
using Bit.Core.Models.Commands;
|
||||
using Bit.Core.Models.Data;
|
||||
using Bit.Core.Models.StaticStore;
|
||||
using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface;
|
||||
using Bit.Core.Repositories;
|
||||
using Bit.Core.Services;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using Microsoft.Extensions.Time.Testing;
|
||||
using NSubstitute;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.Core.Test.AdminConsole.OrganizationFeatures.OrganizationUsers.InviteUsers;
|
||||
|
||||
[SutProviderCustomize]
|
||||
public class InviteOrganizationUserCommandTests
|
||||
{
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task InviteScimOrganizationUserAsync_WhenEmailAlreadyExists_ThenNoInviteIsSentAndNoSeatsAreAdjusted(
|
||||
MailAddress address,
|
||||
Organization organization,
|
||||
OrganizationUser user,
|
||||
FakeTimeProvider timeProvider,
|
||||
string externalId,
|
||||
SutProvider<InviteOrganizationUsersCommand> sutProvider)
|
||||
{
|
||||
// Arrange
|
||||
user.Email = address.Address;
|
||||
|
||||
var organizationDto = OrganizationDto.FromOrganization(organization);
|
||||
|
||||
var request = InviteScimOrganizationUserRequest.Create(
|
||||
OrganizationUserSingleEmailInvite.Create(
|
||||
user.Email,
|
||||
[],
|
||||
OrganizationUserType.User,
|
||||
new Permissions(),
|
||||
false),
|
||||
organizationDto,
|
||||
timeProvider.GetUtcNow(),
|
||||
externalId
|
||||
);
|
||||
|
||||
sutProvider.GetDependency<IOrganizationUserRepository>()
|
||||
.SelectKnownEmailsAsync(organization.Id, Arg.Any<IEnumerable<string>>(), false)
|
||||
.Returns([user.Email]);
|
||||
|
||||
var validationRequest = new InviteUserOrganizationValidationRequest
|
||||
{
|
||||
Invites = [],
|
||||
Organization = organizationDto,
|
||||
PerformedBy = Guid.Empty,
|
||||
PerformedAt = request.PerformedAt,
|
||||
OccupiedPmSeats = 0,
|
||||
OccupiedSmSeats = 0,
|
||||
PasswordManagerSubscriptionUpdate = PasswordManagerSubscriptionUpdate.Create(organizationDto, 0, 0),
|
||||
SecretsManagerSubscriptionUpdate = SecretsManagerSubscriptionUpdate.Create(organizationDto, 0, 0, 0)
|
||||
};
|
||||
|
||||
sutProvider.GetDependency<IInviteUsersValidation>()
|
||||
.ValidateAsync(Arg.Any<InviteUserOrganizationValidationRequest>())
|
||||
.Returns(new Valid<InviteUserOrganizationValidationRequest>(validationRequest));
|
||||
|
||||
// Act
|
||||
var result = await sutProvider.Sut.InviteScimOrganizationUserAsync(request);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<Success<OrganizationUser>>(result);
|
||||
|
||||
sutProvider.GetDependency<IPaymentService>()
|
||||
.DidNotReceiveWithAnyArgs()
|
||||
.AdjustSeatsAsync(Arg.Any<Organization>(), Arg.Any<Plan>(), Arg.Any<int>());
|
||||
|
||||
sutProvider.GetDependency<ISendOrganizationInvitesCommand>()
|
||||
.DidNotReceiveWithAnyArgs()
|
||||
.SendInvitesAsync(Arg.Any<SendInvitesRequest>());
|
||||
|
||||
sutProvider.GetDependency<IUpdateSecretsManagerSubscriptionCommand>()
|
||||
.DidNotReceiveWithAnyArgs()
|
||||
.UpdateSubscriptionAsync(Arg.Any<Core.Models.Business.SecretsManagerSubscriptionUpdate>());
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user