using MaBibli.Shared.Isbn; namespace MaBibli.Tests; /// /// Reconnaissance d'un code dans le champ de recherche du catalogue. /// /// /// L'enjeu n'est pas de trouver un ISBN — c'est de ne pas en voir un là où il n'y en a /// pas : « 1984 » est un titre, et le confondre avec un fragment de code remplacerait une /// réponse par du bruit. /// public class RechercheIsbnTests { [Theory] [InlineData("Germinal")] [InlineData("Zola 1984")] [InlineData("1984")] [InlineData("2026")] [InlineData("1234567")] // sept chiffres : sous le seuil [InlineData("")] [InlineData(" ")] [InlineData(null)] public void Ce_qui_n_est_pas_un_code_reste_une_recherche_de_mots(string? terme) => Assert.Null(RechercheIsbn.Formes(terme)); [Fact] public void Un_ean13_est_cherche_sous_ses_deux_formes() { // ⚠️ Le cœur de la fonctionnalité : la douchette lit toujours un 13, alors qu'un livre // paru avant 2007 est rangé sous son 10. var formes = RechercheIsbn.Formes("9782253004226"); Assert.NotNull(formes); Assert.Equal(["9782253004226", "2253004227"], formes); } [Fact] public void Les_tirets_de_l_affichage_se_recollent() => Assert.Equal( RechercheIsbn.Formes("9782253004226"), RechercheIsbn.Formes("978-2-25-300422-6")); [Fact] public void Un_fragment_assez_long_reste_un_code_mais_sans_seconde_forme() { // La conversion 13 → 10 n'a pas de sens sur un fragment : elle exige un ISBN complet. var formes = RechercheIsbn.Formes("97822530"); Assert.Equal(["97822530"], formes); } [Fact] public void Un_isbn_10_terminant_par_X_est_reconnu() { var formes = RechercheIsbn.Formes("2-266-11156-X"); Assert.Equal(["226611156X"], formes); } [Theory] [InlineData("9782253004226", true)] [InlineData("978-2-25-300422-6", true)] [InlineData("2253004227", true)] [InlineData("9782253004227", false)] // clé fausse : ce n'est pas une édition, c'est une faute [InlineData("97822530", false)] // fragment : le résultat unique serait un hasard [InlineData("Germinal", false)] public void Seul_un_code_complet_et_valide_autorise_l_ouverture_directe(string terme, bool attendu) => Assert.Equal(attendu, RechercheIsbn.EstCodeComplet(terme)); }