# User Stories ![](https://i.imgur.com/0pT843K.png) En tant qu'Acheteur, je veux pouvoir m'inscrire sur CoD lors de ma commande En tant qu'Acheteur, je veux pouvoir annuler une commande en cours En tant qu'Acheteur, je veux pouvoir consulter la liste des cookies disponibles En tant qu'Acheteur, quand je suis connecté, je veux pouvoir consulter l'historique de mes commandes En tant qu'Acheteur, je veux pouvoir me connecter à mon compte En tant qu'Acheteur, si je suis connecté, je veux pouvoir adhérer au programme VIP En tant qu'Acheteur, je veux pouvoir payer mon panier afin de valider la création de la commande En tant qu'Acheteur, quand je passe ma commande, je veux pouvoir consulter les emplois du temps des magasins En tant qu'Acheteur, Je veux pouvoir ajouter un cookie à mon panier En tant qu'Acheteur, Je veux pouvoir supprimer un cookie à mon panier En tant qu'Acheteur, Je veux pouvoir observer la liste des cockies disponibles En tant que TFCManager, Je veux pouvoir me connecter au site En tant que TFCManager, Je veux pouvoir regarder les prix des ingrédients En tant que TFCManager, Je veux pouvoir suprimer une recette En tant que Manager, Je veux pouvoir me connecter En tant que Manager, Je veux pouvoir recuperer une commande Afin de la donner au client En tant que Manager, Je veux pouvoir gérer les horaires Afin de decider des horaires d'ouverture et de fermeture En tant que Cuisinier, Je veux changer l'état d'une commande que je prépare. Afin d'informer le client sur l'état d'avancement de sa commande. En tant que Chef, Je veux pouvoir regarder le catalogue # Milestone ## Milestone 1 #### Issue n°1 Théophile En tant qu'Acheteur, Je veux pouvoir ajouter un cookie à mon panier ```gherkin #language: fr Fonctionnalité: Gérer le panier d'achat Contexte: Etant donné un Acheteur, Et un panier associé à l'acheteur Et un seul type de cookie Plan du scénario: Ajout de n cookies au panier Quand l'acheteur ajoute <n_cookie> cookie de recette X à son <panier> Alors le <nouveau_panier> contient <n_cookie> cookie de recette X supplémentaire Exemples: | n_cookie | panier | nouveau_panier | | 6 | 6 | 12 | | 0 | 0 | 0 | | 3 | 0 | 3 | | 1 | 0 | 1 | | 0 | 1 | 1 | | 13 | 2 | 15 | ``` #### Issue n°2 **Matt** En tant qu'Acheteur, Je veux pouvoir retirer des cookies de mon panier ```gherkin #language: fr Fonctionnalité: Gérer le panier d'achat Contexte: Etant donné un Acheteur, Et un panier associé à l'acheteur Plan du scénario: Retirer n cookies du panier Quand l'acheteur retire <n_cookie> cookies de recette X du <panier> Et le panier contient n ou plus cookies X Alors le <nouveau_panier> contient n cookies X en moins Exemples: | n_cookie | panier | nouveau_panier | | 3 | 6 | 3 | | 1 | 1 | 0 | | 0 | 3 | 3 | Plan du scénario: Retirer plus de cookie que disponible. Quand l'acheteur retire <n_cookie> cookies de recette X du <panier> Et le panier contient <n_cookie> ou moins cookies X Alors le <nouveau_panier> contient 0 cookies Exemples: | n_cookie | panier | nouveau_panier | | 3 | 2 | 0 | | 1 | 0 | 0 | | 50 | 16 | 34 | ``` #### Issue n°3 Jéjé et Yaya En tant qu'acheteur, je veux pouvoir valider mon panier Afin de créer mon bon de commande ```gherkin #language: fr Fonctionnalité: Lancer une commande Contexte: Etant donné un Acheteur, Et un panier associé à l'acheteur Et un seul magasin existe : "MonSuperMagasin" Et un seul type de cookie disponible pour le magasin "MonSuperMagasin" Scenario: Quand La commande est validée avec <n_cookie> dans le panier Et le magasin "MonSuperMagasin" est selectionné Alors Un bon de commande est emis avec un <id_de_commande> Et Le panier associé contient <n_cookie> Scenario: Quand La commande est validée Et le magasin "MonSuperMagasin" est selectionné Alors Le bon de commande est associé au magasin "MonSuperMagasin" Scenario: Quand La commande est validée Et il y a <n_cookie> dans le panier Alors La panier associé au bon de commande contient <n_cookie> Scenario: Quand La commande est validée Et le magasin "UnMagasinFrauduleux" est selectionné Alors La commande est annulée Et une erreur retournée Scenario: Quand La commande est validée Et qu'il y a 0 cookies selectionnés Alors La commande est annulée Et une erreur retournée ``` #### Issue n°4 En tant qu'acheteur je veux pouvoir annuler ma commande en cours ```gherkin #language: fr Fonctionnalité: Annuler une commande Contexte: Étant donné un Acheteur ayant passé une commande Et l'Acheteur veut annuler sa commande Scénario: Quand l'Acheteur annule la commande Et que le bonn de commande est valide Et que la commande n'est pas encore annulée Alors la commande est marquée comme annulée Et l'Acheteur reçoit une confirmation d'annulation ``` ### Issue n°5 En tant que cooker, je veux pouvoir consulter la commande passée par un acheteur afin de la préparer ```guerkin #language: fr Fonctionnalité: Consulter une commande en cours Contexte: Étant donné un Cooker "cooker" associée à un magasin "shop1", Et une commande associée à un magasin "shop2" Plan du scénario: Consulter la liste des cookies du bon magasin Quand la commande contient "<n>" cookies Et "shop1" et "shop2" sont le même magasin Alors le cooker reçoit la valeur "<n>" de cookies à cuisiner Exemples: |n| |1| |2| |10| Scénario: Consulter la liste de cookies du mauvais magasin Quand la commande contient "<n>" cookies Mais "shop1" et "shop2" ne sont pas le même magasin Alors une exception est levée ``` ### Issue n°6 En tant que cooker, je veux pouvoir modifier le statut de la commande afin de noter qu'elle est est en cours de préparation ou prête ```gherkin #language: fr Fonctionnalité: Modifier le statut d'un commande Contexte: Étant donné un Cooker "cooker" associée à un magasin "shop1", Et une commande associée au magasin "shop2" Plan du scénario: Changer le statut de la commande du bon magasin Quand "shop1" et "shop2" sont le même magasin Et la commande a comme statut "<statut>" Et le cooker "cooker" modifie le statut en "<new_statut>" Alors la commande a pour statut "<new_statut>" Exemples: |statut|new_statut| |... |... | |... |... | Scénario: Changer le statut de la commande du mauvais magasin Quand "shop1" et "shop2" ne sont pas le même magasin Alors une exception est levée ``` ## Milestone 2 #### Issue n°1 En tant qu'Acheteur, Je veux pouvoir me connecter #!!!!! Séparer en 2 ```gherkin #language: fr Fonctionnalité: Gérer la connexion Contexte: Etant donné un acheteur qui a déjà créé un compte. Scénario: Quand l'acheteur selectionne sur "se connecter" Alors l'acheteur rentre ses identifiants Scénario: Quand l'acheteur selectionne sur "se déconnecter" Alors l'acheteur est déconnecté ``` #### Issue n°2 En tant qu'Acheteur, Je veux pouvoir créer un compte ```gherkin #language: fr Fonctionnalité: Créer un compte Contexte: Etant donné un acheteur non inscrit Et des informations de connexions Et un compte avec l'adresse mél "jean@luc.fi" existant Scénario: Quand L'acheteur s'inscrit avec l'adresse mél "jean@marie.rn" et le mot de passe "monsupermotdepasse" Alors le compte utilisateur est créé Scénario: Quand L'acheteur s'inscrit sans rentrer d'informations Alors l'inscription échoue Scénario: Quand L'acheteur s'incrit avec l'adresse "jean@luc.fi" Alors l'inscription échoue Et indique que l'adresse mél "jean@luc.fi" est déjà utilisée. Scénario: Quand L'acheteur s'incrit avec un mot de passe déjà utilisé Alors l'incription échoue ``` #### Issue n°3 En tant qu'Acheteur, Je veux pouvoir créer un bon de commande ```gherkin #language: fr Fonctionnalité: Créer un bon de commande Contexte: Etant donné un acheteur ayant un panier Scénario: Quand l'Acheteur valide son panier contenant au moins un cookie Alors un bon de commande est créé ``` TODO : - *PRIO*: Scheduler cuisinier et temps de préparation de commandes **Y&J** - *PRIO*: schedule magasin **R** - *PRIO*: Plusieurs types des cookies/commandes (Recipe System) **T** - *PRIO*: On implémente les stocks (On ajoute une classe stock pour les ingrédients) un magasin est associé à un stock. Dans ce stock il y a les ingredients.Une recipe à des ingrédients **M** - **Y** Une recipe contient des ingredients qui ont un prix - **M** On implémente les stocks (On ajoute une classe stock pour les ingrédients) un magasin est associé à un stock. Dans ce stock il y a les ingredients.Une recipe à des ingrédients - **Théophile :** Plusieurs types des cookies/commandes (Recipe System) Singleton ? - **Robin trop smart** Annulation de commande - Plusieurs magasins (ShopSystem singleton): US - comptes utilisateurs etc... #### Issue n°7 ```gherkin #language: fr Fonctionnalité: Pouvoir choisir entre plusieurs types des cookies Contexte: Etant donné un acheteur souhaite commander des cookies Et plusieurs cookies disponibles sur le site Scénario: Quand souhaite voir tous les types de cookie Alors il obtient une liste des differents cookies Scénario: Quand l'acheteur ajoute un type de cookie à son panier Alors le nombre de cookie de augmente Scénario: Quand l'acheteur ajoute plusieurs types de cookie à son panier Alors le nombre de chaque cookie augmente ``` ```gherkin #language: fr Fonctionnalité: Consulter la composition d'un cookie Scénario: Étant donné Un acheteur veut consulter la composition d'un cookie Et le cookie "KFC" composé d'une pâte "Oatmeal", d'un arôme "Vanilla", d'une garniture "White chocolate", d'un type de mélange "Topped" et d'un type de cuisson "Chewy" Quand iel acheteur consulte un cookie Alors une liste d'ingrédients est affichée contenant | "Oatmeal" | "Vanilla" | "White chocolate" | "Topped" | Scénario: Étant donné Un acheteur veut consulter la composation d'un cookie Et le cookie "KFC" composé d'une pâte "Oatmeal", d'un arôme "Vanilla", d'une garniture "White chocolate", d'un type de mélange "Topped" et d'un type de cuisson "Chewy" Quand il manque une information dans la recette Alors une erreur est renvoyée Scénario: Étant donné Un acheteur veut consulter la composation d'un cookie Et le cookie "KFC" composé d'une pâte "Oatmeal", d'un arôme "Vanilla", des garnitures | "White chocolate" | "Reese’s buttercup" | "Milk chocolate" , d'un type de mélange "Topped" et d'un type de cuisson "Chewy" Quand il y a plus de 3 garnitures Alors une erreur est renvoyée ``` ```gherkin #language: fr Fonctionnalité: Consulter le prix d'un cookie Scénario: Étant donné Un acheteur veut connaitre le prix d'un cookie Et le cookie "KFC" composé d'une pâte "Oatmeal", d'un arôme "Vanilla", d'une garniture "White chocolate", d'un type de mélange "Topped" et d'un type de cuisson "Chewy" Et la pâte "Oatmeal" vaut 10 Et l'arôme"Vanilla" vaut 150 Et la garniture "White chocolate" vaut 30 Et le type de mélange "Topped" vaut 25 Et le type de cuisson "Chewy" vaut 25 Quand un acheteur veut connaitre le prix d'un cookie Alors le prix affiché est de 250 ``` ```gherkin #language: fr Fonctionnalité: Consulter la liste des Magasins et leur détail Contexte: Étant donné un acheteur Et une liste de magasins gérés par le système Scénario: Voir la liste des magasins Quand l'acheteur demande la liste des magasins au système Alors le système renvoie la liste des magasins ``` ```gherkin #language: fr Fonctionnalité: Choisir un Magasin lors de la commande Contexte: Étant donné un acheteur Et une liste de magasins gérés par le système Et la liste contient le magasin "shop1" et "shop2" Mais la liste ne contient pas le magasin "not_shop" Et un panier Scénario: Associer un nouveau magasin Quand aucun magasin n'est associé au panier Et l'acheteur associe un magasin "shop1" au panier Alors le magasin "shop1" est associé au panier Scénario: Changer le magasin Quand le magasin "shop1" est associé au panier Et l'acheteur associe le magasin "shop2" au panier Alors le magasin "shop1" est associé au panier Scénario: Erreur pendant le changement Quand l'acheteur associe le magasin "not_shop" au panier Alors une exception est levée ``` ```gherkin #language: fr Fonctionnalité: Contexte: Étant donné un acheteur ``` ```gherkin #language: fr Fonctionnalité: Le magasin a un stock d'ingrédient Context: Étant donné Un magasin ayant dans son stock 4 "taupes" Et une recette de cookie nécessitant 8 "topinanbours" Quand on affiche la liste des cookies du magasin Alors la recette n'apparait pas ``` #### Issue 12 ```gherkin #language: fr Fonctionnalité: Le temps de préparation des commandes. Étant donné Un cuisiné associé à un magasin Et ``` # Milestone 3 Prioritaire: - [x] Paiement **Y** - [x] Prix **R** - [x] Horaire de récup **J** - [x] List&lt;Order&gt; **Théophile** - [x] Schedule des cookers **J** - [ ] Réduc **M** - [x] loyalty program **Y** Nouvelles fonctionnalitées - [ ] Toogood **Théophile** - [ ] Cookies V2 XXL supplément bacon, la force est avec vous **J&Y** - [ ] multiplication du nb ingrédient par rapport au prix Evaluations: - sortir le diagramme de class - Critique du code - Le pourcentage de coverage - Finir vraiment le socle plus que les extensions - # Milestone 4 - Compte - Planning des cooker à revoir # Unit Test - [x] CookerPlanning **J** - [x] Task **J** - [x] AdminSystem **Théophile** - [x] OrderSystem **Théophile** - [x] RecipeSystem **Théophile** - [ ] ShopSystem - [x] Cart **M** - [x] Cooker **J** - [x] Ingredient **Y** - [x] Order **M** - [x] Recipe **Y** - [x] Schedule **J** - [x] Shop **M** 🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪