Signaler les envies déjà entrées au catalogue, sans les supprimer
La demande initiale était de retirer l'envie ; c'est refusé. Le catalogue est commun et la liste d'envies personnelle : supprimer modifierait la liste d'un autre en silence, avec sa note. Et le rapprochement par clé d'œuvre est faillible, alors qu'une suppression ne se rattrape pas. L'étiquette « Déjà au catalogue » mène à la fiche, pour vérifier avant de retirer. Le critère est celui des doublons, la convention d'auteur commun étant désormais partagée par les deux (RapprochementAuteurs). Au passage : accolade manquante sur .etiquette-souhaite, qui avalait la règle suivante — le bandeau de mise à jour perdait son style. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -52,6 +52,101 @@ public class ServiceSouhaitsTests : IDisposable
|
||||
new EnregistrementSouhait { Titre = titre, Auteur = auteur, Isbn = isbn, Note = note },
|
||||
utilisateur);
|
||||
|
||||
// ── « Déjà au catalogue » : on signale, on ne supprime jamais ────────────
|
||||
//
|
||||
// Le catalogue est COMMUN, la liste d'envies PERSONNELLE : c'est ce croisement de portées
|
||||
// que ces tests protègent. Retirer l'envie d'un autre, comme le demandait la version
|
||||
// initiale de l'idée, modifierait sa liste en silence.
|
||||
|
||||
[Fact]
|
||||
public async Task Une_envie_deja_au_catalogue_est_signalee_avec_sa_fiche()
|
||||
{
|
||||
var livre = (await _catalogue.CreerAsync(
|
||||
new EnregistrementLivre { Titre = "Les fourmis", Auteur = "Bernard Werber" }, Mathieu)).Livre!;
|
||||
|
||||
// Sous-titre et ordre du nom différents : ce que la clé d'œuvre et le rapprochement
|
||||
// d'auteurs doivent absorber.
|
||||
await AjouterAsync("Les fourmis : roman", "Werber, Bernard");
|
||||
|
||||
var souhait = (await _souhaits.ListerAsync(Mathieu)).Single();
|
||||
|
||||
Assert.True(souhait.Possede);
|
||||
Assert.Equal(livre.Id, souhait.LivreId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Une_envie_signalee_reste_dans_la_liste_avec_sa_note()
|
||||
{
|
||||
await AjouterAsync("Les fourmis", note: "demandé à Noël");
|
||||
await _catalogue.CreerAsync(
|
||||
new EnregistrementLivre { Titre = "Les fourmis", Auteur = "Bernard Werber" }, Camille);
|
||||
|
||||
var souhait = (await _souhaits.ListerAsync(Mathieu)).Single();
|
||||
|
||||
// L'ajout au catalogue par QUELQU'UN D'AUTRE ne touche pas à la liste de Mathieu.
|
||||
Assert.True(souhait.Possede);
|
||||
Assert.Equal("demandé à Noël", souhait.Note);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Un_titre_identique_dun_autre_auteur_nest_pas_signale()
|
||||
{
|
||||
await _catalogue.CreerAsync(
|
||||
new EnregistrementLivre { Titre = "Nouvelles", Auteur = "Guy de Maupassant" }, Mathieu);
|
||||
|
||||
await AjouterAsync("Nouvelles", "Anton Tchekhov");
|
||||
|
||||
Assert.False((await _souhaits.ListerAsync(Mathieu)).Single().Possede);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Le_meme_isbn_suffit_a_signaler_malgre_un_titre_different()
|
||||
{
|
||||
// L'ISBN désigne une édition précise : il tranche seul, et rattrape un titre saisi
|
||||
// autrement qu'à la source.
|
||||
var livre = (await _catalogue.CreerAsync(
|
||||
new EnregistrementLivre
|
||||
{
|
||||
Titre = "Le Horla et autres contes",
|
||||
Auteur = "Guy de Maupassant",
|
||||
Isbn = "9782080704092",
|
||||
},
|
||||
Mathieu)).Livre!;
|
||||
|
||||
await AjouterAsync("Le Horla", "Maupassant", isbn: "9782080704092");
|
||||
|
||||
var souhait = (await _souhaits.ListerAsync(Mathieu)).Single();
|
||||
|
||||
Assert.Equal(livre.Id, souhait.LivreId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Une_envie_sans_equivalent_nest_pas_signalee()
|
||||
{
|
||||
await _catalogue.CreerAsync(
|
||||
new EnregistrementLivre { Titre = "Les fourmis", Auteur = "Bernard Werber" }, Mathieu);
|
||||
|
||||
await AjouterAsync("La prophétie des abeilles");
|
||||
|
||||
var souhait = (await _souhaits.ListerAsync(Mathieu)).Single();
|
||||
|
||||
Assert.False(souhait.Possede);
|
||||
Assert.Null(souhait.LivreId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Le_signalement_apparait_des_lajout_de_lenvie()
|
||||
{
|
||||
await _catalogue.CreerAsync(
|
||||
new EnregistrementLivre { Titre = "Les fourmis", Auteur = "Bernard Werber" }, Mathieu);
|
||||
|
||||
var ajout = await AjouterAsync("Les fourmis");
|
||||
|
||||
// Sinon l'écran d'ajout renverrait une fiche muette, et il faudrait recharger la liste
|
||||
// pour apprendre qu'on possède déjà le livre.
|
||||
Assert.True(ajout.Souhait!.Possede);
|
||||
}
|
||||
|
||||
// ── Ordre choisi à la main ───────────────────────────────────────────────
|
||||
|
||||
private async Task<IReadOnlyList<string>> TitresAsync(string utilisateur = Mathieu) =>
|
||||
|
||||
Reference in New Issue
Block a user