test: add multi-cycle checkout tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
59
website/tests/Feature/MultiCycleCheckoutTest.php
Normal file
59
website/tests/Feature/MultiCycleCheckoutTest.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Models\Plan;
|
||||
use App\Models\PlanPrice;
|
||||
use App\Models\User;
|
||||
|
||||
beforeEach(function () {
|
||||
$this->plan = Plan::factory()->create([
|
||||
'slug' => 'vps-test',
|
||||
'service_type' => 'vps',
|
||||
'price' => 15.00,
|
||||
'status' => 'active',
|
||||
'features' => ['cpu' => '2 vCPU', 'ram' => '4 GB'],
|
||||
]);
|
||||
|
||||
PlanPrice::create(['plan_id' => $this->plan->id, 'billing_cycle' => 'monthly', 'price' => 15.00]);
|
||||
PlanPrice::create(['plan_id' => $this->plan->id, 'billing_cycle' => 'quarterly', 'price' => 42.75]);
|
||||
PlanPrice::create(['plan_id' => $this->plan->id, 'billing_cycle' => 'semi_annual', 'price' => 81.00]);
|
||||
PlanPrice::create(['plan_id' => $this->plan->id, 'billing_cycle' => 'annual', 'price' => 153.00]);
|
||||
});
|
||||
|
||||
it('loads checkout page with plan prices', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
$response = $this->actingAs($user)
|
||||
->get("http://account.ezscale.dev/checkout/{$this->plan->id}");
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertInertia(fn ($page) => $page
|
||||
->component('Checkout/Show')
|
||||
->has('plan.prices', 4)
|
||||
);
|
||||
});
|
||||
|
||||
it('validates billing_cycle on checkout', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
$response = $this->actingAs($user)
|
||||
->post("http://account.ezscale.dev/checkout/{$this->plan->id}", [
|
||||
'gateway' => 'stripe',
|
||||
'billing_cycle' => 'weekly',
|
||||
]);
|
||||
|
||||
$response->assertSessionHasErrors('billing_cycle');
|
||||
});
|
||||
|
||||
it('accepts valid billing cycles', function (string $cycle) {
|
||||
$user = User::factory()->create();
|
||||
|
||||
$response = $this->actingAs($user)
|
||||
->post("http://account.ezscale.dev/checkout/{$this->plan->id}", [
|
||||
'gateway' => 'stripe',
|
||||
'billing_cycle' => $cycle,
|
||||
]);
|
||||
|
||||
$response->assertSessionDoesntHaveErrors('billing_cycle');
|
||||
})->with(['monthly', 'quarterly', 'semi_annual', 'annual']);
|
||||
Reference in New Issue
Block a user