- Create StripeService: webhook sync, signature verification, save secret to .env.local - Create StripeWebhookController with signature verification (400 on invalid) - Create stripe:sync command to auto-create webhook endpoint via Stripe API - Webhook listens to all events (configurable later) - Save webhook secret automatically to .env.local on creation - Add stripeAccountId field to User entity for Stripe Connect + migration - Tests: StripeServiceTest (5), StripeWebhookControllerTest (2), StripeSyncCommandTest (1), UserTest updated Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
64 lines
2.2 KiB
PHP
64 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Tests\Service;
|
|
|
|
use App\Service\StripeService;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class StripeServiceTest extends TestCase
|
|
{
|
|
public function testGetWebhookUrl(): void
|
|
{
|
|
$service = new StripeService('sk_test', 'whsec_test', 'https://example.com', '/tmp');
|
|
|
|
self::assertSame('https://example.com/stripe/webhook', $service->getWebhookUrl());
|
|
}
|
|
|
|
public function testGetWebhookUrlTrimsTrailingSlash(): void
|
|
{
|
|
$service = new StripeService('sk_test', 'whsec_test', 'https://example.com/', '/tmp');
|
|
|
|
self::assertSame('https://example.com/stripe/webhook', $service->getWebhookUrl());
|
|
}
|
|
|
|
public function testVerifyWebhookSignatureReturnsNullOnInvalid(): void
|
|
{
|
|
$service = new StripeService('sk_test', 'whsec_test', 'https://example.com', '/tmp');
|
|
|
|
self::assertNull($service->verifyWebhookSignature('{}', 'invalid'));
|
|
}
|
|
|
|
public function testSaveWebhookSecretCreatesEntry(): void
|
|
{
|
|
$tmpDir = sys_get_temp_dir().'/stripe_test_'.uniqid();
|
|
mkdir($tmpDir);
|
|
file_put_contents($tmpDir.'/.env.local', "APP_ENV=test\n");
|
|
|
|
$service = new StripeService('sk_test', 'whsec_test', 'https://example.com', $tmpDir);
|
|
$service->saveWebhookSecret('whsec_new123');
|
|
|
|
$content = file_get_contents($tmpDir.'/.env.local');
|
|
self::assertStringContainsString('STRIPE_WEBHOOK_SECRET=whsec_new123', $content);
|
|
|
|
unlink($tmpDir.'/.env.local');
|
|
rmdir($tmpDir);
|
|
}
|
|
|
|
public function testSaveWebhookSecretUpdatesExisting(): void
|
|
{
|
|
$tmpDir = sys_get_temp_dir().'/stripe_test_'.uniqid();
|
|
mkdir($tmpDir);
|
|
file_put_contents($tmpDir.'/.env.local', "APP_ENV=test\nSTRIPE_WEBHOOK_SECRET=old_secret\n");
|
|
|
|
$service = new StripeService('sk_test', 'whsec_test', 'https://example.com', $tmpDir);
|
|
$service->saveWebhookSecret('whsec_updated');
|
|
|
|
$content = file_get_contents($tmpDir.'/.env.local');
|
|
self::assertStringContainsString('STRIPE_WEBHOOK_SECRET=whsec_updated', $content);
|
|
self::assertStringNotContainsString('old_secret', $content);
|
|
|
|
unlink($tmpDir.'/.env.local');
|
|
rmdir($tmpDir);
|
|
}
|
|
}
|