Bonjour,

Je me demande quelle est la meilleur option pour tester plusieurs cas de figure.

Cas 1

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
public static function authenticate(Request $request, Application $app)
  {
    $device_id = $request->get('device_id');
    $secret_code = $request->get('secret_code');
 
    if ($device_id == null)
      $app->abort(400, 'Device id missing');
 
    if ($secret_code == null OR !is_numeric($secret_code))
      $app->abort(400, 'Bad secret code');
 
    $ret = $app['db']->fetchAssoc('
      SELECT `t1`.`id`, `secret_code`
      FROM `clients` AS `t1`
      JOIN `payment_devices` AS `t2`
      ON `clients_id` = `t1`.`id`
      WHERE `t2`.`id` = ?', array($device_id));
    if (!$ret)
      $app->abort(404, 'User not found');
 
    if (intval($secret_code) !== intval($ret['secret_code']))
      $app->abort(401, 'Bad authentification');
 
    return $app->json(array(
      'id' => $ret['id']
      ));
  }
Cette fonction prend deux paramètres et indique si l'authentification est réussie.

Pour tester cette fonction deux solutions s'offrent à moi :
  1. Passer par une class intermédiaire qui fait office de "repository" et l'injecter dans la fonction.
    A la place de la requête SQL j'aurai quelque chose comme "$repo->getClient(...)" Cela me permettra de mock l'accès BDD.
  2. Utiliser une fixture importée par PHPUnit (dans ce cas un schéma et des données bdd connue à l'avance)



Case 2

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
public static function editSecretCode(Request $request, Application $app)
  {
[...]
    $req_update =  $app['db']->executeQuery('
      UPDATE `clients`
      SET `secret_code` = ?
      WHERE `id` = ?', array($new_secret_code, $user_id));
[...]
  }
Cette fonction modifie un champ dans la table des clients.
Comment tester cette modification ?
Puis-je supposer que si la méthode ne renvoi pas d'erreur c'est que l'UPDATE a été fait ?

J'aimerais si possible éviter de passer par les fixtures PHPUnit qui ralentissent le code et sont plus longues à mettre en place et à maintenir.

Précisions

Toutes ces fonctions sont des méthodes de webservice, quelle est la meilleur façon de tester :
  • Tester les appels comme un client le ferait et vérifier le retour
  • Tester chaque élément interne et partir du postulat que si chaque élément interne fonctionne alors l'ensemble est cohérent



Merci pour votre aide