70 lines
2.3 KiB
PHP
70 lines
2.3 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
use App\Models\Classe;
|
|||
|
|
use App\Models\Eleve;
|
|||
|
|
use Illuminate\Support\Facades\RateLimiter;
|
|||
|
|
use Illuminate\Support\Facades\Storage;
|
|||
|
|
|
|||
|
|
beforeEach(function () {
|
|||
|
|
Storage::fake('webdav');
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('la sous-requête Nginx refuse sans identifiants', function () {
|
|||
|
|
$this->get(route('interne.webdav-auth'))->assertStatus(401);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('la sous-requête Nginx refuse un code secret incorrect', function () {
|
|||
|
|
$eleve = Eleve::factory()->create();
|
|||
|
|
|
|||
|
|
$this->withBasicAuth($eleve->identifiant, 'mauvais-code')
|
|||
|
|
->get(route('interne.webdav-auth'))
|
|||
|
|
->assertStatus(401);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('la sous-requête Nginx accepte les identifiants de connexion et pose le dossier de l’élève', function () {
|
|||
|
|
$eleve = Eleve::factory()->create(['code_secret' => bcrypt('monCode123')]);
|
|||
|
|
|
|||
|
|
$this->withBasicAuth($eleve->identifiant, 'monCode123')
|
|||
|
|
->get(route('interne.webdav-auth'))
|
|||
|
|
->assertStatus(200)
|
|||
|
|
->assertHeader('X-Eleve-Dossier', (string) $eleve->id);
|
|||
|
|
|
|||
|
|
Storage::disk('webdav')->assertExists((string) $eleve->id);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('5 échecs de suite bloquent temporairement même avec le bon code juste après', function () {
|
|||
|
|
$eleve = Eleve::factory()->create(['code_secret' => bcrypt('monCode123')]);
|
|||
|
|
|
|||
|
|
for ($i = 0; $i < 5; $i++) {
|
|||
|
|
$this->withBasicAuth($eleve->identifiant, 'mauvais')
|
|||
|
|
->get(route('interne.webdav-auth'))
|
|||
|
|
->assertStatus(401);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$this->withBasicAuth($eleve->identifiant, 'monCode123')
|
|||
|
|
->get(route('interne.webdav-auth'))
|
|||
|
|
->assertStatus(401);
|
|||
|
|
|
|||
|
|
RateLimiter::clear('webdav:'.$eleve->identifiant.'|127.0.0.1');
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('un élève connecté voit l’adresse de son dossier WebDAV', function () {
|
|||
|
|
$eleve = Eleve::factory()->create();
|
|||
|
|
|
|||
|
|
eleve($this, $eleve)->get(route('mes-fichiers'))
|
|||
|
|
->assertOk()
|
|||
|
|
->assertSee('/webdav/')
|
|||
|
|
->assertSee($eleve->identifiant);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('purger une classe archivée supprime aussi le dossier WebDAV de ses élèves', function () {
|
|||
|
|
$classe = Classe::factory()->create();
|
|||
|
|
$eleve = Eleve::factory()->create(['classe_id' => $classe->id]);
|
|||
|
|
Storage::disk('webdav')->put($eleve->id.'/photo.jpg', 'contenu');
|
|||
|
|
|
|||
|
|
$classe->forceFill(['archivee_a' => now()->subDays(91)])->save();
|
|||
|
|
$this->artisan('classes:purger-archivees');
|
|||
|
|
|
|||
|
|
Storage::disk('webdav')->assertMissing($eleve->id.'/photo.jpg');
|
|||
|
|
});
|