Appliquer la notion
Une application bancaire permet d'acheter des produits grâce à la fonction buy
que voici :
1
function checkAccount (account, amount) {
2
if (account.balance >= amount) {
3
return true
4
}
5
return false
6
}
7
8
function buy (account, product) {
9
// Copie de la variable account
10
const newAccount = { account }
11
if (checkAccount(newAccount, product.price)) {
12
newAccount.balance = newAccount.balance - product.price
13
console.log('Produit acheté:', product.name)
14
} else {
15
console.log('Echec de la transaction')
16
}
17
return newAccount
18
}
19
Les enregistrements gérant un compte sont de la forme suivante :
1
let account = {
2
owner: 'Pierre',
3
balance: 10
4
}
Les produits sont de la forme suivante :
1
const product = {
2
name: 'Traces',
3
price: 19
4
}
Question
Écrire le code permettant de créer un compte avec une balance de 100 €, ainsi qu'un produit d'une valeur de 60 €.
Solution
1
let acc = {
2
owner: 'Jean Dupont',
3
balance: 100
4
}
5
6
const prod = {
7
name: 'Carte graphique',
8
price: 60
9
}
Question
Écrire le test fonctionnel testBuy
de la fonctionnalité de paiement, qui vérifie qu'un solde suffisant valide l'achat et qu'un solde insuffisant le faire échouer.
Tenter d'acheter deux fois le produit avec le compte créé précédemment.
Vérifier que le test échoue.
Solution
Une implémentation possible est la suivante :
1
function testBuy () {
2
let acc = {
3
owner: 'Jean Dupont',
4
balance: 100
5
}
6
const prod = {
7
name: 'Carte graphique',
8
price: 60
9
}
10
acc = buy(acc, prod)
11
// Paiement réussi
12
if (acc.balance !== 40) {
13
console.log('Test buy échoué sur le premier paiement')
14
return false
15
}
16
17
acc = buy(acc, prod)
18
// Echec du paiement
19
if (acc.balance !== 40) {
20
console.log('Test buy échoué sur le second paiement')
21
return false
22
}
23
console.log('Test réussi')
24
return true
25
}
26
27
testBuy()
Son exécution renvoie :
1
Produit acheté: Carte graphique
2
Echec de la transaction
3
Test réussi
Ce qui valide que la fonctionnalité se comporte comme attendue.