- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
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 tester un autre modèle, le modèle de notre panier, donc le panier qui nouspermet d'ajouter des articles et de passer une commande. Donc ce qu'on veut faire ici, c'est
00:00:10 :s'assurer que quand on supprime le panier, on va changer les articles ici, puisque dans notre code,quand on supprime le panier, on prend les articles à l'intérieur du panier et on change ces deuxchamps ici, donc le champ Ordered et le OrderDate, pour indiquer qu'ils ont été commandés. Donc
00:00:26 :c'est le comportement qu'on va tester. Vous voyez que là, si je clique sur supprimer le panier et queje reviens ici dans l'interface d'administration et que j'actualise, on voit bien que ces champsont été modifiés. D'ailleurs, on peut se rendre compte par la même occasion que ce n'est pas
00:00:38 :forcément un comportement très logique, puisque quand on supprime le panier, on voudrait probablementjuste supprimer ces articles et ne pas les indiquer comme s'ils avaient été en fait commandés. Donc ça,
00:00:49 :c'est quelque chose qu'on pourrait modifier. Vous voyez qu'en faisant les tests, on se rend comptebien souvent aussi que notre code n'est pas forcément très cohérent. Dans ce cas-ci, ce qu'on
00:00:56 :voudrait c'est probablement juste supprimer les articles et par contre faire cette modificationsur les articles uniquement quand le panier est correctement validé, donc quand un paiement estcorrectement effectué. Dans ce cas-ci, on va laisser ça comme ça et on va juste faire le test qui va
00:01:10 :vous permettre de vérifier que quand on supprime le panier, ces éléments ont bien été modifiés.Ça va me permettre de vous montrer un autre cas de figure dans lequel on va faire une méthodesetup un peu plus compliquée que celle qu'on avait à l'intérieur de ProductTest ici. Donc ce que
00:01:25 :je vais faire, c'est coller le code et vous l'expliquer puisqu'il y a pas mal de choses àécrire. Je vais déjà également importer toutes les classes dont on va avoir besoin. Il y a la
00:01:31 :classe Shopper. Là encore, j'utilise le raccourci de PyCharm. Vous pouvez cliquer également surl'ampoule ici. On va importer Shopper, on va importer Cartes à partir de Store.Models également,
00:01:42 :et Order également. Attention là, puisque vous avez aussi la classe Order à l'intérieur dumodule Stripe. Dans ce cas-ci, c'est vraiment celle à l'intérieur de Store.Models. Qu'est-ce
00:01:52 :qu'on fait ici ? On va commencer par créer un utilisateur avec un email et un mot de passebidon, mais ça ce n'est pas très important. Vous pouvez vraiment mettre des valeurs par défaut ici.
00:02:01 :On utilise la méthode CreateUser pour créer un utilisateur. On va ensuite créer un produit. Là,on utilise les valeurs par défaut, à part le nom qu'on doit spécifier, tout le reste,la quantité, le prix, etc. On laisse les valeurs par défaut, ce n'est pas bien grave. Et ensuite,
00:02:16 :on va créer un panier. Donc là encore, Cartes.Objects.Create et on l'associe à notreutilisateur, donc l'utilisateur qu'on a créé juste au-dessus. Pour finir, on crée un article qui
00:02:26 :est relié à l'utilisateur et au produit, et on va l'ajouter dans notre panier. Et pour finir,on sauvegarde le panier. Donc ce que je veux faire ici, c'est rajouter un test qu'on va
00:02:35 :appeler TestOrdersClearedFromCartesWhenCartesIsDeleted. Donc là encore, j'insiste, n'hésitez pas à fairedes noms de tests très explicites pour qu'on comprenne bien de quoi il s'agit. Donc là,
00:02:50 :on va vérifier que les articles sont bien supprimés du panier quand le panier est supprimé. Donc là,comme je vous disais, on va tester deux choses. On va tester en fait si les deux champs qu'on avait
00:02:59 :dans l'interface d'administration sont bien modifiés. D'ailleurs là, du coup, ce n'est pasforcément très clair. Là, j'ai mis OrdersCleared, mais ce serait plutôt OrdersChangedFromCartes,on va l'enlever, on va dire JustTestOrderChangedWhenCartesIsDeleted. Donc ça me
00:03:13 :semble un peu plus explicite. Donc ce qu'on va faire, c'est déjà récupérer les primary keysde mes articles dans le panier, dans une liste, pour ensuite pouvoir vérifier, donc récupérer enfait ces articles et vérifier s'ils ont été correctement modifiés. Donc je vais faire Orders
00:03:27 :PK égal et on va faire une compréhension de liste. Et dans cette compréhension de liste,on va récupérer donc Order.PK ForOrder Inself.Cartes.Orders.All. Donc on récupère tout
00:03:39 :simplement les clés primaires, donc PK c'est Primary Key de mon article pour tous les articlesqui sont à l'intérieur du panier. Ensuite, on va supprimer le panier, donc Self.Cartes.Delete.
00:03:49 :Donc on supprime ainsi tous les articles associés à notre panier et on va ensuite boucler à traverstoutes ces clés primaires. Alors là, je vais mettre un S pour qu'on puisse bien dissocier les deux,
00:03:57 :on va dire pour Order.PK Inorders.PK comme ceci. Donc on va récupérer les articles,donc Order égal à Order.Object.Get et on met le PK égal à Order.PK. Donc comme ça,
00:04:09 :ça nous permet de récupérer l'article en question et on va vérifier si les champs ontbien été modifiés. Donc qu'est-ce qu'on souhaite vérifier ? On souhaite modifier si le champ ici de
00:04:18 :Date contient bien des informations et si le champ ici est coché. Donc pour ça, on va utiliser deuxassertions différentes de celles qu'on a utilisées précédemment. On va utiliser AssertIsNotNone,
00:04:29 :donc on vérifie en fait que Order.OrderDate n'est pas égal à nul, donc ne contient pas None. Doncça veut dire que s'il ne contient pas None, elle contient des informations. Donc c'est précisément
00:04:40 :ce qu'on souhaite vérifier, puisqu'on souhaite vérifier ici qu'on a bien des informations àl'intérieur de ce champ. Et la deuxième assertion qu'on va vérifier, c'est est-ce que cette valeur
00:04:47 :est égale à True. Donc pour ça, on va utiliser directement l'assertion AssertTrue et on va direOrder.Ordered comme ceci. Donc ça, c'est le champ Ordered qui nous indique que l'article a bien
00:04:58 :été commandé. Donc là encore, ça me permet de vous montrer qu'on peut généralement retomber surnos pieds avec différentes assertions. Là, on a utilisé AssertTrue. On aurait pu également
00:05:07 :réutiliser le AssertEqual en disant tout simplement Order.Ordered et en mettant True ici.On aurait pu également faire un AssertIs avec Order.Ordered égale à True. Donc là encore,
00:05:19 :ça marche puisque là, ici, l'égalité et Is seraient équivalentes. Donc là, je vais pas rentrerdans les détails, mais avec un booléen comme True, eh bien ça ne change pas grand-chose d'utiliserl'égalité. Donc qui est égale avec Python au symbole d'égalité comme ceci et Is ici qui est
00:05:32 :égale au mot-clé Is. Donc vous voyez qu'il y a plusieurs façons de faire la même chose. Dans cecas-ci, on veut juste vérifier que ce champ ici est égal à True. Donc on peut directement utiliser
00:05:41 :AssertTrue pour vérifier ce champ. Donc on va pouvoir tester notre fonction. Pour ça, je vaisme rendre dans le terminal et je vais lancer cette fois-ci la classe CartTest. Si je me rappelle bien,
00:05:52 :je l'avais appelé comme ça. Voilà, CartTest et on va lancer ici cette fonction précise. Donc.TestOrderChangeWhenCartIsDeleted. Je lance le test et ça passe. Donc ça veut dire que notre
00:06:03 :test fonctionne correctement et qu'on a bien ces champs qui ont été modifiés. Donc comme je vousdisais, là vraiment ce n'est pas forcément le bon comportement à tester puisque on le testeen fait quand on supprime un élément du panier. Ce serait peut-être plus logique de rajouter dans
00:06:17 :notre code une méthode qui nous permette de faire cette modification quand les articles ont étéachetés et de tester cette méthode. Là dans ce cas-ci, dans le code, j'avais fait cette
00:06:25 :modification sur les champs au moment de supprimer le panier. Donc c'est ce que je teste ici. Doncvoilà pour ce test un petit peu plus complexe avec une méthode de setup qui contient pas malplus d'éléments. Là encore, il faut bien vous rendre compte que tout ça va être lancé à chaque
00:06:38 :test que vous allez faire. Donc si vous avez d'autres tests à l'intérieur de cette classequi n'ont pas forcément besoin d'utiliser tout ça, eh bien il serait plus logique de mettre ceséléments à l'intérieur du test spécifique si vous n'allez pas les répéter puisque tout çava être fait avant chaque test, donc avant chaque méthode de la classe qui serait exécutée. Donc
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.