1
0
Fork 0
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:
nabim777 2024-10-07 09:58:56 +05:45
parent 95c8175e8c
commit db81ebcc7f
No known key found for this signature in database
GPG key ID: 6EBA146273BEC371
6 changed files with 114 additions and 1 deletions

View file

@ -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();
});

View file

@ -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",

View file

@ -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

View 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;

View 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);
});

View 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,
};