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.