Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →