From 970e7e314b915114d326bfeb9e45b4143b4769fa Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 14 May 2019 18:53:24 +0200 Subject: [PATCH] Fix for free plan. --- .../Apps/AppHistoryEventsCreator.cs | 10 ++++++++-- .../Apps/Services/IAppPlansProvider.cs | 2 ++ .../Implementations/ConfigAppPlansProvider.cs | 5 +++++ .../Billing/ConfigAppLimitsProviderTests.cs | 20 +++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/Squidex.Domain.Apps.Entities/Apps/AppHistoryEventsCreator.cs b/src/Squidex.Domain.Apps.Entities/Apps/AppHistoryEventsCreator.cs index 6f442a622..d5c0a2539 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/AppHistoryEventsCreator.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/AppHistoryEventsCreator.cs @@ -6,6 +6,7 @@ // ========================================================================== using System.Threading.Tasks; +using Squidex.Domain.Apps.Entities.Apps.Services; using Squidex.Domain.Apps.Entities.History; using Squidex.Domain.Apps.Events.Apps; using Squidex.Infrastructure; @@ -16,9 +17,13 @@ namespace Squidex.Domain.Apps.Entities.Apps { public class AppHistoryEventsCreator : HistoryEventsCreatorBase { - public AppHistoryEventsCreator(TypeNameRegistry typeNameRegistry) + private readonly IAppPlansProvider appPlansProvider; + + public AppHistoryEventsCreator(TypeNameRegistry typeNameRegistry, IAppPlansProvider appPlansProvider) : base(typeNameRegistry) { + Guard.NotNull(appPlansProvider, nameof(appPlansProvider)); + AddEventMessage("AppContributorAssignedEvent", "assigned {user:[Contributor]} as {[Role]}"); @@ -75,6 +80,7 @@ namespace Squidex.Domain.Apps.Entities.Apps AddEventMessage( "updated role {[Name]}"); + this.appPlansProvider = appPlansProvider; } protected Task On(AppContributorRemoved @event) @@ -209,7 +215,7 @@ namespace Squidex.Domain.Apps.Entities.Apps return Task.FromResult( ForEvent(@event, channel) - .AddParameter("Plan", @event.PlanId ?? "free")); + .AddParameter("Plan", @event.PlanId ?? appPlansProvider.GetFreePlan()?.Id ?? "free")); } protected Task On(AppRoleDeleted @event) diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Services/IAppPlansProvider.cs b/src/Squidex.Domain.Apps.Entities/Apps/Services/IAppPlansProvider.cs index 71b046241..cd4fb8b03 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Services/IAppPlansProvider.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Services/IAppPlansProvider.cs @@ -22,5 +22,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services IAppLimitsPlan GetPlanForApp(IAppEntity app); IAppLimitsPlan GetPlan(string planId); + + IAppLimitsPlan GetFreePlan(); } } diff --git a/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppPlansProvider.cs b/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppPlansProvider.cs index 83bd9d196..3da2ae205 100644 --- a/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppPlansProvider.cs +++ b/src/Squidex.Domain.Apps.Entities/Apps/Services/Implementations/ConfigAppPlansProvider.cs @@ -64,6 +64,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services.Implementations return GetPlanCore(planId); } + public IAppLimitsPlan GetFreePlan() + { + return GetPlanCore(plansList.FirstOrDefault(x => string.IsNullOrWhiteSpace(x.Costs))?.Id); + } + public IAppLimitsPlan GetPlanUpgradeForApp(IAppEntity app) { Guard.NotNull(app, nameof(app)); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/ConfigAppLimitsProviderTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/ConfigAppLimitsProviderTests.cs index 899a35c7a..429010e10 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/ConfigAppLimitsProviderTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Billing/ConfigAppLimitsProviderTests.cs @@ -68,6 +68,26 @@ namespace Squidex.Domain.Apps.Entities.Apps.Billing plan.Should().BeEquivalentTo(InfinitePlan); } + [Fact] + public void Should_return_free_plan() + { + var sut = new ConfigAppPlansProvider(Plans); + + var plan = sut.GetFreePlan(); + + plan.Should().BeEquivalentTo(FreePlan); + } + + [Fact] + public void Should_return_infinite_plan_for_free_plan_if_not_found() + { + var sut = new ConfigAppPlansProvider(Enumerable.Empty()); + + var plan = sut.GetFreePlan(); + + plan.Should().NotBeNull(); + } + [Fact] public void Should_return_fitting_app_plan() {