artisan('db:seed', ['--class' => 'PlanSeeder']); $admin = User::factory()->create(['is_admin' => true]); $this->actingAs($admin); }); it('creates an admin-granted subscription when a paid tier is chosen', function (): void { $user = User::factory()->create(); Livewire::test(EditUser::class, ['record' => $user->id]) ->fillForm(['tier' => 'basic', 'cadence' => 'monthly']) ->call('save') ->assertHasNoFormErrors(); $subscription = $user->subscriptions()->first(); expect($user->subscriptions()->count())->toBe(1) ->and($subscription->stripe_id)->toStartWith('admin_') ->and($subscription->stripe_status)->toBe('active') ->and(Plan::resolveForUser($user->fresh())->name)->toBe('basic'); }); it('removes any admin-granted subscription when tier is set to free', function (): void { $user = User::factory()->create(); Livewire::test(EditUser::class, ['record' => $user->id]) ->fillForm(['tier' => 'basic', 'cadence' => 'monthly']) ->call('save'); expect($user->subscriptions()->count())->toBe(1); Livewire::test(EditUser::class, ['record' => $user->fresh()->id]) ->fillForm(['tier' => 'free']) ->call('save'); expect($user->subscriptions()->count())->toBe(0) ->and(Plan::resolveForUser($user->fresh())->name)->toBe('free'); }); it('refuses to change tier when the user has a real Stripe subscription', function (): void { $user = User::factory()->create(); $user->subscriptions()->create([ 'type' => 'default', 'stripe_id' => 'sub_real_stripe_id', 'stripe_status' => 'active', 'stripe_price' => 'price_plus_monthly', 'quantity' => 1, ]); Livewire::test(EditUser::class, ['record' => $user->id]) ->fillForm(['tier' => 'pro', 'cadence' => 'monthly']) ->call('save'); $adminCount = $user->subscriptions()->where('stripe_id', 'like', 'admin_%')->count(); expect($adminCount)->toBe(0) ->and($user->subscriptions()->count())->toBe(1); });