Files
mabibli/MaBibli.Tests/FormatageIssnTests.cs
Mathieu LimonierandClaude Opus 5 6a6d745af4 MaBibli 1.0.0
Gestion de bibliothèque personnelle auto-hébergée : catalogue, prêts,
scan de code-barres, consultation hors-ligne.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 22:36:16 +02:00

58 lines
2.0 KiB
C#

using MaBibli.Shared.Isbn;
namespace MaBibli.Tests;
/// <summary>
/// Mise en forme d'un ISSN (lot K2).
/// </summary>
/// <remarks>
/// Le contraste avec <see cref="FormatageIsbnTests"/> est tout l'intérêt de ce fichier : un
/// ISSN se coupe <b>toujours</b> au même endroit, il n'y a donc aucune table à embarquer et
/// aucune coupure ne peut être fausse.
/// </remarks>
public class FormatageIssnTests
{
[Theory]
[InlineData("24666718", "2466-6718")]
[InlineData("2466-6718", "2466-6718")]
[InlineData(" 2466 6718 ", "2466-6718")]
[InlineData("0317847X", "0317-847X")]
[InlineData("0317847x", "0317-847X")]
public void Un_issn_prend_son_tiret(string saisie, string attendu) =>
Assert.Equal(attendu, FormatageIssn.Afficher(saisie));
/// <summary>
/// Ce qui n'est pas un ISSN ressort <b>intact</b> : un code mal recopié doit se voir mal
/// recopié, pas déguisé par un tiret. C'est la règle déjà tenue pour l'ISBN.
/// </summary>
[Theory]
[InlineData("2466671")] // sept caractères
[InlineData("246667181")] // neuf
[InlineData("2466-671A")] // une lettre qui n'est pas la clé
[InlineData("X4666718")] // le X n'est admis qu'en dernière position
public void Ce_qui_nest_pas_un_issn_nest_pas_deguise(string saisie)
{
Assert.Null(FormatageIssn.Normaliser(saisie));
Assert.Equal(saisie, FormatageIssn.Afficher(saisie));
}
[Fact]
public void Le_vide_reste_vide()
{
Assert.Null(FormatageIssn.Canonique(null));
Assert.Null(FormatageIssn.Canonique(" "));
}
/// <summary>
/// ⚠️ L'invariant qui donne son intérêt à la canonisation : la forme rangée en base est
/// celle que produit le code-barres, donc un ISSN tapé à la main s'y rapproche.
/// </summary>
[Fact]
public void La_forme_canonique_est_celle_du_code_barres()
{
var depuisLeCodeBarres = CodePeriodique.IssnDepuis("9772466671438");
Assert.Equal(depuisLeCodeBarres, FormatageIssn.Canonique("24666718"));
}
}