peuple la banque de quiz avec du vrai contenu, rangé par thème
Un quiz.gift par séquence (01 à 07, le 08 existait déjà), lu par un nouveau service LecteurGift et synchronisé par quiz:synchroniser-banque (même esprit que labs:synchroniser) vers un propriétaire technique jamais archivé (BanqueOfficielle), pour ne pas reproduire la dette du quiz partagé qui disparaît à la purge RGPD. /banque-quiz regroupe maintenant par thème comme /bibliotheque. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
33531de44d
commit
a41951d4e6
21 changed files with 628 additions and 32 deletions
66
portail/tests/Feature/BanqueQuizSynchronisationTest.php
Normal file
66
portail/tests/Feature/BanqueQuizSynchronisationTest.php
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
use App\Models\Classe;
|
||||
use App\Models\Quiz;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
function dossierContenusDeTest(): string
|
||||
{
|
||||
$dossier = sys_get_temp_dir().'/paillasse-contenus-test-'.uniqid();
|
||||
|
||||
File::ensureDirectoryExists("{$dossier}/01-sequence-test");
|
||||
|
||||
File::put("{$dossier}/01-sequence-test/lab.yaml", "id: 01-sequence-test\ntitre: Séquence de test\n");
|
||||
|
||||
File::put("{$dossier}/01-sequence-test/quiz.gift", <<<'GIFT'
|
||||
// commentaire ignoré
|
||||
|
||||
::Q1 titre::Une question QCM ?{
|
||||
=bonne réponse
|
||||
~mauvaise réponse}
|
||||
|
||||
::Q2 titre::Une affirmation vraie.{T}
|
||||
|
||||
::Q3 titre::Une question numérique {#42}
|
||||
GIFT);
|
||||
|
||||
config(['contenus.dossier' => $dossier, 'contenus.themes' => ['01-sequence-test' => 'LIN']]);
|
||||
|
||||
return $dossier;
|
||||
}
|
||||
|
||||
it('crée la banque officielle et ses quiz depuis les quiz.gift', function () {
|
||||
$dossier = dossierContenusDeTest();
|
||||
|
||||
$this->artisan('quiz:synchroniser-banque')->assertSuccessful();
|
||||
|
||||
$classe = Classe::where('nom', 'Banque officielle')->first();
|
||||
expect($classe)->not->toBeNull();
|
||||
|
||||
$quiz = Quiz::where('classe_id', $classe->id)->where('titre', 'Séquence de test')->first();
|
||||
expect($quiz)->not->toBeNull()
|
||||
->and($quiz->theme)->toBe('LIN')
|
||||
->and($quiz->partage)->toBeTrue()
|
||||
->and($quiz->questions)->toHaveCount(2);
|
||||
|
||||
$qcm = $quiz->questions->firstWhere('type', 'qcm');
|
||||
expect($qcm->choix)->toHaveCount(2)
|
||||
->and($qcm->choix->firstWhere('est_correct', true)->texte)->toBe('bonne réponse');
|
||||
|
||||
$vraiFaux = $quiz->questions->firstWhere('type', 'vrai_faux');
|
||||
expect($vraiFaux->reponse_vrai_faux)->toBeTrue();
|
||||
|
||||
File::deleteDirectory($dossier);
|
||||
});
|
||||
|
||||
it('ne duplique rien et remplace les questions à une nouvelle synchronisation', function () {
|
||||
$dossier = dossierContenusDeTest();
|
||||
|
||||
$this->artisan('quiz:synchroniser-banque')->assertSuccessful();
|
||||
$this->artisan('quiz:synchroniser-banque')->assertSuccessful();
|
||||
|
||||
expect(Classe::where('nom', 'Banque officielle')->count())->toBe(1)
|
||||
->and(Quiz::where('titre', 'Séquence de test')->count())->toBe(1);
|
||||
|
||||
File::deleteDirectory($dossier);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue