Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TESTS-50: feat(tests): done Edit a component test #4232

Merged
merged 3 commits into from
Dec 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions tests/sanity/tests/model/tracker/component-details-page.ts
Original file line number Diff line number Diff line change
@@ -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)
}
}
}
43 changes: 43 additions & 0 deletions tests/sanity/tests/model/tracker/components-page.ts
Original file line number Diff line number Diff line change
@@ -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()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}
}
6 changes: 6 additions & 0 deletions tests/sanity/tests/model/tracker/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,9 @@ export interface NewMilestone {
}
targetDateInDays?: string
}

export interface NewComponent {
name: string
description?: string
lead?: string
}
37 changes: 37 additions & 0 deletions tests/sanity/tests/tracker/component.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
})
})