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>
74 lines
2.4 KiB
PHP
74 lines
2.4 KiB
PHP
<?php
|
|
|
|
use App\Models\Category;
|
|
use App\Models\Company;
|
|
use App\Models\NewsletterSubscription;
|
|
use App\Models\User;
|
|
use Laravel\Sanctum\Sanctum;
|
|
use Tests\TestCase;
|
|
|
|
test('unknown legacy api key requests receive gone response', function () {
|
|
/** @var TestCase $this */
|
|
// Übernahme 06.07.: importierte Legacy-Keys sind gültige Tokens
|
|
// (LegacyApiCompatibilityTest); nur unbekannte Keys bekommen 410.
|
|
$this->getJson('/api/v1/categories?api_key=legacy-key')
|
|
->assertStatus(410)
|
|
->assertJsonStructure(['message', 'migration_url', 'docs_url']);
|
|
});
|
|
|
|
test('api user can read only own companies', function () {
|
|
/** @var TestCase $this */
|
|
$user = User::factory()->create();
|
|
$ownCompany = Company::factory()->presseecho()->create(['name' => 'Eigene Firma']);
|
|
$otherCompany = Company::factory()->businessportal24()->create(['name' => 'Fremde Firma']);
|
|
$user->companies()->attach($ownCompany->id, ['role' => 'owner']);
|
|
|
|
Sanctum::actingAs($user, ['companies:read']);
|
|
|
|
$this->getJson('/api/v1/companies')
|
|
->assertOk()
|
|
->assertSee('Eigene Firma')
|
|
->assertDontSee('Fremde Firma');
|
|
|
|
$this->getJson("/api/v1/companies/{$otherCompany->id}")
|
|
->assertForbidden();
|
|
});
|
|
|
|
test('api user can list categories with press release read ability', function () {
|
|
/** @var TestCase $this */
|
|
$user = User::factory()->create();
|
|
Category::factory()->withTranslations()->create();
|
|
|
|
Sanctum::actingAs($user, ['press-releases:read']);
|
|
|
|
$this->getJson('/api/v1/categories')
|
|
->assertOk()
|
|
->assertJsonCount(1, 'data')
|
|
->assertJsonStructure([
|
|
'data' => [
|
|
'*' => ['id', 'portal', 'translations'],
|
|
],
|
|
]);
|
|
});
|
|
|
|
test('api user can subscribe an email to newsletter', function () {
|
|
/** @var TestCase $this */
|
|
$user = User::factory()->create();
|
|
|
|
Sanctum::actingAs($user, ['newsletter:subscribe']);
|
|
|
|
$this->postJson('/api/v1/newsletter/subscribe', [
|
|
'portal' => 'presseecho',
|
|
'email' => 'newsletter@example.com',
|
|
'first_name' => 'Max',
|
|
'last_name' => 'Muster',
|
|
])
|
|
->assertCreated()
|
|
->assertJsonPath('data.email', 'newsletter@example.com')
|
|
->assertJsonPath('data.is_confirmed', false);
|
|
|
|
expect(NewsletterSubscription::withoutGlobalScopes()
|
|
->where('email', 'newsletter@example.com')
|
|
->where('portal', 'presseecho')
|
|
->exists())->toBeTrue();
|
|
});
|