# User Stories

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<Order> **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**
🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪🍪