Les bons comptes font les bons amis
Voici le brief de ton client qui souhaite lancer une application web de gestion des dettes entre amis.
Cette application peut-être utilisée dans tous les contextes où plusieures personnes ont des dépenses en commun.
Par exemple:
- quand un.e colocataire règle la facture d'electricité et qu'il faut répartir le montant entre les trois occupant.e.s
- quand un groupe d'amis part en road trip le temps d'un weekend à l'issue duquel il faut rembourser Marcel qui a payé l'essence, Jeanne qui a reglé la notes des sandwichs, ...
- quand un.e ami.e achète ma place de concert parce que c'était les dernières et qu'il faut que je la rembourse
- ...
Tu es développ.eur.euse web au sein d'une entreprise spécialisée dans le dévelopement agile de MVP pour des startups. L'objectif est donc de réaliser un prototype fonctionnel de cette application afin que le client puisse la mettre entre les mains de beta testeurs et valider le plus rapidement possible et à moindre frais que son idée à du potentiel... ou pas.
Un product owner interne a établis avec le client la liste des histoires utilisateur suivantes que le prototype doit implémenter en priorisant par ordre de plus grande valeur ajoutée. Les sénarios de validation des histoires utilisateur sont en cours d'écriture et seront alimentés d'ici le début du sprint final par le product owner. Les 3 premières histoires utilisateur sont indispensables pour lancer le prototype. Le reste du backlog est à développer si il te reste du temps.
Maintenant c'est à toi de jouer !
Le code du prototype sera repris par une équipe internationale en cours de recrutement.
- Le code doit donc être en anglais (nom de variables, de classes, de méthodes, ...)
- Le README à la racine du projet doit à minima:
- lister les dépendances du projet (en environnement de dev et de production): techno et version de base de donnée, version de ruby, etc
- les étapes pour initialiser l'application en developpement lorsque toutes les dépendances sont déjà installées (on suppose que les futurs développeurs savent installer ruby, rails et toutes les dépendances nécessaires) et avoir un serveur local qui tourne
- la commande pour exécuter les tests
- les instructions pour déployer l'application en production (avec postgresql) sur Scalingo, ou Heroku.
- Les tests ne sont pas obligatoires, mais le client est prêt à débourser 25% de budget en plus si tous les scénarios de validation sont testés via des tests de feature. Les tests unitaires de modèles sont un plus.
Le livrable contient le lien du repo sur github et le lien vers l'application déployée sur heroku ou scalingo.
Voici la liste des histoires utilisateur depuis la plus prioritaire à la moins prioritaire, avec à chaque fois le/les scénario de validation qui font office de critères d'acceptation.
Pose tes questions en commentaire de ce gist si il te manque des infos pour implémenter une histoire utilisateur.
En tant qu' utilisa.teur.trice, je peux ajouter une dépense et l'affecter à un.e ou plusieurs amis, afin de ne plus avoir à m'en souvenir et me libérer l'esprit.
-
Quand je visite la page
/
Alors la page contient le texteLes Bons Amis
-
Soit un
User
s existant.. Quand je visite la page/
Et que je clique sur le boutonAjouter une dépense
Alors je suis redirigé vers la page/expenses/new
Et le texteNouvelle dépense
est affiché -
Soit trois
User
s existants, Camille, Paul et Marine
Quand je visite la page/expenses/new
Et que je sélectionne Camille comme payeuse de la dépense
Et que je sélectionne Camille, Paul et Marine comme bénéficiaires de la dépense
Et que je saisis237,42
dans le champ du montant en euros
Et que je saisisFacture électricité Enercoop 2ème trimestre 2017
dans le champ du titre
Et que je clique surEnregistrer
Alors une nouvelleExpense
est créée
Et sa méthodeamount
renvoie237,42
Et sa méthodetitle
renvoieFacture électricité Enercoop 2ème trimestre 2017
Et sa méthodepayer
renvoie unUser
qui correspond à Camille
Et sa méthodebeneficiaries
renvoie une liste deUser
s qui inclus Camille, Paul et Marine.
Conseil: Utiliser la gem money-rails qui permet d'utiliser simplement la gem money sur les attributs d'un modèle de Rails. En effet utiliser un float pour faire des calculs sur des montants d'argent est rarement une bonne idée. Comprendre pourquoi.
Conseil: Lire le guide sur les associations
Info: toutes les devises sont en euros dans le cadre du prototype.
En tant qu' utilisa.teur.trice, je peux visualiser la balance entre un.e ami.e et moi, afin de savoir qui va régler la note du resto.
- Soit deux
User
s existants, Marinne (id: 1) et Paul (id: 2)
Et uneExpense
existante d'un montant de35,73
affectée à Paul et Marine, payée par Paul
Et uneExpense
existante d'un montant de10,21
affectée à Paul et Marine, payée par Marine
Et uneExpense
existante d'un montant de18,00
affectée à Paul et Marine, payée par Marine
Quand je visite la page/friends/2?current_user_id=1
Alors la page contient le texteBalance
Et la page contient le texteTu dois 3,76€ à Paul
Conseil: Lire le guide pour savoir comment accéder aux paramètres passés par la query d'URL lorsqu'on est dans le controlleur.
En tant qu' utilisa.teur.trice, je peux visualiser ma balance globale auprès de tous mes amis, afin de savoir si je suis un.e ami.e digne de ce nom ou si je suis un.e profit.eur.euse.
- Soit trois
User
s existants, Marinne (id: 1) Camille et Paul
Et uneExpense
existante d'un montant de35,73
affectée à Paul et Marine, payée par Paul
Et uneExpense
existante d'un montant de10,21
affectée à Camille et Marine, payée par Marine
Et uneExpense
existante d'un montant de18,00
affectée à Marine, Paul et Camille, payée par Camille
Quand je visite la page/?current_user_id=1
Alors la page contient le texteBalance globale
Et la page contient le texte18,76€
Et la page contient le texteTu dois 23,87€ à tes amis
Et la page contient le texteTes amis te doivent 5,11€
En tant qu' utilisa.teur.trice, je peux me connecter avec mon email et mon mot de passe, afin de restreindre l'accès à certaines informations me concernant.
-
Soit aucun utilisateur connecté
Quand je visite la page/
Alors je suis redirigé vers la page/login
Et la page contient le texteSe connecter
Et la page contient le texteEmail
Et la page contient le texteMot de passe
-
Soit un
User
existant, (email: "[email protected]", password: "secret", firstname: "Camille")
Quand je visite la page/login
Et que je saisis[email protected]
dans le champ email
Et que je saisissecret
dans le champ mot de passe
Alors je suis redirigé vers la page/
Et la page contient le texteCamille
-
Re-valider les scénarios dans 2 et 3 en supprimant le paramètre
?current_user_id=
des URLs et en démarrant le sénario avec un utilisateur connecté.
Conseil: Utiliser la gem Clearance pour faciliter la mise en place de l'authentification.
En tant qu' utilisa.teur.trice, je peux recevoir un email lorsqu'un.e ami.e m'ajoute à une dépense, afin d'être alerté que j'ai une nouvelle dette.
- Soit une
User
Camille connectée
Et un autreUser
existant, Paul (email: [email protected])
Quand je visite la page/expenses/new
Et que je sélectionne Camille comme payeuse de la dépense
Et que je sélectionne Camille, Paul comme bénéficiaires de la dépense
Et que je saisis42,00
dans le champ du montant en euros
Et que je saisisLocation sono crémaillère
dans le champ du titre
Et que je clique surEnregistrer
Alors un email est envoyé à[email protected]
Et le corps du mail contientLocation sono crémaillère
Et le corps du mail contient21,00€
Conseil: il est possible de prévisualiser le rendu final d'un email dans Rails.
En tant qu' utilisa.teur.trice, je peux visualiser la liste de toutes les dépenses auxquelles je suis affecté, afin de controler que j'ai bien bénéficié du service/produit lié à chaque dépense.
- TODO
En tant qu' utilisa.teur.trice, je peux contester une dépense qui m'a été affecté, afin de ne pas payer pour une dépense qui ne me concerne pas.
- TODO
En tant qu' utilisa.teur.trice, je peux modifier une dépense dont je suis l'auteur.e, afin de rectifier (son montant, mes amis impactés) si j'ai fait une erreur.
- TODO