Skip to content

Commit 1fbcdbf

Browse files
committed
Added PlayWright tests for user file operations on the dashboard
1 parent 9152010 commit 1fbcdbf

File tree

2 files changed

+351
-0
lines changed

2 files changed

+351
-0
lines changed

tests/e2e/dashboard.spec.ts

Lines changed: 350 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,350 @@
1+
import { join } from "path";
2+
import { execSync } from "child_process";
3+
import { test, expect } from "@playwright/test";
4+
5+
//
6+
// Authentification, accès au tableau de bord et téléversement
7+
// de plusieurs fichiers avant chaque test.
8+
//
9+
test.beforeEach( async ( { page } ) =>
10+
{
11+
// Réinitialisation des comptes utilisateurs factices.
12+
execSync( "node scripts/create-fake-accounts.js" );
13+
14+
// Accès à la page d'authentification.
15+
await page.goto( "/authentication" );
16+
17+
// Clic sur l'onglet « Connexion ».
18+
await page.getByRole( "tab", { name: "Login" } ).click();
19+
20+
// Remplissage des champs de saisie de l'adresse électronique et du mot de passe.
21+
await page.getByPlaceholder( "[email protected]" ).fill( "[email protected]" );
22+
await page.getByPlaceholder( "@MyPassword123!" ).fill( "Florian4016" );
23+
24+
// Clic sur le bouton de connexion.
25+
await page.getByText( "Log in by password" ).click();
26+
27+
// Attente de la redirection vers la page du tableau de bord.
28+
await expect( page ).toHaveURL( "/dashboard" );
29+
30+
// Ouverture de la fenêtre de dialogue pour ajouter un fichier.
31+
await page.locator( "button" ).filter( { hasText: "Add a file" } ).click();
32+
33+
// Téléversement d'un fichier quelconque.
34+
await page
35+
.getByRole( "textbox", { name: "File Upload" } )
36+
.setInputFiles( [
37+
join( __dirname, "static/raccoon.jpg" ),
38+
join( __dirname, "static/duck.jpg" ),
39+
join( __dirname, "static/seagull.png" )
40+
] );
41+
await page.getByRole( "button", { name: "Upload" } ).click();
42+
await expect(
43+
page.locator( "[data-sonner-toast][data-type = success]" )
44+
).toHaveCount( 1 );
45+
} );
46+
47+
//
48+
// Publication du premier fichier téléversé.
49+
//
50+
test( "Publication d'un fichier téléversé", async ( { page } ) =>
51+
{
52+
// Ouverture du menu des actions pour rendre public le premier fichier téléversé.
53+
await page
54+
.getByRole( "button", { name: "Open action menu" } )
55+
.first()
56+
.click();
57+
await page.getByRole( "menuitem", { name: "Make Public" } ).click();
58+
await page.getByRole( "button", { name: "Confirm" } ).click();
59+
60+
// Attente de la réponse du serveur et de la notification de succès.
61+
await expect(
62+
page.locator( "[data-sonner-toast][data-type = success]" )
63+
).toHaveCount( 1 );
64+
65+
// Rechargement de la page pour fermer le menu des actions.
66+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
67+
await page.reload();
68+
69+
// Vérification de la publication du fichier.
70+
await expect( page.getByText( "public" ) ).toHaveCount( 1 );
71+
await expect( page.getByText( "private" ) ).toHaveCount( 2 );
72+
} );
73+
74+
//
75+
// Privatisation du premier fichier téléversé.
76+
//
77+
test( "Privatisation d'un fichier téléversé", async ( { page } ) =>
78+
{
79+
// Ouverture du menu des actions pour rendre privé le premier fichier téléversé.
80+
await page
81+
.getByRole( "button", { name: "Open action menu" } )
82+
.first()
83+
.click();
84+
await page.getByRole( "menuitem", { name: "Make Private" } ).click();
85+
await page.getByRole( "button", { name: "Confirm" } ).click();
86+
87+
// Attente de la réponse du serveur et de la notification de succès.
88+
await expect(
89+
page.locator( "[data-sonner-toast][data-type = success]" )
90+
).toHaveCount( 1 );
91+
92+
// Rechargement de la page pour fermer le menu des actions.
93+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
94+
await page.reload();
95+
96+
// Vérification de la privatisation du fichier.
97+
await expect( page.getByText( "private" ) ).toHaveCount( 3 );
98+
} );
99+
100+
//
101+
// Renommage du premier fichier téléversé.
102+
//
103+
test( "Renommage d'un fichier téléversé", async ( { page } ) =>
104+
{
105+
// Ouverture du menu des actions pour renommer le premier fichier téléversé.
106+
await page
107+
.getByRole( "button", { name: "Open action menu" } )
108+
.first()
109+
.click();
110+
await page.getByRole( "menuitem", { name: "Rename Resource" } ).click();
111+
await page.getByPlaceholder( "duck" ).fill( "dock" );
112+
await page.getByRole( "button", { name: "Update" } ).click();
113+
114+
// Attente de la réponse du serveur et de la notification de succès.
115+
await expect(
116+
page.locator( "[data-sonner-toast][data-type = success]" )
117+
).toHaveCount( 1 );
118+
119+
// Rechargement de la page pour fermer le menu des actions.
120+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
121+
await page.reload();
122+
123+
// Vérification du renommage du fichier.
124+
await expect( page.getByText( "dock" ) ).toHaveCount( 1 );
125+
} );
126+
127+
//
128+
// Accès à un fichier téléversé.
129+
//
130+
test( "Accès vers un fichier téléversé", async ( { page } ) =>
131+
{
132+
// Ce test n'est pas possible pour le moment car Playwright ne supporte pas
133+
// l'écriture/lecture du presse-papiers dans les tests automatisés.
134+
// https://github.com/microsoft/playwright/issues/15860
135+
test.skip();
136+
137+
// Ouverture du menu des actions pour accéder au premier fichier téléversé.
138+
await page
139+
.getByRole( "button", { name: "Open action menu" } )
140+
.first()
141+
.click();
142+
await page.getByRole( "menuitem", { name: "Copy access link" } ).click();
143+
await page.getByRole( "menuitem", { name: "Access file" } ).click();
144+
} );
145+
146+
//
147+
// Vérification de la présence d'une extension dans le lien d'accès.
148+
//
149+
test( "Vérification de l'extension dans le lien d'accès", async ( { page } ) =>
150+
{
151+
// Ce test n'est pas possible pour le moment car Playwright ne supporte pas
152+
// l'écriture/lecture du presse-papiers dans les tests automatisés.
153+
// https://github.com/microsoft/playwright/issues/15860
154+
test.skip();
155+
156+
// Accès aux paramètres utilisateur concernant le stockage.
157+
await page.goto( "/settings/storage" );
158+
159+
// Activation de l'affichage de l'extension dans le lien d'accès.
160+
await page.getByLabel( "File Extension Display" ).click();
161+
await page.getByRole( "button", { name: "Update" } ).click();
162+
163+
// Retour à la page du tableau de bord et accès au premier fichier téléversé.
164+
await page.goto( "/dashboard" );
165+
await page
166+
.getByRole( "button", { name: "Open action menu" } )
167+
.first()
168+
.click();
169+
await page.getByRole( "menuitem", { name: "Copy access link" } ).click();
170+
await page.getByRole( "menuitem", { name: "Access file" } ).click();
171+
} );
172+
173+
//
174+
// Suppression d'un fichier téléversé.
175+
//
176+
test( "Suppression d'un fichier téléversé", async ( { page } ) =>
177+
{
178+
// Ouverture du menu des actions pour supprimer le premier fichier téléversé.
179+
await page
180+
.getByRole( "button", { name: "Open action menu" } )
181+
.first()
182+
.click();
183+
await page.getByRole( "menuitem", { name: "Permanently Delete" } ).click();
184+
await page.getByRole( "button", { name: "Confirm" } ).click();
185+
186+
// Attente de la réponse du serveur et de la notification de succès.
187+
await expect(
188+
page.locator( "[data-sonner-toast][data-type = success]" )
189+
).toHaveCount( 1 );
190+
191+
// Rechargement de la page pour fermer le menu des actions.
192+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
193+
await page.reload();
194+
195+
// Vérification de la suppression du fichier.
196+
await expect( page.getByText( "private" ) ).toHaveCount( 2 );
197+
} );
198+
199+
//
200+
// Publication de tous les fichiers sélectionnés.
201+
//
202+
test( "Publication de tous les fichiers sélectionnés", async ( { page } ) =>
203+
{
204+
// Sélection de tous les fichiers téléversés.
205+
await page.getByLabel( "Select line" ).first().click();
206+
await page.getByLabel( "Select line" ).nth( 1 ).click();
207+
await page.getByLabel( "Select line" ).last().click();
208+
209+
// Ouverture du menu des actions pour rendre public l'ensemble
210+
// des fichiers sélectionnés.
211+
await page
212+
.getByRole( "button", { name: "Open action menu" } )
213+
.first()
214+
.click();
215+
await page.getByRole( "menuitem", { name: "Make Public" } ).click();
216+
await page.getByRole( "button", { name: "Confirm" } ).click();
217+
218+
// Attente de la réponse du serveur et de la notification de succès.
219+
await expect(
220+
page.locator( "[data-sonner-toast][data-type = success]" )
221+
).toHaveCount( 1 );
222+
223+
// Rechargement de la page pour fermer le menu des actions.
224+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
225+
await page.reload();
226+
227+
// Vérification de la publication des fichiers.
228+
await expect( page.getByText( "public" ) ).toHaveCount( 3 );
229+
} );
230+
231+
//
232+
// Privatisation de tous les fichiers sélectionnés.
233+
//
234+
test( "Privatisation de tous les fichiers sélectionnés", async ( { page } ) =>
235+
{
236+
// Sélection de tous les fichiers téléversés.
237+
await page.getByLabel( "Select line" ).first().click();
238+
await page.getByLabel( "Select line" ).nth( 1 ).click();
239+
await page.getByLabel( "Select line" ).last().click();
240+
241+
// Ouverture du menu des actions pour rendre public l'ensemble
242+
// des fichiers sélectionnés.
243+
await page
244+
.getByRole( "button", { name: "Open action menu" } )
245+
.first()
246+
.click();
247+
await page.getByRole( "menuitem", { name: "Make Public" } ).click();
248+
await page.getByRole( "button", { name: "Confirm" } ).click();
249+
250+
// Attente de la réponse du serveur et de la notification de succès.
251+
await expect(
252+
page.locator( "[data-sonner-toast][data-type = success]" )
253+
).toHaveCount( 1 );
254+
255+
// Rechargement de la page pour fermer le menu des actions.
256+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
257+
await page.reload();
258+
259+
// Sélection de tous les fichiers téléversés et privatisation.
260+
// Note : on doit d'abord rendre les fichiers publics pour les privatiser
261+
// après afin que le serveur refuse de privatiser un fichier déjà privé.
262+
await page.getByLabel( "Select line" ).first().click();
263+
await page.getByLabel( "Select line" ).nth( 1 ).click();
264+
await page.getByLabel( "Select line" ).last().click();
265+
266+
await page
267+
.getByRole( "button", { name: "Open action menu" } )
268+
.first()
269+
.click();
270+
await page.getByRole( "menuitem", { name: "Make Private" } ).click();
271+
await page.getByRole( "button", { name: "Confirm" } ).click();
272+
273+
// Attente de la réponse du serveur et de la notification de succès.
274+
await expect(
275+
page.locator( "[data-sonner-toast][data-type = success]" )
276+
).toHaveCount( 1 );
277+
278+
// Rechargement de la page pour fermer le menu des actions.
279+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
280+
await page.reload();
281+
282+
// Vérification de la privatisation des fichiers.
283+
await expect( page.getByText( "private" ) ).toHaveCount( 3 );
284+
} );
285+
286+
//
287+
// Renommage de tous les fichiers sélectionnés.
288+
//
289+
test( "Renommage de tous les fichiers sélectionnés", async ( { page } ) =>
290+
{
291+
// Sélection de tous les fichiers téléversés.
292+
await page.getByLabel( "Select line" ).first().click();
293+
await page.getByLabel( "Select line" ).nth( 1 ).click();
294+
await page.getByLabel( "Select line" ).last().click();
295+
296+
// Ouverture du menu des actions pour renommer l'ensemble des
297+
// fichiers sélectionnés.
298+
await page
299+
.getByRole( "button", { name: "Open action menu" } )
300+
.first()
301+
.click();
302+
await page.getByRole( "menuitem", { name: "Rename Resource" } ).click();
303+
await page.getByPlaceholder( "duck" ).fill( "dock" );
304+
await page.getByRole( "button", { name: "Update" } ).click();
305+
306+
// Attente de la réponse du serveur et de la notification de succès.
307+
await expect(
308+
page.locator( "[data-sonner-toast][data-type = success]" )
309+
).toHaveCount( 1 );
310+
311+
// Rechargement de la page pour fermer le menu des actions.
312+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
313+
await page.reload();
314+
315+
// Vérification du renommage des fichiers.
316+
await expect( page.getByText( "dock" ) ).toHaveCount( 3 );
317+
} );
318+
319+
//
320+
// Suppression de tous les fichiers sélectionnés.
321+
//
322+
test( "Suppression de tous les fichiers sélectionnés", async ( { page } ) =>
323+
{
324+
// Sélection de tous les fichiers téléversés.
325+
await page.getByLabel( "Select line" ).first().click();
326+
await page.getByLabel( "Select line" ).nth( 1 ).click();
327+
await page.getByLabel( "Select line" ).last().click();
328+
329+
// Ouverture du menu des actions pour supprimer l'ensemble des
330+
// fichiers sélectionnés.
331+
await page
332+
.getByRole( "button", { name: "Open action menu" } )
333+
.first()
334+
.click();
335+
await page.getByRole( "menuitem", { name: "Permanently Delete" } ).click();
336+
await page.getByRole( "button", { name: "Confirm" } ).click();
337+
338+
// Attente de la réponse du serveur et de la notification de succès.
339+
await expect(
340+
page.locator( "[data-sonner-toast][data-type = success]" )
341+
).toHaveCount( 1 );
342+
343+
// Rechargement de la page pour fermer le menu des actions.
344+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
345+
await page.reload();
346+
347+
// Vérification du renommage des fichiers.
348+
await expect( page.getByText( "public" ) ).toHaveCount( 0 );
349+
await expect( page.getByText( "private" ) ).toHaveCount( 0 );
350+
} );

tests/e2e/versions.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ test( "Vérification de la création d'une nouvelle version", async ( { page } )
5353
await expect( page.getByText( "153.56 KB", { exact: true } ) ).toHaveCount( 1 );
5454

5555
// Rechargement de la page pour fermer le menu des actions.
56+
// Source : https://github.com/radix-ui/primitives/issues/1836#issuecomment-1674338372
5657
await page.reload();
5758

5859
// Ajout d'une nouvelle version du fichier.

0 commit comments

Comments
 (0)