Browse Source

Fix plan reset

pull/470/head
Sebastian 7 years ago
parent
commit
8d4d25ea90
  1. 9
      backend/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs
  2. 58
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs

9
backend/src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs

@ -276,7 +276,14 @@ namespace Squidex.Domain.Apps.Entities.Apps
if (c.FromCallback) if (c.FromCallback)
{ {
ChangePlan(c); if (string.Equals(appPlansProvider.GetFreePlan()?.Id, c.PlanId))
{
ResetPlan(c);
}
else
{
ChangePlan(c);
}
return null; return null;
} }

58
backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs

@ -59,8 +59,14 @@ namespace Squidex.Domain.Apps.Entities.Apps
A.CallTo(() => userResolver.FindByIdOrEmailAsync(contributorId)) A.CallTo(() => userResolver.FindByIdOrEmailAsync(contributorId))
.Returns(user); .Returns(user);
A.CallTo(() => appPlansProvider.GetPlan(A<string>.Ignored)) A.CallTo(() => appPlansProvider.GetFreePlan())
.Returns(new ConfigAppLimitsPlan { MaxContributors = 10 }); .Returns(new ConfigAppLimitsPlan { Id = planIdFree, MaxContributors = 10 });
A.CallTo(() => appPlansProvider.GetPlan(planIdFree))
.Returns(new ConfigAppLimitsPlan { Id = planIdFree, MaxContributors = 10 });
A.CallTo(() => appPlansProvider.GetPlan(planIdPaid))
.Returns(new ConfigAppLimitsPlan { Id = planIdPaid, MaxContributors = 30 });
initialPatterns = new InitialPatterns initialPatterns = new InitialPatterns
{ {
@ -182,6 +188,54 @@ namespace Squidex.Domain.Apps.Entities.Apps
); );
} }
[Fact]
public async Task ChangePlan_from_callback_should_create_events_and_update_state()
{
var command = new ChangePlan { PlanId = planIdPaid, FromCallback = true };
await ExecuteCreateAsync();
var result = await PublishIdempotentAsync(command);
result.ShouldBeEquivalent2(new EntitySavedResult(4));
Assert.Equal(planIdPaid, sut.Snapshot.Plan!.PlanId);
LastEvents
.ShouldHaveSameEvents(
CreateEvent(new AppPlanChanged { PlanId = planIdPaid })
);
A.CallTo(() => appPlansBillingManager.ChangePlanAsync(A<string>.Ignored, A<NamedId<Guid>>.Ignored, A<string?>.Ignored))
.MustNotHaveHappened();
}
[Fact]
public async Task ChangePlan_from_callback_should_reset_plan_for_free_plan()
{
var command = new ChangePlan { PlanId = planIdFree, FromCallback = true };
A.CallTo(() => appPlansBillingManager.ChangePlanAsync(Actor.Identifier, AppNamedId, planIdPaid))
.Returns(new PlanChangedResult());
await ExecuteCreateAsync();
await ExecuteChangePlanAsync();
var result = await PublishIdempotentAsync(command);
result.ShouldBeEquivalent2(new EntitySavedResult(5));
Assert.Null(sut.Snapshot.Plan);
LastEvents
.ShouldHaveSameEvents(
CreateEvent(new AppPlanReset())
);
A.CallTo(() => appPlansBillingManager.ChangePlanAsync(A<string>.Ignored, A<NamedId<Guid>>.Ignored, planIdFree))
.MustNotHaveHappened();
}
[Fact] [Fact]
public async Task ChangePlan_should_reset_plan_for_reset_plan() public async Task ChangePlan_should_reset_plan_for_reset_plan()
{ {

Loading…
Cancel
Save