Aligne les thèmes sur le point-virgule des auteurs
Le champ des auteurs se saisit au point-virgule depuis toujours ; celui des thèmes se saisissait à la virgule. Deux champs voisins du même formulaire ne doivent pas se saisir de deux façons. La virgule reste acceptée en repli : c'était l'habitude, et un thème n'en contient jamais — contrairement à un titre d'article à la une, qui arrive au lot suivant et pour lequel elle couperait le titre en deux. D'où le paramètre de `ListeSaisie` plutôt qu'une règle unique. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
using MaBibli.Shared.Dtos;
|
||||
using MaBibli.Shared.Textes;
|
||||
|
||||
namespace MaBibli.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Découpage des champs qui portent plusieurs valeurs : thèmes d'un livre, articles à la une
|
||||
/// d'un numéro (lot O2).
|
||||
/// </summary>
|
||||
public class ListeSaisieTests
|
||||
{
|
||||
/// <summary>
|
||||
/// ⚠️ Le cas qui a tranché le séparateur : un titre d'article contient souvent une virgule,
|
||||
/// et elle le couperait en deux.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Un_titre_darticle_garde_ses_virgules()
|
||||
{
|
||||
var articles = ListeSaisie.Decouper(
|
||||
"Ukraine, deux ans après ; Le retour du train de nuit", virguleAussi: false);
|
||||
|
||||
Assert.Equal(["Ukraine, deux ans après", "Le retour du train de nuit"], articles);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Les thèmes acceptent la virgule en repli : elle était le séparateur jusqu'au 2026-08-21,
|
||||
/// et un thème n'en contient jamais.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Un_theme_se_saisit_aux_deux_separateurs()
|
||||
{
|
||||
Assert.Equal(
|
||||
["Fantasy", "aventure", "space opera"],
|
||||
EnregistrementLivre.DecouperThemes("Fantasy ; aventure, space opera"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Le_premier_libelle_tape_est_celui_qui_reste()
|
||||
{
|
||||
// « Fantasy » et « fantasy » sont la même étiquette au sens de la normalisation.
|
||||
Assert.Equal(["Fantasy"], EnregistrementLivre.DecouperThemes("Fantasy ; fantasy ; FANTASY"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Les_entrees_vides_disparaissent()
|
||||
{
|
||||
Assert.Empty(ListeSaisie.Decouper(" ; ; ", virguleAussi: false));
|
||||
Assert.Empty(ListeSaisie.Decouper(null, virguleAussi: true));
|
||||
}
|
||||
|
||||
/// <summary>La ligne recomposée se redécoupe à l'identique : c'est ce que fait le formulaire.</summary>
|
||||
[Fact]
|
||||
public void Joindre_puis_decouper_ne_perd_rien()
|
||||
{
|
||||
List<string> articles = ["Ukraine, deux ans après", "Le retour du train de nuit"];
|
||||
|
||||
Assert.Equal(articles, ListeSaisie.Decouper(ListeSaisie.Joindre(articles), virguleAussi: false));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user