mirror of
https://github.com/bitwarden/server
synced 2025-12-28 06:03:29 +00:00
[AC-1488] Changed SM Signup and Upgrade paths to set SmServiceAccounts to include the plan BaseServiceAccount (#3086)
This commit is contained in:
@@ -372,13 +372,19 @@ public class UpdateSecretsManagerSubscriptionCommandTests
|
||||
Guid organizationId,
|
||||
SutProvider<UpdateSecretsManagerSubscriptionCommand> sutProvider)
|
||||
{
|
||||
const int organizationServiceAccounts = 200;
|
||||
const int seatAdjustment = 5;
|
||||
const int maxAutoscaleSeats = 15;
|
||||
const int serviceAccountAdjustment = 100;
|
||||
const int maxAutoScaleServiceAccounts = 300;
|
||||
|
||||
var organization = new Organization
|
||||
{
|
||||
Id = organizationId,
|
||||
UseSecretsManager = true,
|
||||
SmSeats = 10,
|
||||
SmServiceAccounts = 200,
|
||||
MaxAutoscaleSmSeats = 20,
|
||||
SmServiceAccounts = organizationServiceAccounts,
|
||||
MaxAutoscaleSmServiceAccounts = 350,
|
||||
PlanType = planType,
|
||||
GatewayCustomerId = "1",
|
||||
@@ -389,28 +395,23 @@ public class UpdateSecretsManagerSubscriptionCommandTests
|
||||
var organizationUpdate = new SecretsManagerSubscriptionUpdate
|
||||
{
|
||||
OrganizationId = organizationId,
|
||||
MaxAutoscaleSmSeats = 15,
|
||||
SmSeatsAdjustment = 5,
|
||||
MaxAutoscaleSmServiceAccounts = 300,
|
||||
SmServiceAccountsAdjustment = 100,
|
||||
SmSeats = organization.SmSeats.GetValueOrDefault() + 5,
|
||||
SmSeatsExcludingBase = (organization.SmSeats.GetValueOrDefault() + 5) - plan.BaseSeats,
|
||||
SmServiceAccounts = organization.SmServiceAccounts.GetValueOrDefault() + 100,
|
||||
SmServiceAccountsExcludingBase = (organization.SmServiceAccounts.GetValueOrDefault() + 100) - (int)plan.BaseServiceAccount,
|
||||
MaxAutoscaleSmSeatsChanged = 15 != organization.MaxAutoscaleSeats.GetValueOrDefault(),
|
||||
SmSeatsAdjustment = seatAdjustment,
|
||||
SmSeats = organization.SmSeats.GetValueOrDefault() + seatAdjustment,
|
||||
SmSeatsExcludingBase = (organization.SmSeats.GetValueOrDefault() + seatAdjustment) - plan.BaseSeats,
|
||||
MaxAutoscaleSmSeats = maxAutoscaleSeats,
|
||||
|
||||
SmServiceAccountsAdjustment = serviceAccountAdjustment,
|
||||
SmServiceAccounts = organization.SmServiceAccounts.GetValueOrDefault() + serviceAccountAdjustment,
|
||||
SmServiceAccountsExcludingBase = (organization.SmServiceAccounts.GetValueOrDefault() + serviceAccountAdjustment) - (int)plan.BaseServiceAccount,
|
||||
MaxAutoscaleSmServiceAccounts = maxAutoScaleServiceAccounts,
|
||||
|
||||
MaxAutoscaleSmSeatsChanged = maxAutoscaleSeats != organization.MaxAutoscaleSeats.GetValueOrDefault(),
|
||||
MaxAutoscaleSmServiceAccountsChanged = 200 != organization.MaxAutoscaleSmServiceAccounts.GetValueOrDefault()
|
||||
};
|
||||
|
||||
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId).Returns(organization);
|
||||
|
||||
await sutProvider.Sut.UpdateSecretsManagerSubscription(organizationUpdate);
|
||||
if (organizationUpdate.SmServiceAccountsAdjustment != 0)
|
||||
{
|
||||
await sutProvider.GetDependency<IPaymentService>().Received(1)
|
||||
.AdjustSeatsAsync(organization, plan, organizationUpdate.SmSeatsExcludingBase);
|
||||
|
||||
// TODO: call ReferenceEventService - see AC-1481
|
||||
}
|
||||
|
||||
if (organizationUpdate.SmSeatsAdjustment != 0)
|
||||
{
|
||||
@@ -418,19 +419,21 @@ public class UpdateSecretsManagerSubscriptionCommandTests
|
||||
.AdjustServiceAccountsAsync(organization, plan, organizationUpdate.SmServiceAccountsExcludingBase);
|
||||
|
||||
// TODO: call ReferenceEventService - see AC-1481
|
||||
}
|
||||
|
||||
if (organizationUpdate.SmSeatsAdjustment != 0)
|
||||
{
|
||||
await sutProvider.GetDependency<IOrganizationService>().Received(1).ReplaceAndUpdateCacheAsync(
|
||||
Arg.Is<Organization>(org => org.SmSeats == organizationUpdate.SmSeats));
|
||||
}
|
||||
|
||||
if (organizationUpdate.SmServiceAccountsAdjustment != 0)
|
||||
{
|
||||
await sutProvider.GetDependency<IPaymentService>().Received(1)
|
||||
.AdjustSeatsAsync(organization, plan, organizationUpdate.SmSeatsExcludingBase);
|
||||
|
||||
// TODO: call ReferenceEventService - see AC-1481
|
||||
|
||||
await sutProvider.GetDependency<IOrganizationService>().Received(1).ReplaceAndUpdateCacheAsync(
|
||||
Arg.Is<Organization>(org =>
|
||||
org.SmServiceAccounts == organizationUpdate.SmServiceAccounts));
|
||||
org.SmServiceAccounts == (organizationServiceAccounts + organizationUpdate.SmServiceAccountsAdjustment)));
|
||||
}
|
||||
|
||||
if (organizationUpdate.MaxAutoscaleSmSeats != organization.MaxAutoscaleSmSeats)
|
||||
|
||||
@@ -5,6 +5,7 @@ using Bit.Core.OrganizationFeatures.OrganizationSubscriptions;
|
||||
using Bit.Core.Repositories;
|
||||
using Bit.Core.Services;
|
||||
using Bit.Core.Test.AutoFixture.OrganizationFixtures;
|
||||
using Bit.Core.Utilities;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using NSubstitute;
|
||||
@@ -96,16 +97,33 @@ public class UpgradeOrganizationPlanCommandTests
|
||||
await sutProvider.GetDependency<IOrganizationService>().Received(1).ReplaceAndUpdateCacheAsync(organization);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[FreeOrganizationUpgradeCustomize, BitAutoData]
|
||||
public async Task UpgradePlan_SM_Passes(Organization organization, OrganizationUpgrade upgrade,
|
||||
[Theory, FreeOrganizationUpgradeCustomize]
|
||||
[BitAutoData(PlanType.EnterpriseMonthly)]
|
||||
[BitAutoData(PlanType.EnterpriseAnnually)]
|
||||
[BitAutoData(PlanType.TeamsMonthly)]
|
||||
[BitAutoData(PlanType.TeamsAnnually)]
|
||||
public async Task UpgradePlan_SM_Passes(PlanType planType, Organization organization, OrganizationUpgrade upgrade,
|
||||
SutProvider<UpgradeOrganizationPlanCommand> sutProvider)
|
||||
{
|
||||
upgrade.Plan = planType;
|
||||
|
||||
var passwordManagerPlan = StaticStore.GetPasswordManagerPlan(upgrade.Plan);
|
||||
var secretsManagerPlan = StaticStore.GetSecretsManagerPlan(upgrade.Plan);
|
||||
|
||||
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organization.Id).Returns(organization);
|
||||
|
||||
upgrade.AdditionalSeats = 15;
|
||||
upgrade.AdditionalSmSeats = 10;
|
||||
upgrade.AdditionalSeats = 10;
|
||||
upgrade.AdditionalServiceAccounts = 20;
|
||||
|
||||
var result = await sutProvider.Sut.UpgradePlanAsync(organization.Id, upgrade);
|
||||
await sutProvider.GetDependency<IOrganizationService>().Received(1).ReplaceAndUpdateCacheAsync(organization);
|
||||
|
||||
await sutProvider.GetDependency<IOrganizationService>().Received(1).ReplaceAndUpdateCacheAsync(
|
||||
Arg.Is<Organization>(o =>
|
||||
o.Seats == passwordManagerPlan.BaseSeats + upgrade.AdditionalSeats
|
||||
&& o.SmSeats == secretsManagerPlan.BaseSeats + upgrade.AdditionalSmSeats
|
||||
&& o.SmServiceAccounts == secretsManagerPlan.BaseServiceAccount + upgrade.AdditionalServiceAccounts));
|
||||
|
||||
Assert.True(result.Item1);
|
||||
Assert.NotNull(result.Item2);
|
||||
}
|
||||
|
||||
@@ -147,13 +147,21 @@ public class OrganizationServiceTests
|
||||
|
||||
|
||||
[Theory]
|
||||
[BitAutoData]
|
||||
public async Task SignUp_SM_Passes(OrganizationSignup signup, SutProvider<OrganizationService> sutProvider)
|
||||
[BitAutoData(PlanType.EnterpriseAnnually)]
|
||||
[BitAutoData(PlanType.EnterpriseMonthly)]
|
||||
[BitAutoData(PlanType.TeamsAnnually)]
|
||||
[BitAutoData(PlanType.TeamsMonthly)]
|
||||
public async Task SignUp_SM_Passes(PlanType planType, OrganizationSignup signup, SutProvider<OrganizationService> sutProvider)
|
||||
{
|
||||
signup.AdditionalSmSeats = 10;
|
||||
signup.AdditionalSeats = 10;
|
||||
signup.Plan = PlanType.EnterpriseAnnually;
|
||||
signup.Plan = planType;
|
||||
|
||||
var passwordManagerPlan = StaticStore.GetPasswordManagerPlan(signup.Plan);
|
||||
var secretsManagerPlan = StaticStore.GetSecretsManagerPlan(signup.Plan);
|
||||
|
||||
signup.UseSecretsManager = true;
|
||||
signup.AdditionalSeats = 15;
|
||||
signup.AdditionalSmSeats = 10;
|
||||
signup.AdditionalServiceAccounts = 20;
|
||||
signup.PaymentMethodType = PaymentMethodType.Card;
|
||||
signup.PremiumAccessAddon = false;
|
||||
|
||||
@@ -161,6 +169,12 @@ public class OrganizationServiceTests
|
||||
|
||||
var result = await sutProvider.Sut.SignUpAsync(signup);
|
||||
|
||||
await sutProvider.GetDependency<IOrganizationRepository>().Received(1).CreateAsync(
|
||||
Arg.Is<Organization>(o =>
|
||||
o.Seats == passwordManagerPlan.BaseSeats + signup.AdditionalSeats
|
||||
&& o.SmSeats == secretsManagerPlan.BaseSeats + signup.AdditionalSmSeats
|
||||
&& o.SmServiceAccounts == secretsManagerPlan.BaseServiceAccount + signup.AdditionalServiceAccounts));
|
||||
|
||||
await sutProvider.GetDependency<IReferenceEventService>().Received(1)
|
||||
.RaiseEventAsync(Arg.Is<ReferenceEvent>(referenceEvent =>
|
||||
referenceEvent.Type == ReferenceEventType.Signup &&
|
||||
|
||||
Reference in New Issue
Block a user