Skip to content

ME-JAD/cheeseshop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cahier des charges – Fromagerie artisanale en ligne

Objectif

Vous devez tester un système de gestion de commandes pour une fromagerie artisanale. Le code vous est fourni, mais il contient peut-être des erreurs.
Votre mission est d’écrire des tests unitaires (JUnit5) pour vérifier que les règles métier suivantes sont bien respectées.


Produits

  • Un produit peut être vendu :
    • à l’unité (UNIT) : ex. camembert, tomme
    • au poids (WEIGHT) : ex. comté, roquefort
  • Chaque produit possède :
    • un nom
    • un prix unitaire (€/pièce ou €/kg)
    • un poids minimum (en kg) si vendu au poids
    • une catégorie promotionnelle (PromotionalCategory) qui détermine s’il peut bénéficier de promotions saisonnières

Clients

  • Un client a un nom et un statut :
    • NEW : nouveau client
    • REGULAR : client régulier
    • LOYAL : client fidèle

Commandes

  • Une commande contient une ou plusieurs lignes de commande (produit + quantité)
  • La quantité est :
    • un nombre entier pour les produits à l’unité
    • un poids (double) pour les produits au poids
  • La date de la commande est importante pour les promotions saisonnières

Calcul du total

Le total d’une commande est calculé comme suit :

1. Sous-total

Somme des (prix unitaire × quantité) pour chaque ligne de commande.

2. Promotions

Les promotions suivantes peuvent s’appliquer :

Réduction client

  • 10 % de réduction pour les clients LOYAL

Réduction sur le montant

  • 5 % de réduction si le total dépasse strictement 100 €

Réduction saisonnière

  • Certains produits bénéficient de 15 % de réduction selon leur catégorie promotionnelle et la date de la commande
  • Exemples de règles :
    • Les produits de catégorie AOP sont en promotion en décembre (Noël)
    • Les produits REGIONAL sont en promotion en juin (fête des pères) et en septembre (rentrée)
    • Les produits SEASONAL sont en promotion en avril (Pâques) et en mai (fête des mères)
  • Ces règles sont gérées par le calendrier commercial

Les promotions sont cumulables.

Ordre d'application des réductions

  • La réduction liée au statut du client (par exemple 10 % pour les clients LOYAL) doit être appliquée avant la réduction liée au montant total de la commande.
  • Le seuil de 100 € est donc évalué après application de la réduction fidélité.

Exemple :

  • Total brut : 120 €
  • Client : LOYAL (réduction de 10 %)
  • Étapes de calcul :
    1. 120 € – 10 % = 108 €
    2. 108 € > 100 € → réduction supplémentaire de 5 %
    3. 108 € – 5 % = 102,60 €
    4. Application de la TVA (20 %) : 102,60 × 1,20 = 123,12 €

3. TVA

  • Une TVA de 20 % est appliquée sur le total après réduction

Stock

  • Chaque produit a un stock initial (en kg ou en unités)
  • Une commande ne peut pas dépasser le stock disponible
  • Le stock est décrémenté après chaque commande
  • Le stock ne peut jamais devenir négatif

Contraintes métier

  • Un produit au poids ne peut pas être commandé en dessous de son poids minimum
  • Un client NEW ne doit pas bénéficier de la réduction fidélité
  • La réduction de 5 % ne s’applique que si le total dépasse 100 €
  • La TVA doit être de 20 %, pas plus ni moins
  • Un produit ne peut pas être commandé si le stock est insuffisant

Exceptions métier à tester

Le programme doit lever des exceptions spécifiques dans les cas suivants :

Exception Déclenchée quand…
InsufficientStockException Le stock est insuffisant pour la quantité demandée
BelowMinimumWeightException Un produit au poids est commandé en dessous de son poids minimum
InvalidQuantityException La quantité est négative ou nulle
InvalidProductTypeException Une quantité non entière est utilisée pour un produit à l’unité, ou inversement
DuplicateProductException Le même produit est ajouté plusieurs fois dans une commande
PromotionNotApplicableException Une promotion est appliquée à une période ou un produit non éligible
UnauthorizedDiscountException Un client NEW bénéficie d’une réduction réservée aux clients LOYAL
InvalidCustomerStatusException Le statut du client est inconnu ou invalide
EmptyOrderException Une commande est validée sans aucune ligne de commande

Ce que vous devez faire

  • Écrire des tests unitaires JUnit5 pour :
    • Vérifier les calculs de total avec et sans promotions
    • Tester les cas limites (poids minimum, seuil de réduction, stock insuffisant)
    • Vérifier que les règles métier sont bien respectées
    • Vérifier que les exceptions sont levées correctement
    • Détecter les erreurs dans le code fourni
  • Vous n’avez pas à modifier le code métier, uniquement à le tester

Diagramme de classes

cheeseshop.png

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages