⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie, on va rajouter des tests dans la classe StoreTest ici,dans lesquels on va s'assurer que le bouton de connexion apparaît bienquand un utilisateur n'est pas connecté,puisqu'on veut s'assurer que la bonne page est affichée aux utilisateurs non connectés,qu'ils n'ont pas accès à des informations qu'ils n'ont pas à voir.
00:00:18 :Donc la première chose qu'on va tester, c'est tout simplementquand on est sur la page d'accueil et qu'on n'a pas de compte de connecté,par exemple si je me déconnecte ici,est-ce qu'on voit bien le bouton connexion sur la page ?
00:00:28 :Donc ça c'est la première chose qu'on va tester.La deuxième chose qu'on va tester, c'est si là encore on a un utilisateur qui est déconnectéet qu'on essaye d'accéder à la boutique de panier,donc la boutique de panier qui est dans boutique-carte,eh bien on va s'assurer qu'on est bien redirigé
00:00:42 :et là vous voyez qu'on a en fait une erreurpuisqu'on essaye d'accéder à des élémentset on a un objet anonymous user auquel on ne peut pas accéder.
00:00:50 :Donc là encore vous voyez qu'on a en fait une erreur qu'on va pouvoir régler avec le test.Nous ce qu'on va vouloir faire, c'est quand un utilisateur n'est pas connecté,le rediriger vers la page d'accueil.
00:00:59 :Donc on va faire ça, on va le mettre en place dans la vueet on va également tester cette vue pour vérifier qu'on est bien redirigé vers la page d'accueil.
00:01:06 :Donc la première chose qu'on va faire,c'est déjà tester que quand on va sur la page d'accueil et qu'on n'est pas connecté,on a le bouton connexion qui apparaît.
00:01:13 :Donc je vais faire un nouveau test dans la classe StoreTestet je vais l'appeler tout simplementTestConnectionLinkShownWhenUserNotConnected.Donc qu'est-ce qu'on va faire ?On va faire un Self.Client.Get
00:01:26 :et on va aller vers la page d'accueil.Donc je vais utiliser la fonction Reversepour récupérer l'URL de la page d'accueil,donc de la page index,et on va récupérer la réponse dans une variable qu'on va appeler resp.
00:01:38 :Donc là c'est exactement la même chose que ce qu'on avait fait ici dans ce test.Et ce qu'on va faire, c'est vérifier,donc avec AssertIn,qu'on a le mot connexionqui est à l'intérieur de la réponse,donc à l'intérieur de StringResp.Content.
00:01:52 :Donc là c'est exactement la même chose que ce qu'on avait fait ici également.On s'assurait qu'on avait bien le nom du produitqui était dans le contenu de la page.
00:01:59 :Donc là on s'assure tout simplementqu'on a le mot connexion qui apparaît dans le contenu de la page.Donc on va déjà lancer ce test ici.
00:02:06 :Je vais retourner dans mon terminal.Donc là on est bien dans StoreTest,dans le fichier TestViews.Ensuite on a la classe StoreTest,et donc StoreTest comme ceci,et ensuite cette fonctionTestConnectionLinkShownWhenUserNotConnected.
00:02:20 :Donc là si on va voir le setup,dans le setup on fait juste créer un produitet on ne log aucun utilisateur.Donc normalement on devrait accéder à cette page d'indexsans avoir aucun utilisateur de connecté.
00:02:31 :Donc je lance,et vous voyez que le test a correctement été effectué.Le deuxième test qu'on va faire,c'est comme je vous le disais,de vérifier qu'on est bien redirigéquand on essaie d'accéder au panier.
00:02:41 :Donc comme on a vu,effectivement on avait un petit problème actuellement.Donc ça, ça doit être dans Store,dans Views.py.Quand on essaie d'accéder ici à cette vue carte,vous voyez qu'on essaie d'accéder aux articlesen passant Request.user,
00:02:53 :mais ça ne fonctionne pas.Donc là il y a plusieurs façons de régler ce cas de figure.La première chose qu'on pourrait faire,c'est une structure conditionnelleet vérifier par exempleif Request.user.isAnonymous,
00:03:03 :comme ceci,et bien là on pourrait faire un returnet rediriger vers la vue d'index.Ça c'est la première chose qu'on peut faire.Si je reviens sur ma boutique,que je vais donc sur slash boutique slash carte,là vous voyez qu'on est bien redirigévers la page d'accueil.
00:03:18 :Ça c'est la première chose qu'on pourrait faire.La deuxième chose qu'on pourrait faire,pour remplacer cette structure conditionnelle,c'est d'utiliser le décorateurLogin Required.Et là si je fais option entréepour importer ce décorateur,ça va avoir le même effet,c'est-à-dire qu'on va protéger cette vuepour forcer à être connecté,
00:03:37 :pour pouvoir y accéder.Donc là si je reviens sur la page,je vais accéder à boutique slash carte.Là vous voyez qu'on est redirigévers une adresse qui n'est pas trouvée,par défaut il va rediriger vers account slash login,et c'est une adresse d'URLqui n'est pas à l'intérieur de notre application.
00:03:52 :Nous on a l'application account,qu'on avait fait dans le fichier urls.py,on avait account qui incluaitles URL de l'application account,et dans ces URL ici, on avait le login.
00:04:04 :Donc là effectivement,si on changeait ce nom ici d'URL,qu'on mettait account,là ça marcherait,puisque si je reviens ici,que j'essaie d'accéder à boutique carte,et que je valide,là on est bien redirigé vers cette URL qui existe.
00:04:15 :Mais moi j'aimerais bien garder en fait ce account sans le S,donc ce qu'on peut faire en fait,c'est aller dans le fichier de settings,donc dans ce fichier settings.py,
00:04:23 :rajouter une variable,qui va modifier l'URL de redirectionquand on va vouloir se connecter.Donc cette variable c'est login URL,et on va lui passer une chaîne de caractère,donc on va lui dire account slash login,et comme ça en fait,on va rediriger vers cette vue,dans le cas où on utilise le décorateur login required.
00:04:41 :On pourrait le passer également directement au décorateur,donc ici on pourrait dire login URL.Donc ça peut être pratique,si vous voulez avoir des adresses d'URL précises,en fonction des vues.
00:04:52 :Dans notre cas,on va toujours rediriger vers la même vue de login,puisqu'on n'en a qu'une seule.Donc on va le mettre directement dans le fichier de settings ici.
00:04:59 :Donc si je reviens,là cette fois-ci que j'essaie d'accéder à boutique slash carte,alors là ça ne fonctionne pas,puisqu'en fait on a oublié un slash,là vous voyez en fait que l'URL est rajoutée après boutique carte,donc en fait il ne faut pas oublier le premier slash ici,
00:05:12 :avant le account,pour que ça soit correctement pris en compte,puisque ça va être une URL absolue,on ne va pas la rajouter après coup,on va vraiment uniquement vouloir rediriger vers le nom de domaine,et ensuite cette URL ici.
00:05:25 :Donc je reviens,j'essaie d'accéder de nouveau à boutique slash carte,et là on est bien redirigé vers account slash login.Donc on va pouvoir se connecter pour accéder à la vue.
00:05:34 :Donc voilà pour cet ajout qui nous permet de rediriger vers la vue de login,avec ce décorateur,et maintenant on va pouvoir rajouter le test qui nous permet de tester tout ça.
00:05:43 :Donc on va le rajouter à la suite ici,on va lui dire test redirect when anonymous user access cart view,donc là encore un nom à rallonge,mais ça permet de vraiment bien comprendre ce que l'on teste.
00:05:56 :Donc là on va accéder à la vue du panier,donc avec une requête get,on va utiliser reverse,et le nom de la vue c'est tout simplement store.cart,
00:06:06 :puisque là on va chercher dans le fichier urls.py,on a en fait une redirection vers la boutique,et vers le fichier stores.url,et ce fichier si je vais voir dans urls.py,
00:06:16 :le app name c'est store.Donc le nom du cart qui est quelque part ici,qui est juste au dessus,le nom complet ça va être la concaténation du nom de l'application,et le nom de l'URL ici.
00:06:27 :Donc on va rediriger vers store.cart,on va récupérer la réponse là encore dans une variable qu'on va appeler resp,et on va faire un assert equal,et dans ce cas-ci on va vérifier le status code,donc on va vérifier qu'on a un statut,non pas de 203 mais de 302,
00:06:42 :donc 302 c'est un statut de redirection,puisque là en fait on va accéder à cette vue,mais ensuite on va être redirigé avec le décorateur vers la vue de account.
00:06:51 :Donc on va vérifier ici qu'on a d'abord une redirection,et après on va vérifier qu'on est bien redirigé vers la bonne vue,donc pour ça on a une assertion qui s'appelle assert redirects,donc vous voyez qu'on a vraiment tous les cas de figure qui sont gérés par ces assertions,
00:07:05 :donc là on va vérifier qu'on est bien redirigé vers la bonne vue.Donc on va donner en premier la réponse, donc resp,et en deuxième on va donner l'URL.
00:07:13 :Donc l'URL, qu'est-ce que c'est ? C'est cette URL ici au complet,donc je vais la copier et je vais la mettre dans une chaîne de caractère ici,et donc là on peut faire différentes choses,on pourrait mettre directement la chaîne de caractère,le problème c'est que si jamais on change l'URL,
00:07:26 :donc si je reviens dans accounts URL,si par exemple je change le login ici,ou que dans le shop URL je change le count,et bien ça ne fonctionnera plus ici.
00:07:34 :Pareil pour le boutique slash cart,si on change l'URL dans shop,donc si on change le boutique ici,ou qu'on change le cart,l'URL ne fonctionnera plus.
00:07:43 :Donc moi ce que je vais préférer faire,c'est faire un ifstring et insérer à ces deux endroits,donc entre le next,donc avant le next et après le next ici,insérer les URL de façon dynamique,grâce à la fonction reverse.
00:07:55 :Donc je vais mettre des accolades ici,je vais enlever également l'URL ici avec la boutique,et mettre des accolades,et à l'intérieur on va utiliser donc la fonction reverse,et on va indiquer ici accounts.login,
00:08:07 :donc je vais vérifier juste que c'est bien accounts et pas accounts,non ici c'est bien accounts,donc je me plante toujours,puisque en fait c'est pas forcément très évident,mais là j'ai mis accounts en S en fait pour l'URL,et pour le app name j'ai mis accounts avec un S.
00:08:20 :Donc je me plante souvent quand je fais cette application,donc accounts.login,et ici on va avoir le reverse de store.cartes.Et on va vérifier également que là on a un status code de 302,qui là encore est le statut de la redirection.
00:08:36 :Donc comme ça,ça nous permet d'avoir quelque chose d'un peu plus dynamique,et on va donc s'assurer qu'on est redirigé vers la bonne URL,avec ce assert redirect.
00:08:44 :Donc on va tester tout ça,je vais copier le nom de la fonction,je vais revenir dans le terminal,et je vais tester précisément ce test ici.
00:08:51 :Donc hop, on efface tout ça,on met le nom de cette méthode,je valide,et là on a un fail,alors on a un fail puisque account is not registered,alors oui c'est parce que là j'ai pas mis le S,donc je vous avais dit ici que dans accounts,
00:09:04 :c'est bien accounts avec un S,mais je n'avais pas fait la modification ici.Donc le test n'a pas fonctionné,logiquement,je relance,et là ça marche,tout est passé,donc on est bien redirigé vers la bonne vue,et si j'enlève le login required pour vous montrer,vous allez voir que le test ne passera plus,
00:09:19 :normalement,puisqu'on ne sera pas redirigé vers la bonne vue,voilà,fail,vous voyez en fait ici on retrouve tout simplementl'erreur qu'on avait avec le anonymous user,object is not iterable.
00:09:29 :Donc on va remettre notre login required,on va relancer le test une dernière foispour s'assurer que tout est bon,c'est bon,et donc voilà,on a pu tester notre vue,donc une vidéo là encore un petit peu longue,puisqu'on a dû modifier notre vue en conséquence,mais vous voyez que ça nous permet là encore