using MaBibli.Shared.Isbn;
namespace MaBibli.Tests;
///
/// Mise en forme d'un ISSN (lot K2).
///
///
/// Le contraste avec est tout l'intérêt de ce fichier : un
/// ISSN se coupe toujours au même endroit, il n'y a donc aucune table à embarquer et
/// aucune coupure ne peut être fausse.
///
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));
///
/// Ce qui n'est pas un ISSN ressort intact : 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.
///
[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(" "));
}
///
/// ⚠️ 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.
///
[Fact]
public void La_forme_canonique_est_celle_du_code_barres()
{
var depuisLeCodeBarres = CodePeriodique.IssnDepuis("9772466671438");
Assert.Equal(depuisLeCodeBarres, FormatageIssn.Canonique("24666718"));
}
}