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>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user