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>
58 lines
2.0 KiB
C#
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"));
|
|
}
|
|
}
|