chore: add linter to tests

This commit is contained in:
Jakub P.
2024-07-18 12:39:04 +02:00
parent 27610c002c
commit 0a1461231b
22 changed files with 66 additions and 33 deletions

View File

@@ -0,0 +1,6 @@
node_modules
build
.eslintrc.js
playwright-report/*

View File

@@ -0,0 +1,25 @@
{
"root": true,
"env": {
"node": true,
"es6": true
},
"extends": [
"eslint:recommended",
"prettier"
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
"semi": [
2,
"always"
],
"indent": [
"error",
2
]
}
}

View File

@@ -14,6 +14,6 @@ export class DeleteUserModal {
async close () {
await this.page.click('body', {
position: { x: 10, y: 10 }
})
});
}
}

View File

@@ -1,4 +1,4 @@
const { AdminCreateRolePage } = require('./create-role-page')
const { AdminCreateRolePage } = require('./create-role-page');
export class AdminEditRolePage extends AdminCreateRolePage {
constructor (page) {

View File

@@ -23,6 +23,7 @@ export class AdminEditUserPage extends AuthenticatedPage {
*/
async waitForLoad(fullName) {
return await this.page.waitForFunction((fullName) => {
// eslint-disable-next-line no-undef
const el = document.querySelector("[data-test='full-name-input']");
return el && el.value === fullName;
}, fullName);

View File

@@ -25,5 +25,5 @@ export const adminFixtures = {
adminCreateRolePage: async ({ page}, use) => {
await use(new AdminCreateRolePage(page));
},
}
};

View File

@@ -87,6 +87,7 @@ export class AdminUsersPage extends AuthenticatedPage {
await this.firstPageButton.click();
}
// eslint-disable-next-line no-constant-condition
while (true) {
if (await this.usersLoader.isVisible()) {
await this.usersLoader.waitFor({
@@ -108,6 +109,7 @@ export class AdminUsersPage extends AuthenticatedPage {
async getTotalRows() {
return await this.page.evaluate(() => {
// eslint-disable-next-line no-undef
const node = document.querySelector('[data-total-count]');
if (node) {
const count = Number(node.dataset.totalCount);
@@ -121,6 +123,7 @@ export class AdminUsersPage extends AuthenticatedPage {
async getRowsPerPage() {
return await this.page.evaluate(() => {
// eslint-disable-next-line no-undef
const node = document.querySelector('[data-rows-per-page]');
if (node) {
const count = Number(node.dataset.rowsPerPage);

View File

@@ -25,7 +25,7 @@ export class ApplicationsModal extends BasePage {
if (this.applications[link] === undefined) {
throw {
message: `Unknown link "${link}" passed to ApplicationsModal.selectLink`
}
};
}
await this.searchInput.fill(link);
await this.appListItem.first().click();

View File

@@ -1,10 +1,11 @@
const { BasePage } = require('../../base-page');
const { AddGithubConnectionModal } = require('./add-github-connection-modal');
const { expect } = require('@playwright/test');
export class GithubPage extends BasePage {
constructor (page) {
super(page)
super(page);
this.addConnectionButton = page.getByTestId('add-connection-button');
this.connectionsTab = page.getByTestId('connections-tab');
this.flowsTab = page.getByTestId('flows-tab');
@@ -38,7 +39,7 @@ export class GithubPage extends BasePage {
await this.flowsTab.click();
await expect(this.flowsTab).toBeVisible();
}
return await this.flowRows.count() > 0
return await this.flowRows.count() > 0;
}
async hasConnections () {

View File

@@ -1,4 +1,5 @@
const { BasePage } = require('../../base-page');
const { expect } = require('@playwright/test');
export class GithubPopup extends BasePage {
@@ -11,7 +12,7 @@ export class GithubPopup extends BasePage {
}
getPathname () {
const url = this.page.url()
const url = this.page.url();
try {
return new URL(url).pathname;
} catch (e) {
@@ -34,17 +35,17 @@ export class GithubPopup extends BasePage {
loginInput.click();
await loginInput.fill(process.env.GITHUB_USERNAME);
const passwordInput = this.page.getByLabel('Password');
passwordInput.click()
passwordInput.click();
await passwordInput.fill(process.env.GITHUB_PASSWORD);
await this.page.getByRole('button', { name: 'Sign in' }).click();
// await this.page.waitForTimeout(2000);
if (this.page.isClosed()) {
return
return;
}
// await this.page.waitForLoadState('networkidle', 30000);
this.page.waitForEvent('load');
if (this.page.isClosed()) {
return
return;
}
await this.page.waitForURL(function (url) {
const u = new URL(url);
@@ -55,7 +56,7 @@ export class GithubPopup extends BasePage {
}
async handleAuthorize () {
if (this.page.isClosed()) { return }
if (this.page.isClosed()) { return; }
const authorizeButton = this.page.getByRole(
'button',
{ name: 'Authorize' }
@@ -69,7 +70,7 @@ export class GithubPopup extends BasePage {
) && (
u.searchParams.get('client_id') === null
);
})
});
const passwordInput = this.page.getByLabel('Password');
if (await passwordInput.isVisible()) {
await passwordInput.fill(process.env.GITHUB_PASSWORD);
@@ -87,6 +88,6 @@ export class GithubPopup extends BasePage {
};
}
}
await this.page.waitForEvent('close')
await this.page.waitForEvent('close');
}
}

View File

@@ -1,7 +1,4 @@
const path = require('node:path');
const { expect } = require('@playwright/test');
const { BasePage } = require('./base-page');
const { LoginPage } = require('./login-page');
export class AuthenticatedPage extends BasePage {
/**

View File

@@ -1,4 +1,3 @@
const path = require('node:path');
const { AuthenticatedPage } = require('./authenticated-page');
export class ConnectionsPage extends AuthenticatedPage {

View File

@@ -1,4 +1,3 @@
const path = require('node:path');
const { AuthenticatedPage } = require('./authenticated-page');
export class ExecutionsPage extends AuthenticatedPage {

View File

@@ -1,4 +1,3 @@
const path = require('node:path');
const { AuthenticatedPage } = require('./authenticated-page');
export class FlowEditorPage extends AuthenticatedPage {

View File

@@ -1,4 +1,3 @@
const path = require('node:path');
const { AuthenticatedPage } = require('./authenticated-page');
export class UserInterfacePage extends AuthenticatedPage {

View File

@@ -7,7 +7,8 @@
"scripts": {
"start-mock-license-server": "node ./license-server-with-mock.js",
"test": "playwright test",
"test:fast": "yarn test -j 90% --quiet --reporter null --ignore-snapshots -x"
"test:fast": "yarn test -j 90% --quiet --reporter null --ignore-snapshots -x",
"lint": "eslint ."
},
"contributors": [
{

View File

@@ -17,7 +17,6 @@ test.describe('Role management page', () => {
adminCreateRolePage,
adminEditRolePage,
adminRolesPage,
page,
}) => {
await test.step('Create a new role', async () => {
await adminRolesPage.navigateTo();
@@ -126,12 +125,14 @@ test.describe('Role management page', () => {
await adminCreateRolePage.isMounted();
const initScrollTop = await page.evaluate(() => {
// eslint-disable-next-line no-undef
return document.documentElement.scrollTop;
});
await page.mouse.move(400, 100);
await page.mouse.click(400, 100);
await page.mouse.wheel(200, 0);
const updatedScrollTop = await page.evaluate(() => {
// eslint-disable-next-line no-undef
return document.documentElement.scrollTop;
});
await expect(initScrollTop).not.toBe(updatedScrollTop);
@@ -144,11 +145,13 @@ test.describe('Role management page', () => {
await adminEditRolePage.isMounted();
const initScrollTop = await page.evaluate(() => {
// eslint-disable-next-line no-undef
return document.documentElement.scrollTop;
});
await page.mouse.move(400, 100);
await page.mouse.wheel(200, 0);
const updatedScrollTop = await page.evaluate(() => {
// eslint-disable-next-line no-undef
return document.documentElement.scrollTop;
});
await expect(initScrollTop).not.toBe(updatedScrollTop);
@@ -165,7 +168,6 @@ test.describe('Role management page', () => {
adminUsersPage,
adminCreateUserPage,
adminEditUserPage,
page,
}) => {
await adminRolesPage.navigateTo();
await test.step('Create a new role', async () => {
@@ -270,7 +272,6 @@ test.describe('Role management page', () => {
adminRolesPage,
adminUsersPage,
adminCreateUserPage,
page,
}) => {
await adminRolesPage.navigateTo();
await test.step('Create a new role', async () => {
@@ -429,6 +430,7 @@ test('Accessibility of role management page', async ({
await page.goto(url);
await page.waitForTimeout(750);
const isUnmounted = await page.evaluate(() => {
// eslint-disable-next-line no-undef
const root = document.querySelector('#root');
if (root) {

View File

@@ -51,7 +51,7 @@ test(
const subjects = ['Connection', 'Execution', 'Flow'];
for (let subject of subjects) {
const row = adminCreateRolePage.getSubjectRow(subject)
const row = adminCreateRolePage.getSubjectRow(subject);
const modal = adminCreateRolePage.getRoleConditionsModal(subject);
await adminCreateRolePage.clickPermissionSettings(row);
await expect(modal.modal).toBeVisible();

View File

@@ -2,7 +2,7 @@ const { test, expect } = require('../../fixtures/index');
// no execution data exists in an empty account
test.describe.skip('Executions page', () => {
test.beforeEach(async ({ page, executionsPage }) => {
test.beforeEach(async ({ page }) => {
await page.getByTestId('executions-page-drawer-link').click();
await page.getByTestId('execution-row').first().click();

View File

@@ -6,7 +6,7 @@ test('Ensure creating a new flow works', async ({ page }) => {
await expect(page).toHaveURL(
/\/editor\/[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/
);
})
});
test(
'Create a new flow with a Scheduler step then an Ntfy step',