From 68b610bc15507498a385a154100e3710e6ca7156 Mon Sep 17 00:00:00 2001 From: Favour Olayinka Date: Wed, 29 May 2024 11:03:41 +0100 Subject: [PATCH] remove branding for subscribed users (#424) * removebrandingfor subscribed users * backend changes, test * fix test name * fix disable branding * Fix linting --------- Co-authored-by: Julien Nahum --- app/Events/SubscriptionCreated.php | 26 ++++++++++++++ app/Listeners/HandleSubscriptionCreated.php | 26 ++++++++++++++ app/Models/Billing/Subscription.php | 5 +++ app/Providers/EventServiceProvider.php | 5 +++ client/pages/forms/[slug]/edit.vue | 1 + client/pages/forms/create/index.vue | 2 +- .../Forms/HideBrandingOnUpgradeTest.php | 35 +++++++++++++++++++ 7 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 app/Events/SubscriptionCreated.php create mode 100644 app/Listeners/HandleSubscriptionCreated.php create mode 100644 tests/Feature/Forms/HideBrandingOnUpgradeTest.php diff --git a/app/Events/SubscriptionCreated.php b/app/Events/SubscriptionCreated.php new file mode 100644 index 00000000..683b83ad --- /dev/null +++ b/app/Events/SubscriptionCreated.php @@ -0,0 +1,26 @@ +subscription->user; + + // Remove branding + $user->workspaces()->with('forms')->get()->each(function ($workspace) { + $workspace->forms()->update(['no_branding' => true]); + }); + + } +} diff --git a/app/Models/Billing/Subscription.php b/app/Models/Billing/Subscription.php index e20d6133..8ef80e0b 100644 --- a/app/Models/Billing/Subscription.php +++ b/app/Models/Billing/Subscription.php @@ -2,6 +2,7 @@ namespace App\Models\Billing; +use App\Events\SubscriptionCreated; use Illuminate\Database\Eloquent\Factories\HasFactory; use Laravel\Cashier\Subscription as CashierSubscription; @@ -9,6 +10,10 @@ class Subscription extends CashierSubscription { use HasFactory; + protected $dispatchesEvents = [ + 'created' => SubscriptionCreated::class, + ]; + public static function booted(): void { static::saved(function (Subscription $sub) { diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index a894023c..ab6ba28d 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -5,9 +5,11 @@ namespace App\Providers; use App\Events\Forms\FormSubmitted; use App\Events\Models\FormCreated; use App\Events\Models\FormIntegrationsEventCreated; +use App\Events\SubscriptionCreated; use App\Listeners\Forms\FormCreationConfirmation; use App\Listeners\Forms\FormIntegrationsEventListener; use App\Listeners\Forms\NotifyFormSubmission; +use App\Listeners\HandleSubscriptionCreated; use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; @@ -32,6 +34,9 @@ class EventServiceProvider extends ServiceProvider FormIntegrationsEventCreated::class => [ FormIntegrationsEventListener::class, ], + SubscriptionCreated::class => [ + HandleSubscriptionCreated::class + ], ]; /** diff --git a/client/pages/forms/[slug]/edit.vue b/client/pages/forms/[slug]/edit.vue index 9b9a443a..09a2a997 100644 --- a/client/pages/forms/[slug]/edit.vue +++ b/client/pages/forms/[slug]/edit.vue @@ -69,6 +69,7 @@ function initUpdatedForm() { watch(form, (form) => { if (form?.value) { initUpdatedForm() + } }) diff --git a/client/pages/forms/create/index.vue b/client/pages/forms/create/index.vue index bc35e428..9979b720 100644 --- a/client/pages/forms/create/index.vue +++ b/client/pages/forms/create/index.vue @@ -99,7 +99,7 @@ onMounted(() => { formStore.loadAll(workspace.value.id) } - form.value = initForm({ workspace_id: workspace.value?.id }, true) + form.value = initForm({ workspace_id: workspace.value?.id, no_branding: workspace.value?.is_pro }, true) formInitialHash.value = hash(JSON.stringify(form.value.data())) if (route.query.template !== undefined && route.query.template) { const template = templatesStore.getByKey(route.query.template) diff --git a/tests/Feature/Forms/HideBrandingOnUpgradeTest.php b/tests/Feature/Forms/HideBrandingOnUpgradeTest.php new file mode 100644 index 00000000..62b459f5 --- /dev/null +++ b/tests/Feature/Forms/HideBrandingOnUpgradeTest.php @@ -0,0 +1,35 @@ +actingAsUser(); + // Create workspaces and forms + for ($i = 0; $i < 3; $i++) { + $workspace = $this->createUserWorkspace($user); + for ($j = 0; $j < 3; $j++) { + $this->createForm($user, $workspace); + } + } + + // Forms don't have branding removed when created + $forms = $user->workspaces()->with('forms')->get()->pluck('forms')->flatten(); + $forms->each(function ($form) { + $this->assertEquals($form->no_branding, false); + }); + + // User subscribes + $user->subscriptions()->create([ + 'name' => 'default', + 'stripe_id' => Str::random(), + 'stripe_status' => 'active', + 'stripe_price' => Str::random(), + 'quantity' => 1, + ]); + + // Forms have branding removed after subscription + $forms = $user->workspaces()->with('forms')->get()->pluck('forms')->flatten(); + $forms->each(function ($form) { + $this->assertEquals($form->no_branding, true); + }); +});