diff --git a/app/Http/Controllers/App/OnboardingController.php b/app/Http/Controllers/App/OnboardingController.php index 80475a77..e78a502f 100644 --- a/app/Http/Controllers/App/OnboardingController.php +++ b/app/Http/Controllers/App/OnboardingController.php @@ -150,9 +150,15 @@ public function connect(Request $request): Response|RedirectResponse 'network' => $platform->network(), ])->values(); + $plan = Plan::where('slug', Slug::Workspace)->firstOrFail(); + return Inertia::render('onboarding/Connect', [ 'platforms' => $platforms, 'accounts' => SocialAccountResource::collection($accounts)->resolve(), + 'plan' => [ + 'name' => $plan->name, + 'interval' => 'monthly', + ], ]); } diff --git a/resources/js/pages/onboarding/Connect.vue b/resources/js/pages/onboarding/Connect.vue index 4b9e914a..80ae728a 100644 --- a/resources/js/pages/onboarding/Connect.vue +++ b/resources/js/pages/onboarding/Connect.vue @@ -9,14 +9,18 @@ import NetworkConnectGrid, { type ConnectedAccount, } from '@/components/accounts/NetworkConnectGrid.vue'; import { Button } from '@/components/ui/button'; +import { useTracking } from '@/composables/useTracking'; const props = defineProps<{ platforms: AvailablePlatform[]; accounts: ConnectedAccount[]; + plan: { name: string; interval: string }; }>(); const form = useForm({}); +const { trackBeginCheckout } = useTracking(); + const hasConnected = computed((): boolean => props.accounts.length > 0); const submit = (): void => { @@ -24,6 +28,8 @@ const submit = (): void => { return; } + trackBeginCheckout({ name: props.plan.name, interval: props.plan.interval }); + form.post(checkout.url()); }; diff --git a/tests/Feature/Onboarding/OnboardingControllerTest.php b/tests/Feature/Onboarding/OnboardingControllerTest.php index 5f25e6aa..21c00f74 100644 --- a/tests/Feature/Onboarding/OnboardingControllerTest.php +++ b/tests/Feature/Onboarding/OnboardingControllerTest.php @@ -263,6 +263,22 @@ function subscribeOnboardingAccount(Account $account): void ); }); +test('connect passes the workspace plan so the client can fire begin_checkout', function () { + $this->user->update(['persona' => Persona::Agency->value, 'goals' => [Goal::SaveTime->value]]); + onboardingWorkspace($this->user); + + $plan = Plan::where('slug', Slug::Workspace)->firstOrFail(); + + $response = $this->actingAs($this->user->fresh())->get(route('app.onboarding.connect')); + + $response->assertOk(); + $response->assertInertia(fn ($page) => $page + ->component('onboarding/Connect') + ->where('plan.name', $plan->name) + ->where('plan.interval', 'monthly') + ); +}); + test('connect offers a single linkedin card and no standalone linkedin page card', function () { $this->user->update(['persona' => Persona::Agency->value, 'goals' => [Goal::SaveTime->value]]); onboardingWorkspace($this->user);