Browse Source

Reset plan.

pull/361/head
Sebastian Stehle 7 years ago
parent
commit
eae9a5d579
  1. 5
      src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs
  2. 2
      src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppLimitsPlan.cs
  3. 2
      src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/NoopAppPlanBillingManager.cs
  4. 2
      src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangedResult.cs
  5. 13
      src/Squidex.Domain.Apps.Entities/Apps/Services/PlanResetResult.cs
  6. 31
      tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs
  7. 17
      tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppTests.cs

5
src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs

@ -198,6 +198,11 @@ namespace Squidex.Domain.Apps.Entities.Apps
if (result is PlanChangedResult) if (result is PlanChangedResult)
{ {
if (result is PlanResetResult)
{
c.PlanId = null;
}
ChangePlan(c); ChangePlan(c);
} }

2
src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppLimitsPlan.cs

@ -19,6 +19,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services.Implementations
public string YearlyId { get; set; } public string YearlyId { get; set; }
public bool ShouldReset { get; set; }
public long MaxApiCalls { get; set; } public long MaxApiCalls { get; set; }
public long MaxAssetSize { get; set; } public long MaxAssetSize { get; set; }

2
src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/NoopAppPlanBillingManager.cs

@ -19,7 +19,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services.Implementations
public Task<IChangePlanResult> ChangePlanAsync(string userId, Guid appId, string appName, string planId) public Task<IChangePlanResult> ChangePlanAsync(string userId, Guid appId, string appName, string planId)
{ {
return Task.FromResult<IChangePlanResult>(new PlanChangedResult()); return Task.FromResult<IChangePlanResult>(new PlanResetResult());
} }
public Task<string> GetPortalLinkAsync(string userId) public Task<string> GetPortalLinkAsync(string userId)

2
src/Squidex.Domain.Apps.Entities/Apps/Services/PlanChangedResult.cs

@ -7,7 +7,7 @@
namespace Squidex.Domain.Apps.Entities.Apps.Services namespace Squidex.Domain.Apps.Entities.Apps.Services
{ {
public sealed class PlanChangedResult : IChangePlanResult public class PlanChangedResult : IChangePlanResult
{ {
} }
} }

13
src/Squidex.Domain.Apps.Entities/Apps/Services/PlanResetResult.cs

@ -0,0 +1,13 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
namespace Squidex.Domain.Apps.Entities.Apps.Services
{
public class PlanResetResult : PlanChangedResult
{
}
}

31
tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs

@ -98,9 +98,6 @@ namespace Squidex.Domain.Apps.Entities.Apps
{ {
var command = new ChangePlan { PlanId = planId }; var command = new ChangePlan { PlanId = planId };
A.CallTo(() => appPlansProvider.IsConfiguredPlan(planId))
.Returns(true);
A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId)) A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId))
.Returns(new PlanChangedResult()); .Returns(new PlanChangedResult());
@ -119,12 +116,31 @@ namespace Squidex.Domain.Apps.Entities.Apps
} }
[Fact] [Fact]
public async Task ChangePlan_should_not_make_update_for_redirect_result() public async Task ChangePlan_should_reset_plan_for_reset_plan()
{ {
var command = new ChangePlan { PlanId = planId }; var command = new ChangePlan { PlanId = planId };
A.CallTo(() => appPlansProvider.IsConfiguredPlan(planId)) A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId))
.Returns(true); .Returns(new PlanResetResult());
await ExecuteCreateAsync();
var result = await sut.ExecuteAsync(CreateCommand(command));
Assert.True(result.Value is PlanResetResult);
Assert.Null(sut.Snapshot.Plan);
LastEvents
.ShouldHaveSameEvents(
CreateEvent(new AppPlanChanged { PlanId = null })
);
}
[Fact]
public async Task ChangePlan_should_not_make_update_for_redirect_result()
{
var command = new ChangePlan { PlanId = planId };
A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId)) A.CallTo(() => appPlansBillingManager.ChangePlanAsync(User.Identifier, AppId, AppName, planId))
.Returns(new RedirectToCheckoutResult(new Uri("http://squidex.io"))); .Returns(new RedirectToCheckoutResult(new Uri("http://squidex.io")));
@ -143,9 +159,6 @@ namespace Squidex.Domain.Apps.Entities.Apps
{ {
var command = new ChangePlan { PlanId = planId, FromCallback = true }; var command = new ChangePlan { PlanId = planId, FromCallback = true };
A.CallTo(() => appPlansProvider.IsConfiguredPlan(planId))
.Returns(true);
await ExecuteCreateAsync(); await ExecuteCreateAsync();
var result = await sut.ExecuteAsync(CreateCommand(command)); var result = await sut.ExecuteAsync(CreateCommand(command));

17
tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppTests.cs

@ -20,6 +20,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
{ {
private readonly IUserResolver users = A.Fake<IUserResolver>(); private readonly IUserResolver users = A.Fake<IUserResolver>();
private readonly IAppPlansProvider appPlans = A.Fake<IAppPlansProvider>(); private readonly IAppPlansProvider appPlans = A.Fake<IAppPlansProvider>();
private readonly IAppLimitsPlan basicPlan = A.Fake<IAppLimitsPlan>();
private readonly IAppLimitsPlan freePlan = A.Fake<IAppLimitsPlan>();
public GuardAppTests() public GuardAppTests()
{ {
@ -29,8 +31,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
A.CallTo(() => appPlans.GetPlan("notfound")) A.CallTo(() => appPlans.GetPlan("notfound"))
.Returns(null); .Returns(null);
A.CallTo(() => appPlans.GetPlan("basic"))
.Returns(basicPlan);
A.CallTo(() => appPlans.GetPlan("free")) A.CallTo(() => appPlans.GetPlan("free"))
.Returns(A.Dummy<IAppLimitsPlan>()); .Returns(freePlan);
} }
[Fact] [Fact]
@ -75,7 +80,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
[Fact] [Fact]
public void CanChangePlan_should_throw_exception_if_plan_was_configured_from_another_user() public void CanChangePlan_should_throw_exception_if_plan_was_configured_from_another_user()
{ {
var command = new ChangePlan { PlanId = "free", Actor = new RefToken("user", "me") }; var command = new ChangePlan { PlanId = "basic", Actor = new RefToken("user", "me") };
var plan = new AppPlan(new RefToken("user", "other"), "premium"); var plan = new AppPlan(new RefToken("user", "other"), "premium");
@ -86,9 +91,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
[Fact] [Fact]
public void CanChangePlan_should_throw_exception_if_plan_is_the_same() public void CanChangePlan_should_throw_exception_if_plan_is_the_same()
{ {
var command = new ChangePlan { PlanId = "free", Actor = new RefToken("user", "me") }; var command = new ChangePlan { PlanId = "basic", Actor = new RefToken("user", "me") };
var plan = new AppPlan(new RefToken("user", "me"), "free"); var plan = new AppPlan(command.Actor, "basic");
ValidationAssert.Throws(() => GuardApp.CanChangePlan(command, plan, appPlans), ValidationAssert.Throws(() => GuardApp.CanChangePlan(command, plan, appPlans),
new ValidationError("App has already this plan.")); new ValidationError("App has already this plan."));
@ -97,9 +102,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
[Fact] [Fact]
public void CanChangePlan_should_not_throw_exception_if_same_user_but_other_plan() public void CanChangePlan_should_not_throw_exception_if_same_user_but_other_plan()
{ {
var command = new ChangePlan { PlanId = "free", Actor = new RefToken("user", "me") }; var command = new ChangePlan { PlanId = "basic", Actor = new RefToken("user", "me") };
var plan = new AppPlan(new RefToken("user", "me"), "premium"); var plan = new AppPlan(command.Actor, "premium");
GuardApp.CanChangePlan(command, plan, appPlans); GuardApp.CanChangePlan(command, plan, appPlans);
} }

Loading…
Cancel
Save