From ac3fec3f357cc900063c6d535644632a2b00496a Mon Sep 17 00:00:00 2001 From: Alex Velichko <nestor_007@mail.ru> Date: Thu, 21 Dec 2023 10:53:19 +0300 Subject: [PATCH] TESTS-50: feat(tests): done Edit a component test (#4232) Signed-off-by: Alex Velichko <nestor_007@mail.ru> --- .../model/tracker/component-details-page.ts | 41 ++++++++++++++++++ .../tests/model/tracker/components-page.ts | 43 +++++++++++++++++++ .../tracker/tracker-navigation-menu-page.ts | 10 ++++- tests/sanity/tests/model/tracker/types.ts | 6 +++ tests/sanity/tests/tracker/component.spec.ts | 37 ++++++++++++++++ 5 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 tests/sanity/tests/model/tracker/component-details-page.ts create mode 100644 tests/sanity/tests/model/tracker/components-page.ts diff --git a/tests/sanity/tests/model/tracker/component-details-page.ts b/tests/sanity/tests/model/tracker/component-details-page.ts new file mode 100644 index 0000000000..28c9b5cef7 --- /dev/null +++ b/tests/sanity/tests/model/tracker/component-details-page.ts @@ -0,0 +1,41 @@ +import { expect, type Locator, type Page } from '@playwright/test' +import { NewComponent } from './types' +import { CommonTrackerPage } from './common-tracker-page' + +export class ComponentsDetailsPage extends CommonTrackerPage { + readonly page: Page + readonly inputComponentName: Locator + readonly inputComponentDescription: Locator + readonly buttonLead: Locator + + constructor (page: Page) { + super(page) + this.page = page + this.inputComponentName = page.locator('div.antiEditBox input') + this.inputComponentDescription = page.locator('div.textInput div.tiptap') + this.buttonLead = page.locator('//span[text()="Lead"]/following-sibling::div[1]/div/button') + } + + async editComponent (data: NewComponent): Promise<void> { + if (data.name != null) { + await this.inputComponentName.fill(data.name) + } + if (data.description != null) { + await this.inputComponentDescription.fill(data.description) + } + if (data.lead != null) { + await this.buttonLead.click() + await this.selectMenuItem(this.page, data.lead) + } + } + + async checkComponent (data: NewComponent): Promise<void> { + await expect(this.inputComponentName).toHaveValue(data.name) + if (data.description != null) { + await expect(this.inputComponentDescription).toHaveText(data.description) + } + if (data.lead != null) { + await expect(this.buttonLead).toHaveText(data.lead) + } + } +} diff --git a/tests/sanity/tests/model/tracker/components-page.ts b/tests/sanity/tests/model/tracker/components-page.ts new file mode 100644 index 0000000000..c6698686a4 --- /dev/null +++ b/tests/sanity/tests/model/tracker/components-page.ts @@ -0,0 +1,43 @@ +import { type Locator, type Page } from '@playwright/test' +import { NewComponent } from './types' +import { CommonTrackerPage } from './common-tracker-page' + +export class ComponentsPage extends CommonTrackerPage { + readonly page: Page + readonly buttonNewComponent: Locator + readonly inputNewComponentModalComponentName: Locator + readonly inputNewComponentModalComponentDescription: Locator + readonly buttonNewComponentModalComponentLead: Locator + readonly buttonNewComponentModalComponentCreate: Locator + + constructor (page: Page) { + super(page) + this.page = page + this.buttonNewComponent = page.locator('button[type="submit"] span', { hasText: 'Component' }) + this.inputNewComponentModalComponentName = page.locator('form[id="tracker:string:NewComponent"] input') + this.inputNewComponentModalComponentDescription = page.locator('form[id="tracker:string:NewComponent"] div.tiptap') + this.buttonNewComponentModalComponentLead = page.locator( + 'form[id="tracker:string:NewComponent"] div.antiCard-pool button[type="button"]' + ) + this.buttonNewComponentModalComponentCreate = page.locator( + 'form[id="tracker:string:NewComponent"] button[type="submit"]' + ) + } + + async createNewComponent (data: NewComponent): Promise<void> { + await this.buttonNewComponent.click() + await this.inputNewComponentModalComponentName.fill(data.name) + if (data.description != null) { + await this.inputNewComponentModalComponentDescription.fill(data.description) + } + if (data.lead != null) { + await this.buttonNewComponentModalComponentLead.click() + await this.selectMenuItem(this.page, data.lead) + } + await this.buttonNewComponentModalComponentCreate.click() + } + + async openComponentByName (componentName: string): Promise<void> { + await this.page.locator('div.row a', { hasText: componentName }).click() + } +} diff --git a/tests/sanity/tests/model/tracker/tracker-navigation-menu-page.ts b/tests/sanity/tests/model/tracker/tracker-navigation-menu-page.ts index 2357e816c5..9ad4152ca0 100644 --- a/tests/sanity/tests/model/tracker/tracker-navigation-menu-page.ts +++ b/tests/sanity/tests/model/tracker/tracker-navigation-menu-page.ts @@ -57,9 +57,17 @@ export class TrackerNavigationMenuPage extends CommonPage { async openMilestonesForProject (projectName: string): Promise<void> { await this.page - .locator('div[class*="antiNav-element"] a[href$="milestones"][href*="Default"]> div > span', { + .locator(`div[class*="antiNav-element"] a[href$="milestones"][href*="${projectName}"]> div > span`, { hasText: 'Milestones' }) .click() } + + async openComponentsForProject (projectName: string): Promise<void> { + await this.page + .locator(`div[class*="antiNav-element"] a[href$="components"][href*="${projectName}"]> div > span`, { + hasText: 'Components' + }) + .click() + } } diff --git a/tests/sanity/tests/model/tracker/types.ts b/tests/sanity/tests/model/tracker/types.ts index e61bc427eb..ecbab14453 100644 --- a/tests/sanity/tests/model/tracker/types.ts +++ b/tests/sanity/tests/model/tracker/types.ts @@ -40,3 +40,9 @@ export interface NewMilestone { } targetDateInDays?: string } + +export interface NewComponent { + name: string + description?: string + lead?: string +} diff --git a/tests/sanity/tests/tracker/component.spec.ts b/tests/sanity/tests/tracker/component.spec.ts index 1df9d01101..fbbd7979ec 100644 --- a/tests/sanity/tests/tracker/component.spec.ts +++ b/tests/sanity/tests/tracker/component.spec.ts @@ -2,6 +2,11 @@ import { expect, test } from '@playwright/test' import { navigate } from './tracker.utils' import { generateId, PlatformSetting, PlatformURI, fillSearch } from '../utils' import { allure } from 'allure-playwright' +import { LeftSideMenuPage } from '../model/left-side-menu-page' +import { TrackerNavigationMenuPage } from '../model/tracker/tracker-navigation-menu-page' +import { ComponentsPage } from '../model/tracker/components-page' +import { NewComponent } from '../model/tracker/types' +import { ComponentsDetailsPage } from '../model/tracker/component-details-page' test.use({ storageState: PlatformSetting @@ -38,4 +43,36 @@ test.describe('Tracker component tests', () => { await page.click('form button:has-text("Create issue")') await page.waitForSelector('form.antiCard', { state: 'detached' }) }) + + test('Edit a component', async ({ page }) => { + const newComponent: NewComponent = { + name: `Edit component test create-${generateId()}`, + description: 'Edit component test description create', + lead: 'Dirak Kainin' + } + const editComponent: NewComponent = { + name: `Edit component test update-${generateId()}`, + description: 'Edit component test description update', + lead: 'Appleseed John' + } + + const leftSideMenuPage = new LeftSideMenuPage(page) + await leftSideMenuPage.buttonTracker.click() + + const trackerNavigationMenuPage = new TrackerNavigationMenuPage(page) + await trackerNavigationMenuPage.openComponentsForProject('Default') + + const componentsPage = new ComponentsPage(page) + await componentsPage.createNewComponent(newComponent) + await componentsPage.openComponentByName(newComponent.name) + + const componentsDetailsPage = new ComponentsDetailsPage(page) + await componentsDetailsPage.checkComponent(newComponent) + + await componentsDetailsPage.editComponent(editComponent) + await trackerNavigationMenuPage.openComponentsForProject('Default') + + await componentsPage.openComponentByName(editComponent.name) + await componentsDetailsPage.checkComponent(editComponent) + }) })