Distinguer romans et BD par un type de document

Format disait physique ou numérique, jamais roman ou BD. Trois valeurs
seulement : une valeur s'ajoute sans migration, la renommer une fois posée
sur des centaines de fiches, non.

Le défaut est « non précisé », pas « roman » : les fiches existantes n'ont
pas été saisies avec cette question en tête, et un AddColumn suffit
justement parce que la valeur par défaut ne prétend rien. L'interface
n'affiche donc que ce qui a été choisi, comme pour le format.

Filtre ajouté aux DEUX implémentations, serveur et hors-ligne, avec quatre
jeux de critères de plus dans le test qui les confronte.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-19 21:45:37 +02:00
co-authored by Claude Opus 5
parent a49125ddc3
commit 49eb8e1c98
21 changed files with 631 additions and 27 deletions
+19 -5
View File
@@ -30,9 +30,14 @@ public class FiltreLivresLocalTests
private static readonly Auteur Zola = Auteur(1, "Émile Zola");
private static readonly Auteur Maupassant = Auteur(2, "Guy de Maupassant");
private static Livre Livre(int id, string titre, Auteur? auteur, Format format, Statut? statut)
private static Livre Livre(
int id, string titre, Auteur? auteur, Format format, Statut? statut,
TypeDocument type = TypeDocument.NonPrecise)
{
var livre = new Livre { Id = id, Titre = titre, Format = format, AjoutePar = Lecteur };
var livre = new Livre
{
Id = id, Titre = titre, Format = format, TypeDocument = type, AjoutePar = Lecteur,
};
livre.RecalculerFormes();
if (auteur is not null)
@@ -50,9 +55,9 @@ public class FiltreLivresLocalTests
private static readonly Livre[] Entites =
[
Livre(1, "Germinal", Zola, Format.Physique, Statut.Lu),
Livre(2, "La Bête humaine", Zola, Format.Numerique, Statut.ALire),
Livre(3, "Le Horla", Maupassant, Format.Physique, Statut.EnCours),
Livre(1, "Germinal", Zola, Format.Physique, Statut.Lu, TypeDocument.Roman),
Livre(2, "La Bête humaine", Zola, Format.Numerique, Statut.ALire, TypeDocument.BandeDessinee),
Livre(3, "Le Horla", Maupassant, Format.Physique, Statut.EnCours, TypeDocument.Roman),
Livre(4, "Bel-Ami", Maupassant, Format.Numerique, null),
Livre(5, "Œuvres complètes", Zola, Format.Physique, Statut.ALire),
Livre(6, "L'Éducation sentimentale", null, Format.Physique, null),
@@ -68,6 +73,7 @@ public class FiltreLivresLocalTests
Id = l.Id,
Titre = l.Titre,
Format = l.Format,
TypeDocument = l.TypeDocument,
DateAjout = DateTime.UtcNow,
Statut = l.Statuts.FirstOrDefault(s => s.Utilisateur == Lecteur)?.Statut,
Auteurs = l.Auteurs
@@ -89,12 +95,20 @@ public class FiltreLivresLocalTests
new CritereLivres { Recherche = "introuvable" },
new CritereLivres { Format = Format.Physique },
new CritereLivres { Format = Format.Numerique },
new CritereLivres { TypeDocument = TypeDocument.Roman },
new CritereLivres { TypeDocument = TypeDocument.BandeDessinee },
// « Non précisé » est une valeur filtrable, pas l'absence de filtre.
new CritereLivres { TypeDocument = TypeDocument.NonPrecise },
new CritereLivres { Statut = Statut.Lu },
new CritereLivres { Statut = Statut.ALire },
new CritereLivres { AuteurId = 1 },
new CritereLivres { AuteurId = 2 },
new CritereLivres { AuteurId = 99 },
new CritereLivres { Recherche = "zola", Format = Format.Physique, Statut = Statut.ALire },
new CritereLivres
{
Recherche = "zola", TypeDocument = TypeDocument.BandeDessinee, Format = Format.Numerique,
},
];
[Theory]