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")); } }