Adloun

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

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 →