Dans une API Laravel, la sécurisation des routes repose sur Laravel Sanctum. Grâce à la méthode Sanctum::actingAs(), vous pouvez authentifier instantanément un utilisateur de test et lui assigner des capacités (token abilities) granulaires sans avoir à générer manuellement de vrais jetons d'accès.
Injecte l'utilisateur authentifié et son token virtuel directement dans le conteneur pour tous les appels getJson().
Test des permissions fines (ex: ['invoices:read']) protégées par le middleware ability.
Validation récursive de l'arborescence JSON pour certifier que l'API respecte les contrats attendus par le Frontend.
Vérification des règles d'autorisation métier au niveau modèle avec $this->authorize() (retourne 403 Forbidden).
Configurez les abilities du jeton Sanctum simulé pour observer l'évaluation des permissions par le middleware.
ability:orders:read Vérifiez la forme exacte des données paginées retournées par l'API sans tester chaque valeur une par une.
it('retourne la liste paginée avec la structure attendue', function () {
$user = User::factory()->create();
Order::factory()->count(2)->create(['user_id' => $user->id]);
Sanctum::actingAs($user, ['orders:read']);
$response = $this->getJson('/api/orders');
$response->assertOk()
->assertJsonStructure([
'data' => [
'*' => ['id', 'amount', 'status', 'created_at']
],
'links' => ['first', 'last', 'prev', 'next'],
'meta' => ['current_page', 'from', 'last_page', 'total']
]);
});Vérifiez qu'un utilisateur ne peut pas modifier un article qui appartient à un autre auteur.
it('interdit la modification d un article tiers via la Policy', function () {
$auteur = User::factory()->create();
$intrus = User::factory()->create();
$post = Post::factory()->create(['user_id' => $auteur->id]);
Sanctum::actingAs($intrus);
$response = $this->putJson("/api/posts/{$post->id}", [
'title' => 'Titre piraté',
]);
$response->assertForbidden(); // 403 Forbidden retourné par PostPolicy
});