-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy path002-project-management.spec.ts
100 lines (84 loc) · 3.54 KB
/
002-project-management.spec.ts
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import type { Project } from 'common/api/osrdEditoastApi';
import test from './logging-fixture';
import ProjectPage from './pages/project-page-model';
import { generateUniqueName } from './utils';
import readJsonFile from './utils/file-utils';
import { createProject } from './utils/setup-utils';
import { deleteProject } from './utils/teardown-utils';
import type { ProjectData } from './utils/types';
const projectData: ProjectData = readJsonFile('tests/assets/operationStudies/project.json');
test.describe('Validate the Operational Study Project workflow', () => {
let project: Project;
let projectPage: ProjectPage;
test.beforeEach(async ({ page }) => {
projectPage = new ProjectPage(page);
});
/** *************** Test 1 **************** */
test('Create a new project', async ({ page }) => {
// Go to projects page
await page.goto('/operational-studies/projects');
// Define a unique project name for the test
const projectName = generateUniqueName(projectData.name);
// Create a new project using the project page model and json data
await projectPage.createProject({
name: projectName,
description: projectData.description,
objectives: projectData.objectives,
funders: projectData.funders,
budget: projectData.budget,
tags: projectData.tags,
});
// Validate that the project was created with the correct data
await projectPage.validateProjectData({
name: projectName,
description: projectData.description,
objectives: projectData.objectives,
funders: projectData.funders,
budget: projectData.budget,
tags: projectData.tags,
});
// Delete the created project
await deleteProject(projectName);
});
/** *************** Test 2 **************** */
test('Update an existing project', async ({ page }) => {
// Create a project
project = await createProject(generateUniqueName(projectData.name));
await page.goto('/operational-studies/projects');
// Open the created project by name using the project page model
await projectPage.openProjectByTestId(project.name);
// Update the project data and save it
await projectPage.updateProject({
name: `${project.name} (updated)`,
description: `${project.description} (updated)`,
objectives: `${projectData.objectives} (updated)`,
funders: `${project.funders} (updated)`,
budget: '123456789',
tags: ['update-tag'],
});
// Navigate back to the Operational Studies page via the home page
await projectPage.backToHomePage();
await projectPage.goToOperationalStudiesPage();
// Reopen the updated project and validate the updated data
await projectPage.openProjectByTestId(`${project.name} (updated)`);
await projectPage.validateProjectData({
name: `${project.name} (updated)`,
description: `${project.description} (updated)`,
objectives: `${projectData.objectives} (updated)`,
funders: `${project.funders} (updated)`,
budget: '123456789',
tags: ['update-tag'],
});
// Delete the created project
await deleteProject(`${project.name} (updated)`);
});
/** *************** Test 3 **************** */
test('Delete a project', async ({ page }) => {
// Create a project
project = await createProject(generateUniqueName(projectData.name));
await page.goto('/operational-studies/projects');
// Find the project by name and delete it using the page model
await projectPage.openProjectByTestId(project.name);
await projectPage.deleteProject(project.name);
});
});