mirror of
https://github.com/plankanban/planka.git
synced 2025-07-19 05:09:43 +02:00
add test for dashboard
Signed-off-by: nabim777 <nabinalemagar019@gmail.com>
This commit is contained in:
parent
95c8175e8c
commit
db81ebcc7f
6 changed files with 114 additions and 1 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
const { Before, BeforeAll, AfterAll, After, setDefaultTimeout } = require('@cucumber/cucumber');
|
||||
const { chromium } = require('playwright');
|
||||
const { deleteProject } = require('./tests/acceptance/testHelpers/apiHelpers');
|
||||
|
||||
setDefaultTimeout(60000);
|
||||
|
||||
|
@ -27,6 +28,7 @@ Before(async function () {
|
|||
|
||||
// Cleanup after each scenario
|
||||
After(async function () {
|
||||
await deleteProject();
|
||||
await global.page.close();
|
||||
await global.context.close();
|
||||
});
|
||||
|
|
|
@ -109,7 +109,8 @@
|
|||
"@cucumber/cucumber": "^7.3.1",
|
||||
"@cucumber/pretty-formatter": "^1.0.1",
|
||||
"@playwright/test": "^1.46.1",
|
||||
"playwright": "^1.46.1"
|
||||
"playwright": "^1.46.1",
|
||||
"axios":"^1.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
Feature: dashboard
|
||||
As a admin
|
||||
I want to create a project
|
||||
So that I can manage project
|
||||
|
||||
Background:
|
||||
Given user has browsed to the login page
|
||||
And user has logged in with email "demo@demo.demo" and password "demo"
|
||||
|
||||
Scenario: create a new project
|
||||
When the user creates a project with name "testproject" using the webUI
|
||||
Then the created project "testproject" should be opened
|
29
client/tests/acceptance/pageObjects/DashboardPage.js
Normal file
29
client/tests/acceptance/pageObjects/DashboardPage.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
const util = require('util');
|
||||
|
||||
class dashboardPage {
|
||||
constructor() {
|
||||
this.createProjectIconSelector = `.Projects_addTitle__tXhB4`;
|
||||
this.projectTitleInputSelector = `input[name="name"]`;
|
||||
this.createProjectButtonSelector = `//button[text()="Create project"]`;
|
||||
this.projectTitleSelector = `//div[@class="item Header_item__OOEY7 Header_title__l+wMf"][text()="%s"]`;
|
||||
this.dashBoardHeaderSelector = `//div[@class="Projects_openTitle__PlaU6"][text()="%s"]`;
|
||||
}
|
||||
|
||||
async createProject(project) {
|
||||
await page.click(this.createProjectIconSelector);
|
||||
await page.fill(this.projectTitleInputSelector, project);
|
||||
await page.click(this.createProjectButtonSelector);
|
||||
}
|
||||
|
||||
async getProjectTilte() {
|
||||
return page.innerText(this.projectTitleSelector);
|
||||
}
|
||||
|
||||
async checkForProjectOpenedOrNot() {
|
||||
expect(
|
||||
await page.locator(util.format(this.dashboardPage.projectTitleInputSelector, project)),
|
||||
).toBeVisible();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = dashboardPage;
|
13
client/tests/acceptance/stepDefinitions/dashBoardContext.js
Normal file
13
client/tests/acceptance/stepDefinitions/dashBoardContext.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
const { When, Then } = require('@cucumber/cucumber');
|
||||
|
||||
const DashboardPage = require('../pageObjects/DashboardPage');
|
||||
|
||||
const dashboardPage = new DashboardPage();
|
||||
|
||||
When('the user creates a project with name {string} using the webUI', async function (project) {
|
||||
await dashboardPage.createProject(project);
|
||||
});
|
||||
|
||||
Then('the created project {string} should be opened', async function (project) {
|
||||
dashboardPage.checkForProjectOpenedOrNot(project);
|
||||
});
|
56
client/tests/acceptance/testHelpers/apiHelpers.js
Normal file
56
client/tests/acceptance/testHelpers/apiHelpers.js
Normal file
|
@ -0,0 +1,56 @@
|
|||
const axios = require('axios');
|
||||
|
||||
async function getXauthToken() {
|
||||
try {
|
||||
const res = await axios.post(
|
||||
'http://localhost:1337/api/access-tokens',
|
||||
{
|
||||
emailOrUsername: 'demo',
|
||||
password: 'demo',
|
||||
},
|
||||
{
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
},
|
||||
);
|
||||
return res.data.item;
|
||||
} catch (error) {
|
||||
return `Error requesting access token: ${error.message}`;
|
||||
}
|
||||
}
|
||||
|
||||
async function getProjectIDs() {
|
||||
try {
|
||||
const res = await axios.get('http://localhost:1337/api/projects', {
|
||||
headers: {
|
||||
Authorization: `Bearer ${await getXauthToken()}`,
|
||||
},
|
||||
});
|
||||
return res.data.items.map((project) => project.id);
|
||||
} catch (error) {
|
||||
return `Error requesting projectIDs: ${error.message}`;
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteProject() {
|
||||
try {
|
||||
const projectIDs = await getProjectIDs();
|
||||
await Promise.all(
|
||||
projectIDs.map(async (project) => {
|
||||
await axios.delete(`http://localhost:1337/api/projects/${project}`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${await getXauthToken()}`,
|
||||
},
|
||||
});
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} catch (error) {
|
||||
return `Error deleting project: ${error.message}`;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
deleteProject,
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue