mirror of
https://github.com/plankanban/planka.git
synced 2025-07-21 14:19:44 +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 { Before, BeforeAll, AfterAll, After, setDefaultTimeout } = require('@cucumber/cucumber');
|
||||||
const { chromium } = require('playwright');
|
const { chromium } = require('playwright');
|
||||||
|
const { deleteProject } = require('./tests/acceptance/testHelpers/apiHelpers');
|
||||||
|
|
||||||
setDefaultTimeout(60000);
|
setDefaultTimeout(60000);
|
||||||
|
|
||||||
|
@ -27,6 +28,7 @@ Before(async function () {
|
||||||
|
|
||||||
// Cleanup after each scenario
|
// Cleanup after each scenario
|
||||||
After(async function () {
|
After(async function () {
|
||||||
|
await deleteProject();
|
||||||
await global.page.close();
|
await global.page.close();
|
||||||
await global.context.close();
|
await global.context.close();
|
||||||
});
|
});
|
||||||
|
|
|
@ -109,7 +109,8 @@
|
||||||
"@cucumber/cucumber": "^7.3.1",
|
"@cucumber/cucumber": "^7.3.1",
|
||||||
"@cucumber/pretty-formatter": "^1.0.1",
|
"@cucumber/pretty-formatter": "^1.0.1",
|
||||||
"@playwright/test": "^1.46.1",
|
"@playwright/test": "^1.46.1",
|
||||||
"playwright": "^1.46.1"
|
"playwright": "^1.46.1",
|
||||||
|
"axios":"^1.6.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
"@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