Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 6 · Application directe du cours
Un prix figé
Relations et transactions · niveau 1 (application)
Énoncé
Pourquoi la ligne de commande garde-t-elle son propre prix unitaire au lieu de lire celui du livre ? Écrire un test : passer une commande de deux Petit Prince, augmenter le prix du livre à 9,90, puis relire la commande.
Corrigé
Une commande est un document comptable : elle doit garder le prix payé. Si la ligne lisait le prix du livre, une augmentation de prix modifierait toutes les commandes passées, et le total enregistré ne correspondrait plus à ses lignes.
void ex5_prixFige() {
long numero = service.commander(demande("a@x.fr", new LigneDemande(PRINCE, 2))).numero();
transaction.executeWithoutResult(
t -> livres.findById(PRINCE).orElseThrow().changerPrix(new BigDecimal("9.90")));
transaction.executeWithoutResult(t -> {
Commande c = commandes.findById(numero).orElseThrow();
assertThat(c.getTotal()).isEqualByComparingTo("17.00");
LigneCommande ligne = c.getLignes().getFirst();
assertThat(ligne.getPrixUnitaire()).isEqualByComparingTo("8.50");
});
}
Le total reste 17,00 et le prix unitaire 8,50. (Le test lit la commande dans une transaction, car ses lignes sont paresseuses.)
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.