Checkout‑Registrierung validiert jetzt die E‑Mail‑Länge, und die Checkout‑Flows sind Paddle‑only: Stripe‑Endpoints/

Services/Helpers sind entfernt, API/Frontend angepasst, Tests auf Paddle umgestellt. Außerdem wurde die CSP gestrafft
  und Stripe‑Texte in den Abandoned‑Checkout‑Mails ersetzt.
This commit is contained in:
Codex Agent
2025-12-18 11:14:42 +01:00
parent 7213aef108
commit 2e4226a838
33 changed files with 314 additions and 1219 deletions

View File

@@ -11,7 +11,6 @@ use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Stripe\StripeClient;
use Tests\TestCase;
class FullUserFlowTest extends TestCase
@@ -77,17 +76,11 @@ class FullUserFlowTest extends TestCase
]);
$this->assertAuthenticated();
$loginResponse->assertRedirect(route('dashboard', absolute: false));
$loginResponse->assertRedirect(route('tenant.admin.dashboard', absolute: false));
// Schritt 3: Paid Package Bestellung (Mock Stripe)
// Schritt 3: Paid Package Bestellung (Mock Paddle)
$paidPackage = Package::factory()->reseller()->create(['price' => 10]);
// Mock Stripe für Erfolg
$this->mock(StripeClient::class, function ($mock) {
$mock->shouldReceive('checkout->sessions->create')
->andReturn((object) ['url' => 'https://mock-stripe.com']);
});
// Simuliere Kauf (GET zu buy.packages, aber da es Redirect ist, prüfe Session oder folge)
// Für E2E: Angenommen, nach Mock wird Package zugewiesen (in real: Webhook, hier simuliere Success)
// Erstelle manuell für Test (in real: via Success-Route nach Zahlung)
@@ -106,8 +99,8 @@ class FullUserFlowTest extends TestCase
'tenant_id' => $tenant->id,
'package_id' => $paidPackage->id,
'type' => 'reseller_subscription',
'provider' => 'stripe',
'provider_id' => 'stripe',
'provider' => 'paddle',
'provider_id' => 'paddle_txn_123',
'price' => 10,
'purchased_at' => now(),
]);
@@ -119,7 +112,7 @@ class FullUserFlowTest extends TestCase
'tenant_id' => $tenant->id,
'package_id' => $paidPackage->id,
'type' => 'reseller_subscription',
'provider' => 'stripe',
'provider' => 'paddle',
]);
// Überprüfe, dass 2 Purchases existieren (Free + Paid)