create(['identifiant' => 'a-lab']); expect(CacheCatalogue::labs())->toHaveCount(1); Lab::factory()->create(['identifiant' => 'b-lab']); expect(CacheCatalogue::labs())->toHaveCount(1); // toujours la version en cache CacheCatalogue::viderLabs(); expect(CacheCatalogue::labs())->toHaveCount(2); }); test('CacheCatalogue::quizOfficiels() est en cache tant que viderQuizOfficiels() n’est pas appelé', function () { $classe = Classe::factory()->create(); Quiz::create(['classe_id' => $classe->id, 'titre' => 'Un', 'theme' => 'NET', 'partage' => true]); expect(CacheCatalogue::quizOfficiels())->toHaveCount(1); Quiz::create(['classe_id' => $classe->id, 'titre' => 'Deux', 'theme' => 'LIN', 'partage' => true]); expect(CacheCatalogue::quizOfficiels())->toHaveCount(1); CacheCatalogue::viderQuizOfficiels(); expect(CacheCatalogue::quizOfficiels())->toHaveCount(2); }); test('CacheCatalogue::cours() est en cache tant que viderCours() n’est pas appelé', function () { Cours::create(['identifiant' => 'a', 'titre' => 'Un', 'contenu_markdown' => 'x']); expect(CacheCatalogue::cours())->toHaveCount(1); Cours::create(['identifiant' => 'b', 'titre' => 'Deux', 'contenu_markdown' => 'x']); expect(CacheCatalogue::cours())->toHaveCount(1); CacheCatalogue::viderCours(); expect(CacheCatalogue::cours())->toHaveCount(2); }); test('CacheTableauDeBordProf::classes() est isolé par prof et vidé par vider()', function () { $profA = User::factory()->create(); $profB = User::factory()->create(); Classe::factory()->create(['user_id' => $profA->id]); Classe::factory()->create(['user_id' => $profB->id]); expect(CacheTableauDeBordProf::classes($profA->id))->toHaveCount(1) ->and(CacheTableauDeBordProf::classes($profB->id))->toHaveCount(1); Classe::factory()->create(['user_id' => $profA->id]); expect(CacheTableauDeBordProf::classes($profA->id))->toHaveCount(1); // en cache CacheTableauDeBordProf::vider($profA->id); expect(CacheTableauDeBordProf::classes($profA->id))->toHaveCount(2) ->and(CacheTableauDeBordProf::classes($profB->id))->toHaveCount(1); // l'autre prof n'a pas bougé }); test('archiver une classe invalide le cache tout de suite (pas de statut périmé sur /mes-classes)', function () { $prof = User::factory()->create(); $classe = Classe::factory()->create(['user_id' => $prof->id]); prof($this, $prof)->get(route('mes-classes.index'))->assertOk(); // remplit le cache prof($this, $prof)->post(route('mes-classes.archiver', $classe))->assertRedirect(); $page = prof($this, $prof)->get(route('mes-classes.index')); $page->assertOk()->assertSee('archivée'); }); test('purger une classe invalide le cache du prof : elle disparaît tout de suite de /mes-classes', function () { $prof = User::factory()->create(); $classe = Classe::factory()->create(['user_id' => $prof->id, 'nom' => 'À purger']); prof($this, $prof)->get(route('mes-classes.index'))->assertSee('À purger'); // remplit le cache $classe->forceFill(['archivee_a' => now()->subDays(91)])->save(); $this->artisan('classes:purger-archivees'); prof($this, $prof)->get(route('mes-classes.index'))->assertDontSee('À purger'); });