TESTS-53 feat(test): done Create a Milestone test (#4169)

Signed-off-by: Alex Velichko <nestor_007@mail.ru>
This commit is contained in:
Alex Velichko 2023-12-11 12:16:24 +03:00 committed by GitHub
parent c6853c123f
commit 119d65653a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 160 additions and 3 deletions

View File

@ -1,13 +1,34 @@
import { Locator, Page } from '@playwright/test'
import { expect, Locator, Page } from '@playwright/test'
import { CommonPage } from './common-page'
export class CalendarPage extends CommonPage {
readonly page: Page
readonly buttonDatePopupToday: Locator
readonly inputTargetDateDay: Locator
readonly inputTargetDateMonth: Locator
readonly inputTargetDateYear: Locator
readonly buttonTargetDateSave: Locator
constructor (page: Page) {
super()
this.page = page
this.buttonDatePopupToday = page.locator('div.popup div.today:not(.wrongMonth)')
this.inputTargetDateDay = page.locator('div.date-popup-container div.datetime-input span.digit:nth-child(1)')
this.inputTargetDateMonth = page.locator('div.date-popup-container div.datetime-input span.digit:nth-child(3)')
this.inputTargetDateYear = page.locator('div.date-popup-container div.datetime-input span.digit:nth-child(5)')
this.buttonTargetDateSave = page.locator('div.date-popup-container div.footer button')
}
async fillDatePopup (day: string, month: string, year: string): Promise<void> {
await expect(this.inputTargetDateDay).toBeVisible()
await this.inputTargetDateDay.fill(day)
await this.inputTargetDateMonth.fill(month)
await this.inputTargetDateDay.fill(year)
await this.buttonTargetDateSave.click()
}
async fillDatePopupInDays (inDays: string): Promise<void> {
await expect(this.inputTargetDateDay).toBeVisible()
await this.page.locator('div.popup div.shift-container div.btn span', { hasText: inDays }).click()
}
}

View File

@ -0,0 +1,13 @@
import { type Locator, type Page } from '@playwright/test'
import { CommonTrackerPage } from './common-tracker-page'
export class MilestonesDetailsPage extends CommonTrackerPage {
readonly page: Page
readonly inputTitle: Locator
constructor (page: Page) {
super(page)
this.page = page
this.inputTitle = page.locator('div.popupPanel-body input[type="text"]')
}
}

View File

@ -0,0 +1,62 @@
import { type Locator, type Page } from '@playwright/test'
import { NewMilestone } from './types'
import { CommonTrackerPage } from './common-tracker-page'
export class MilestonesPage extends CommonTrackerPage {
readonly page: Page
readonly modelSelectorAll: Locator
readonly modelSelectorPlanned: Locator
readonly modelSelectorActive: Locator
readonly buttonCreateNewMilestone: Locator
readonly inputNewMilestoneName: Locator
readonly inputNewMilestoneDescription: Locator
readonly buttonNewMilestoneSetStatus: Locator
readonly buttonNewMilestoneTargetDate: Locator
readonly buttonNewMilestoneCreate: Locator
constructor (page: Page) {
super(page)
this.page = page
this.modelSelectorAll = page.locator('div[data-id="tab-all"]')
this.modelSelectorPlanned = page.locator('div[data-id="tab-planned"]')
this.modelSelectorActive = page.locator('div[data-id="tab-active"]')
this.buttonCreateNewMilestone = page.locator('div.ac-header-full button[type="submit"]')
this.inputNewMilestoneName = page.locator(
'form[id="tracker:string:NewMilestone"] input[placeholder="Milestone name"]'
)
this.inputNewMilestoneDescription = page.locator('form[id="tracker:string:NewMilestone"] div.tiptap')
this.buttonNewMilestoneSetStatus = page.locator(
'form[id="tracker:string:NewMilestone"] div.antiCard-pool button[type="button"]'
)
this.buttonNewMilestoneTargetDate = page.locator(
'form[id="tracker:string:NewMilestone"] div.antiCard-pool button.datetime-button'
)
this.buttonNewMilestoneCreate = page.locator('form[id="tracker:string:NewMilestone"] button[type="submit"]')
}
async createNewMilestone (data: NewMilestone): Promise<void> {
await this.buttonCreateNewMilestone.click()
await this.inputNewMilestoneName.fill(data.name)
if (data.description != null) {
await this.inputNewMilestoneDescription.fill(data.description)
}
if (data.status != null) {
await this.buttonNewMilestoneSetStatus.click()
await this.selectFromDropdown(this.page, data.status)
}
if (data.targetDate != null) {
await this.buttonNewMilestoneTargetDate.click()
await this.fillDatePopup(data.targetDate.day, data.targetDate.month, data.targetDate.year)
}
if (data.targetDateInDays != null) {
await this.buttonNewMilestoneTargetDate.click()
await this.fillDatePopupInDays(data.targetDateInDays)
}
await this.buttonNewMilestoneCreate.click()
}
async openMilestoneByName (milestoneName: string): Promise<void> {
await this.page.locator('div.listGrid a', { hasText: milestoneName }).click()
}
}

View File

@ -47,8 +47,8 @@ export class NewProjectPage extends CommonTrackerPage {
if (data.description != null) {
await this.inputDescription.fill(data.description)
}
if (data.icon != null) {
await this.inputDescription.fill(data.icon)
if (data.iconNumber != null) {
await this.inputDescription.fill(data.iconNumber + '')
}
if (data.private != null && data.private) {
await this.buttonMakePrivate.click()

View File

@ -51,4 +51,12 @@ export class TrackerNavigationMenuPage extends CommonPage {
.click()
await this.selectFromDropdown(this.page, action)
}
async openMilestonesForProject (projectName: string): Promise<void> {
await this.page
.locator('div[class*="antiNav-element"] a[href$="milestones"][href*="Default"]> div > span', {
hasText: 'Milestones'
})
.click()
}
}

View File

@ -27,3 +27,15 @@ export interface NewProject {
iconNumber?: number
type?: string
}
export interface NewMilestone {
name: string
description?: string
status?: string
targetDate?: {
day: string
month: string
year: string
}
targetDateInDays?: string
}

View File

@ -0,0 +1,41 @@
import { expect, test } from '@playwright/test'
import { generateId, PlatformSetting, PlatformURI } 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 { MilestonesPage } from '../model/tracker/milestones-page'
import { NewMilestone } from '../model/tracker/types'
import { MilestonesDetailsPage } from '../model/tracker/milestones-details-page'
test.use({
storageState: PlatformSetting
})
test.describe('Tracker milestone tests', () => {
test.beforeEach(async ({ page }) => {
await allure.parentSuite('Tracker tests')
await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
})
test('Create a Milestone', async ({ page }) => {
const newMilestone: NewMilestone = {
name: `Created Milestone-${generateId()}`,
description: 'Create a Milestone',
status: 'In progress',
targetDateInDays: 'in 3 days'
}
const leftSideMenuPage = new LeftSideMenuPage(page)
await leftSideMenuPage.buttonTracker.click()
const trackerNavigationMenuPage = new TrackerNavigationMenuPage(page)
await trackerNavigationMenuPage.openMilestonesForProject('Default')
const milestonesPage = new MilestonesPage(page)
await milestonesPage.createNewMilestone(newMilestone)
await milestonesPage.openMilestoneByName(newMilestone.name)
const milestonesDetailsPage = new MilestonesDetailsPage(page)
await expect(milestonesDetailsPage.inputTitle).toHaveValue(newMilestone.name)
})
})