Nous sommes toujours dans notre phase de test d’intégration. Après créer la base de données de test (une base en mémoire), nous avons souhaité valider l’appel de connexion avec login et mot de passe.
Or, nous avons rencontré un roc : malgré notre utilisateur insérer en base manuellement : le test ne passait jamais !
Rappel du contexte
Nous en sommes à valider notre connexion avec Login et Mot de passe. L’idée ici, est de valider de bout en bout l’appel (test e2e).
Voici le code mise en place :
Et du côté de notre DataLayer :
Et malgré tout ça, notre retour est toujours NotSucceeded. Pourquoi ?
La faute à UserManager
Testons d’abord l’appel Entities suivant :
Devinez quoi ? On a bien un utilisateur de retourner dans testUser ! Piste intéressante, n’est ce pas ?
Puis, continuons avec un test depuis le UserManager, et non le SignInManager :
Et là, comme par “magie”, nous n’avons aucun utilisateur de retourner dans dataUser. Comment se fait-ce ? (parce que Cul répondrez vous ! )
Il se passe quelques chose dans le UserManager, assurément !
Venez avec moi, allons jeter un coup d’oeil, soyons curieux-euses, dans le code source d’Identity.
Il utilise la méthode NormalizeEmail ! Le malin, il ne nous l’avait pas dit …
Alors testons avec ce code, en complétant notre utilisateur de Fake en base de données :
Et …. et … ça ne fonctionne toujours pas ! Sacre bleu !
Il nous manque un point : la normalization de notre Email et de notre UserName !
Et nous voilà avec ce code :
Et … et … ça fonctionne : Hurray !!
Aller plus loin avec ILookupNormalizer
On peut aller plus loin avec une classe qui implémente ILookupNormalizer (il en existe une de base qui est injectée avec Identity).