presseportale/tests/Feature/ApiDocumentationTest.php
Kevin Adametz 616b7847d4 Uebernahme bestehender Legacy-API-Integrationen (Keys, Auth, Pfade)
Bestehende Kunden-Integrationen der Altportale laufen nach dem Relaunch
weiter, ohne dass Kunden etwas umstellen muessen:

1. legacy:import-api-keys uebernimmt die api_keys aus den Legacy-DBs
   (sf_guard_user_profile) als Sanctum-Tokens mit identischem Secret
   (Sanctum loest Tokens ohne id|-Praefix per sha256-Hash auf) — nur
   fuer berechtigte Nutzer (aktiver Zahlungsstatus/Bestandsschutz,
   ApiAccessEligibilityService); idempotent, mit Dry-Run. Probe gegen
   die lokalen Snapshots: 406 Keys wuerden uebernommen.
2. Die Auth-Middleware uebersetzt die alten Uebergabeformen (X-ApiKey-
   Header, api_key-Parameter) fuer gueltige Keys in Bearer; unbekannte
   Keys erhalten weiterhin 410 mit Migrationshinweis.
3. Die dokumentierten /service/...-Pfade der Alt-API sind als Aliasse
   auf die v1-Controller gelegt (pressreleases inkl. Bilder, companies
   lesend); nicht uebernommene Alt-Endpoints (Pressemappen/Kontakte
   anlegen) antworten 410 mit Hinweis auf Kundenkonto und neue Doku.

API-Seite + OpenAPI entsprechend aktualisiert; Go-Live-Checkliste um den
Import-Schritt (nach dem Grandfathering) ergaenzt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 11:55:22 +00:00

27 lines
1 KiB
PHP

<?php
use Tests\TestCase;
test('api v1 documentation is publicly available', function () {
/** @var TestCase $this */
$this->get('/docs/api/v1')
->assertOk()
->assertHeader('content-type', 'application/yaml; charset=UTF-8')
->assertSee('openapi: 3.1.0', false)
->assertSee('/press-releases:', false)
// Übernahme der Legacy-Integrationen (06.07.): Alt-Schlüssel bleiben
// gültig, unbekannte bekommen den Migrationshinweis.
->assertSee('Bestehende API-Schlüssel der Altportale wurden übernommen', false);
});
test('the public api page documents the real endpoints', function () {
/** @var TestCase $this */
$this->get('https://pressekonto.test/de/api')
->assertSuccessful()
->assertSeeText('API-Dokumentation')
->assertSee('/press-releases/{id}/submit', false)
->assertSee('press-releases:write', false)
// Keine Fantasie-Features mehr (OAuth/SDKs/Webhooks gab es nie).
->assertDontSee('OAuth 2.0')
->assertDontSee('api.example.com');
});