JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 12 · Application directe du cours
Livraison offerte
Projet : la Librairie interactive · niveau 2
Énoncé
La Librairie offre la livraison sur le campus dès 50 € de livres. Modifier total, et écrire les tests des cas limites : 49,99 €, 50 € tout rond, retrait en boutique. Ce changement suffit-il pour que le client ne paie pas les frais ?
Corrigé
export const FRAIS_CAMPUS = 2;
export const SEUIL_GRATUITE = 50;
export function total(panier, livres, retrait = "boutique") {
let centimes = 0;
for (const { isbn, quantite } of panier) {
centimes += Math.round(livres.find((l) => l.isbn === isbn).prix * 100) * quantite;
}
if (retrait === "campus" && centimes < SEUIL_GRATUITE * 100) {
centimes += FRAIS_CAMPUS * 100;
}
return centimes / 100;
}
test("12.3 — livraison offerte dès 50 €", () => {
const prix = [{ isbn: "a", prix: 25 }, { isbn: "b", prix: 49.99 }];
assert.equal(total([{ isbn: "1", quantite: 1 }, { isbn: "5", quantite: 2 }], livres, "campus"), 51); // 49 € : frais dus
assert.equal(total([{ isbn: "a", quantite: 2 }], prix, "campus"), 50); // 50 € pile : offerte
assert.equal(total([{ isbn: "b", quantite: 1 }], prix, "campus"), 51.99); // 49,99 € : frais dus
assert.equal(total([{ isbn: "a", quantite: 1 }], prix, "boutique"), 25); // en boutique : jamais de frais
});
La comparaison se fait en centimes, entiers exacts : « dès 50 € » s'écrit centimes < 5000 pour les frais, et le cas « 50 € pile » est testé. Mais ce changement ne suffit pas : le total facturé est calculé par le serveur, qui ajoute toujours ses 2 €. La page afficherait 50 € et la confirmation 52 €. Une règle commerciale se modifie d'abord sur le serveur ; la page ne fait que la refléter. (C'est un argument pour que le serveur expose ses règles, ou calcule les totaux à la demande, plutôt que de les dupliquer dans le navigateur.)
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.