e5e6f72f92
- CI/CD Gitea Actions: ci.yml (Pint + PHPUnit), deploy.yml (déploiement SSH) - Suppression de l'ancien workflow GitHub cassé - En-têtes de sécurité: ajout CSP et Permissions-Policy - RGPD: droit à l'effacement (anonymisation du compte) + tests - Correctifs: ForceHttps hors env testing, timestamps du modèle Utilisateur, suppression des migrations en doublon (migrate échouait sur base neuve) - Qualité: formatage Laravel Pint sur l'ensemble du code - Documentation dossier technique (docs/) + .docx + .pptx Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
69 lines
2.1 KiB
PHP
69 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Models\Role;
|
|
use App\Models\Utilisateur;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Tests\TestCase;
|
|
|
|
class SecuriteTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
/**
|
|
* Vérifie que les en-têtes de sécurité sont bien présents sur les réponses.
|
|
*/
|
|
public function test_les_entetes_de_securite_sont_presents(): void
|
|
{
|
|
$response = $this->get('/');
|
|
|
|
$response->assertStatus(200);
|
|
$response->assertHeader('X-Content-Type-Options', 'nosniff');
|
|
$response->assertHeader('X-Frame-Options', 'SAMEORIGIN');
|
|
$response->assertHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
|
|
$response->assertHeader('Content-Security-Policy');
|
|
$response->assertHeader('Permissions-Policy');
|
|
}
|
|
|
|
/**
|
|
* Vérifie que les pages protégées redirigent un visiteur non authentifié
|
|
* vers la page de connexion (contrôle d'accès).
|
|
*/
|
|
public function test_les_pages_protegees_exigent_une_authentification(): void
|
|
{
|
|
$response = $this->get('/profile/settings');
|
|
|
|
$response->assertRedirect('/login');
|
|
}
|
|
|
|
/**
|
|
* Vérifie le droit à l'effacement RGPD : la suppression du compte
|
|
* anonymise bien les données personnelles de l'utilisateur.
|
|
*/
|
|
public function test_la_suppression_de_compte_anonymise_les_donnees(): void
|
|
{
|
|
$role = Role::create(['Nom' => 'Utilisateur']);
|
|
|
|
$user = Utilisateur::create([
|
|
'Pseudo' => 'JeanDupont',
|
|
'Email' => 'jean.dupont@example.com',
|
|
'MotDePasse' => Hash::make('motdepasse123'),
|
|
'ID_Role' => $role->ID_Role,
|
|
'Statut' => 'Actif',
|
|
]);
|
|
|
|
$response = $this->actingAs($user)->delete('/profile', [
|
|
'MotDePasse_Confirmation' => 'motdepasse123',
|
|
]);
|
|
|
|
$response->assertRedirect('/');
|
|
|
|
$user->refresh();
|
|
$this->assertSame('Utilisateur supprimé', $user->Pseudo);
|
|
$this->assertSame('Inactif', $user->Statut);
|
|
$this->assertStringNotContainsString('jean.dupont', $user->Email);
|
|
}
|
|
}
|