Files
fotospiel-app/tests/Feature/Tenant/TenantLemonSqueezyCheckoutTest.php
Codex Agent 10c99de1e2
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled
Migrate billing from Paddle to Lemon Squeezy
2026-02-03 10:59:54 +01:00

71 lines
2.3 KiB
PHP

<?php
namespace Tests\Feature\Tenant;
use App\Models\Package;
use App\Services\LemonSqueezy\LemonSqueezyCheckoutService;
use Mockery;
class TenantLemonSqueezyCheckoutTest extends TenantTestCase
{
protected function tearDown(): void
{
Mockery::close();
parent::tearDown();
}
public function test_tenant_can_create_lemonsqueezy_checkout(): void
{
$package = Package::factory()->create([
'lemonsqueezy_variant_id' => 'pri_test_123',
'price' => 129,
]);
$checkoutService = Mockery::mock(LemonSqueezyCheckoutService::class);
$checkoutService->shouldReceive('createCheckout')
->once()
->withArgs(function ($tenant, $payloadPackage, array $payload) use ($package) {
return $tenant->is($this->tenant)
&& $payloadPackage->is($package)
&& array_key_exists('success_url', $payload)
&& array_key_exists('return_url', $payload)
&& array_key_exists('metadata', $payload)
&& is_array($payload['metadata'])
&& ! empty($payload['metadata']['checkout_session_id']);
})
->andReturn([
'checkout_url' => 'https://checkout.lemonsqueezy.test/checkout/123',
'id' => 'chk_test_123',
]);
$this->instance(LemonSqueezyCheckoutService::class, $checkoutService);
$response = $this->authenticatedRequest('POST', '/api/v1/tenant/packages/lemonsqueezy-checkout', [
'package_id' => $package->id,
]);
$response->assertOk()
->assertJsonPath('checkout_url', 'https://checkout.lemonsqueezy.test/checkout/123')
->assertJsonStructure(['checkout_session_id']);
}
public function test_lemonsqueezy_checkout_requires_lemonsqueezy_variant_id(): void
{
$package = Package::factory()->create([
'lemonsqueezy_variant_id' => null,
'price' => 129,
]);
$response = $this->authenticatedRequest('POST', '/api/v1/tenant/packages/lemonsqueezy-checkout', [
'package_id' => $package->id,
]);
$response->assertStatus(422)
->assertJsonStructure([
'errors' => [
'package_id' => [],
],
]);
}
}