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,93 @@
|
||||
using MaBibli.Shared.Isbn;
|
||||
|
||||
namespace MaBibli.Tests;
|
||||
|
||||
public class IsbnUtilsTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("978-2-253-00422-6", "9782253004226")]
|
||||
[InlineData(" 9782253004226 ", "9782253004226")]
|
||||
[InlineData("2-08-070409-5", "2080704095")]
|
||||
[InlineData("080442957x", "080442957X")]
|
||||
public void Normaliser_retire_la_ponctuation(string brut, string attendu)
|
||||
=> Assert.Equal(attendu, IsbnUtils.Normaliser(brut));
|
||||
|
||||
[Theory]
|
||||
[InlineData(null)]
|
||||
[InlineData("")]
|
||||
[InlineData(" ")]
|
||||
[InlineData("---")]
|
||||
public void Normaliser_renvoie_null_si_rien_dexploitable(string? brut)
|
||||
=> Assert.Null(IsbnUtils.Normaliser(brut));
|
||||
|
||||
// Les quatre ISBN de vérification du projet, plus un cas à clé X.
|
||||
[Theory]
|
||||
[InlineData("9782070612758", "2070612759")] // Le Petit Prince
|
||||
[InlineData("9782253004226", "2253004227")] // Germinal — valeur confirmée par la BnF
|
||||
[InlineData("9782080704092", "2080704095")] // Le Horla — valeur confirmée par la BnF
|
||||
[InlineData("9780262033848", "0262033844")] // Introduction to Algorithms
|
||||
public void Convertir_13_vers_10_donne_la_bonne_cle(string isbn13, string attendu)
|
||||
{
|
||||
Assert.True(IsbnUtils.TryConvertirEnIsbn10(isbn13, out var isbn10));
|
||||
Assert.Equal(attendu, isbn10);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("9780804429573", "080442957X")] // clé = 10 → X
|
||||
[InlineData("9780000000064", "000000006X")] // second cas à clé X, construit à la main
|
||||
public void Convertir_13_vers_10_produit_un_X_quand_la_cle_vaut_10(string isbn13, string attendu)
|
||||
{
|
||||
Assert.True(IsbnUtils.TryConvertirEnIsbn10(isbn13, out var isbn10));
|
||||
Assert.Equal(attendu, isbn10);
|
||||
Assert.True(IsbnUtils.EstIsbn10Valide(isbn10), "l'ISBN-10 produit doit être valide");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Convertir_refuse_le_prefixe_979()
|
||||
{
|
||||
// 979 n'a aucun équivalent ISBN-10 : « convertir » y produirait un identifiant inventé.
|
||||
const string isbn13 = "9791023507027";
|
||||
Assert.True(IsbnUtils.EstIsbn13Valide(isbn13), "l'ISBN-13 de test doit être valide");
|
||||
Assert.False(IsbnUtils.TryConvertirEnIsbn10(isbn13, out var isbn10));
|
||||
Assert.Null(isbn10);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(null)]
|
||||
[InlineData("")]
|
||||
[InlineData("2253004227")] // déjà un ISBN-10
|
||||
[InlineData("978225300422")] // trop court
|
||||
[InlineData("9782253004227")] // clé EAN-13 fausse
|
||||
public void Convertir_refuse_les_entrees_invalides(string? entree)
|
||||
{
|
||||
Assert.False(IsbnUtils.TryConvertirEnIsbn10(entree, out var isbn10));
|
||||
Assert.Null(isbn10);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("2253004227", true)]
|
||||
[InlineData("2080704095", true)]
|
||||
[InlineData("080442957X", true)]
|
||||
[InlineData("2253004228", false)] // clé fausse
|
||||
[InlineData("22530042X7", false)] // X ailleurs qu'en clé
|
||||
[InlineData("225300422", false)] // trop court
|
||||
public void EstIsbn10Valide(string isbn, bool attendu)
|
||||
=> Assert.Equal(attendu, IsbnUtils.EstIsbn10Valide(isbn));
|
||||
|
||||
[Theory]
|
||||
[InlineData("9782253004226", true)]
|
||||
[InlineData("9782070612758", true)]
|
||||
[InlineData("9782253004225", false)] // clé fausse
|
||||
[InlineData("978225300422X", false)] // pas de X en ISBN-13
|
||||
public void EstIsbn13Valide(string isbn, bool attendu)
|
||||
=> Assert.Equal(attendu, IsbnUtils.EstIsbn13Valide(isbn));
|
||||
|
||||
[Fact]
|
||||
public void UrlCouverture_porte_toujours_default_false()
|
||||
{
|
||||
// Sans ?default=false, OpenLibrary renvoie un placeholder au lieu d'un 404 :
|
||||
// on afficherait des couvertures vides sans le savoir.
|
||||
var url = IsbnUtils.UrlCouverture("9782253004226");
|
||||
Assert.Equal("https://covers.openlibrary.org/b/isbn/9782253004226-L.jpg?default=false", url);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user