From 57d330a6b78835dc858a494fde636c68a0250f29 Mon Sep 17 00:00:00 2001 From: Alex Velichko Date: Wed, 29 Nov 2023 00:13:33 +0300 Subject: [PATCH 1/3] feat(tests): done TESTS-92 Signed-off-by: Alex Velichko --- .../model/tracker/common-tracker-page.ts | 58 +++++++- .../sanity/tests/model/tracker/issues-page.ts | 8 ++ tests/sanity/tests/tags.spec.ts | 2 +- tests/sanity/tests/tracker/filter.spec.ts | 126 ++++++++++++++++++ 4 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 tests/sanity/tests/tracker/filter.spec.ts diff --git a/tests/sanity/tests/model/tracker/common-tracker-page.ts b/tests/sanity/tests/model/tracker/common-tracker-page.ts index ac3d8bdc2a6..e46ee6faf56 100644 --- a/tests/sanity/tests/model/tracker/common-tracker-page.ts +++ b/tests/sanity/tests/model/tracker/common-tracker-page.ts @@ -1,11 +1,67 @@ -import { Page } from '@playwright/test' +import { expect, Locator, Page } from '@playwright/test' import { CalendarPage } from '../calendar-page' export class CommonTrackerPage extends CalendarPage { readonly page: Page + readonly buttonFilter: Locator constructor (page: Page) { super(page) this.page = page + this.buttonFilter = page.locator('div.search-start > div:first-child button') + } + + async selectFilter (filter: string, filterSecondLevel?: string): Promise { + await this.buttonFilter.click() + await this.page.locator('div.selectPopup [class*="menu"]', { hasText: filter }).click() + if (filterSecondLevel !== null) { + await this.page.locator('div.selectPopup [class*="menu"]', { hasText: filterSecondLevel }).click() + } + } + + async checkFilter (filter: string, filterSecondLevel?: string, filterThirdLevel?: string): Promise { + await expect(this.page.locator('div.filter-section button:nth-child(1)')).toHaveText(filter) + if (filterSecondLevel !== undefined) { + await expect(this.page.locator('div.filter-section button:nth-child(2)')).toContainText(filterSecondLevel) + } + if (filterThirdLevel !== undefined) { + await expect(this.page.locator('div.filter-section button:nth-child(3)')).toContainText(filterThirdLevel) + } + } + + async updateFilterDimension (filterSecondLevel: string, dateStart?: string): Promise { + await this.page.locator('div.filter-section button:nth-child(2)').click() + await this.page.locator('div.selectPopup [class*="menu"]', { hasText: filterSecondLevel }).click() + + if (dateStart !== undefined) { + switch (dateStart) { + case 'Today': + await this.page.locator('div.month-container div.today').click() + break + default: + await this.page.locator('div.month-container div.day', { hasText: dateStart }).click() + break + } + } + + // console.log(`getDay: ${("0" + timeStr.getDay()).slice(-2)}`) + // console.log(`getMonth: ${("0" + timeStr.getMonth()).slice(-2)}`) + // console.log(`getFullYear: ${timeStr.getFullYear()}`) + } + + async fillBetweenDate (dateStart: string, dateEnd: string): Promise { + await this.page + .locator('div.date-popup-container div.input:first-child span.digit:first-child') + .click({ delay: 100 }) + // await this.page.fill('div.date-popup-container div.input:first-child', dateStart, {force: true}) + await this.page.type('div.date-popup-container div.input:first-child', dateStart) + + await this.page + .locator('div.date-popup-container div.input:last-child span.digit:first-child') + .click({ delay: 100 }) + // await this.page.fill('div.date-popup-container div.input:last-child', dateEnd, {force: true}) + await this.page.type('div.date-popup-container div.input:last-child', dateEnd) + + await this.page.locator('div.date-popup-container button[type="submit"]').click({ delay: 100 }) } } diff --git a/tests/sanity/tests/model/tracker/issues-page.ts b/tests/sanity/tests/model/tracker/issues-page.ts index 9627f092e10..6281f02cad7 100644 --- a/tests/sanity/tests/model/tracker/issues-page.ts +++ b/tests/sanity/tests/model/tracker/issues-page.ts @@ -129,4 +129,12 @@ export class IssuesPage extends CommonTrackerPage { async checkIssueNotExist (issueName: string): Promise { await expect(this.page.locator('tr', { hasText: issueName })).toHaveCount(0) } + + async checkFilteredIssueExist (issueName: string): Promise { + await expect(this.page.locator('div.row span', { hasText: issueName })).toHaveCount(1) + } + + async checkFilteredIssueNotExist (issueName: string): Promise { + await expect(this.page.locator('div.row span', { hasText: issueName })).toHaveCount(0) + } } diff --git a/tests/sanity/tests/tags.spec.ts b/tests/sanity/tests/tags.spec.ts index d164571d33e..5ab790217c6 100644 --- a/tests/sanity/tests/tags.spec.ts +++ b/tests/sanity/tests/tags.spec.ts @@ -46,7 +46,7 @@ test.describe('recruit tests', () => { // await page.click('button:has-text("Cancel")') await page.keyboard.press('Escape') // await page.keyboard.press('Escape') - // Click button:has-text("Create") + // Click button:has-text("Crate") await page.click('button:has-text("Create")') await page.waitForSelector('form.antiCard', { state: 'detached' }) }) diff --git a/tests/sanity/tests/tracker/filter.spec.ts b/tests/sanity/tests/tracker/filter.spec.ts new file mode 100644 index 00000000000..13108750b45 --- /dev/null +++ b/tests/sanity/tests/tracker/filter.spec.ts @@ -0,0 +1,126 @@ +import { test } from '@playwright/test' +import { generateId, PlatformSetting, PlatformURI } from '../utils' +import { LeftSideMenuPage } from '../model/left-side-menu-page' +import { IssuesPage } from '../model/tracker/issues-page' +import { NewIssue } from '../model/tracker/types' +import { allure } from 'allure-playwright' + +test.use({ + storageState: PlatformSetting +}) + +test.describe('Tracker filters tests', () => { + test.beforeEach(async ({ page }) => { + await allure.parentSuite('Tracker tests') + await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished() + }) + + test('Modified date', async ({ page }) => { + const newIssue: NewIssue = { + title: `Issue for the filter-${generateId()}`, + description: 'Issue for the filter', + status: 'In Progress', + priority: 'Urgent', + assignee: 'Appleseed John', + createLabel: true, + labels: `FILTER-ISSUE-${generateId()}`, + component: 'No component', + estimation: '2', + milestone: 'No Milestone', + duedate: 'today', + filePath: 'cat.jpeg' + } + + const leftSideMenuPage = new LeftSideMenuPage(page) + await leftSideMenuPage.buttonTracker.click() + + const issuesPage = new IssuesPage(page) + await issuesPage.modelSelectorAll.click() + await issuesPage.createNewIssue(newIssue) + + await test.step('Check Filter Today', async () => { + await issuesPage.selectFilter('Modified date', 'Today') + await issuesPage.checkFilter('Modified date', 'Today') + + await issuesPage.checkFilteredIssueExist(newIssue.title) + }) + + await test.step('Check Filter Yesterday', async () => { + await issuesPage.updateFilterDimension('Yesterday') + await issuesPage.checkFilter('Modified date', 'Yesterday') + + await issuesPage.checkFilteredIssueNotExist(newIssue.title) + }) + + await test.step('Check Filter This week', async () => { + await issuesPage.updateFilterDimension('This week') + await issuesPage.checkFilter('Modified date', 'This week') + + await issuesPage.checkFilteredIssueExist(newIssue.title) + }) + + await test.step('Check Filter This month', async () => { + await issuesPage.updateFilterDimension('This month') + await issuesPage.checkFilter('Modified date', 'This month') + + await issuesPage.checkFilteredIssueExist(newIssue.title) + }) + + await test.step('Check Filter Exact date - Today', async () => { + await issuesPage.updateFilterDimension('Exact date', 'Today') + await issuesPage.checkFilter('Modified date', 'is', 'Today') + + await issuesPage.checkFilteredIssueExist(newIssue.title) + }) + + await test.step('Check Filter Before date - Today', async () => { + await issuesPage.updateFilterDimension('Before date') + await issuesPage.checkFilter('Modified date', 'Before', 'Today') + + await issuesPage.checkFilteredIssueNotExist(newIssue.title) + }) + + await test.step('Check Filter After date - Today', async () => { + await issuesPage.updateFilterDimension('After date') + await issuesPage.checkFilter('Modified date', 'After', 'Today') + + await issuesPage.checkFilteredIssueExist(newIssue.title) + }) + + await test.step('Check Filter Today', async () => { + await issuesPage.updateFilterDimension('Between dates') + const dateYesterday = new Date() + dateYesterday.setDate(dateYesterday.getDate() - 1) + const dateTomorrow = new Date() + dateTomorrow.setDate(dateTomorrow.getDate() + 1) + + const dateYesterdayString = `${dateYesterday.getDate().toString().padStart(2, '0')}${( + dateYesterday.getMonth() + 1 + ) + .toString() + .padStart(2, '0')}${dateYesterday.getFullYear()}` + const dateTomorrowString = `${dateTomorrow.getDate().toString().padStart(2, '0')}${(dateTomorrow.getMonth() + 1) + .toString() + .padStart(2, '0')}${dateTomorrow.getFullYear()}` + + await issuesPage.fillBetweenDate(dateYesterdayString, dateTomorrowString) + await issuesPage.checkFilter('Modified date', 'is between', dateYesterday.getDate().toString()) + await issuesPage.checkFilter('Modified date', 'is between', dateTomorrow.getDate().toString()) + + await issuesPage.checkFilteredIssueExist(newIssue.title) + }) + + // await page.waitForTimeout(4 * 60 * 1000) + // await issuesPage.modelSelectorAll.click() + // await issuesPage.createNewIssue(newIssue) + // await issuesPage.searchIssueByName(newIssue.title) + // await issuesPage.openIssueByName(newIssue.title) + // + // const issuesDetailsPage = new IssuesDetailsPage(page) + // await issuesDetailsPage.checkIssue({ + // ...newIssue, + // milestone: 'Milestone', + // estimation: '2h' + // }) + }) +}) From 1d42625c22a1590ab5cc8a4a87b4b39f93a03e8d Mon Sep 17 00:00:00 2001 From: Alex Velichko Date: Wed, 29 Nov 2023 00:13:53 +0300 Subject: [PATCH 2/3] feat(tests): done TESTS-92 Signed-off-by: Alex Velichko --- tests/sanity/tests/tracker/filter.spec.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/tests/sanity/tests/tracker/filter.spec.ts b/tests/sanity/tests/tracker/filter.spec.ts index 13108750b45..2d53fd52f8f 100644 --- a/tests/sanity/tests/tracker/filter.spec.ts +++ b/tests/sanity/tests/tracker/filter.spec.ts @@ -109,18 +109,5 @@ test.describe('Tracker filters tests', () => { await issuesPage.checkFilteredIssueExist(newIssue.title) }) - - // await page.waitForTimeout(4 * 60 * 1000) - // await issuesPage.modelSelectorAll.click() - // await issuesPage.createNewIssue(newIssue) - // await issuesPage.searchIssueByName(newIssue.title) - // await issuesPage.openIssueByName(newIssue.title) - // - // const issuesDetailsPage = new IssuesDetailsPage(page) - // await issuesDetailsPage.checkIssue({ - // ...newIssue, - // milestone: 'Milestone', - // estimation: '2h' - // }) }) }) From 73e3487be3debab771a06f3984b080ec861a6a50 Mon Sep 17 00:00:00 2001 From: Alex Velichko Date: Wed, 29 Nov 2023 00:16:20 +0300 Subject: [PATCH 3/3] feat(tests): updated code Signed-off-by: Alex Velichko --- tests/sanity/tests/model/tracker/common-tracker-page.ts | 6 ------ tests/sanity/tests/tags.spec.ts | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/tests/sanity/tests/model/tracker/common-tracker-page.ts b/tests/sanity/tests/model/tracker/common-tracker-page.ts index e46ee6faf56..095cb3d014a 100644 --- a/tests/sanity/tests/model/tracker/common-tracker-page.ts +++ b/tests/sanity/tests/model/tracker/common-tracker-page.ts @@ -43,23 +43,17 @@ export class CommonTrackerPage extends CalendarPage { break } } - - // console.log(`getDay: ${("0" + timeStr.getDay()).slice(-2)}`) - // console.log(`getMonth: ${("0" + timeStr.getMonth()).slice(-2)}`) - // console.log(`getFullYear: ${timeStr.getFullYear()}`) } async fillBetweenDate (dateStart: string, dateEnd: string): Promise { await this.page .locator('div.date-popup-container div.input:first-child span.digit:first-child') .click({ delay: 100 }) - // await this.page.fill('div.date-popup-container div.input:first-child', dateStart, {force: true}) await this.page.type('div.date-popup-container div.input:first-child', dateStart) await this.page .locator('div.date-popup-container div.input:last-child span.digit:first-child') .click({ delay: 100 }) - // await this.page.fill('div.date-popup-container div.input:last-child', dateEnd, {force: true}) await this.page.type('div.date-popup-container div.input:last-child', dateEnd) await this.page.locator('div.date-popup-container button[type="submit"]').click({ delay: 100 }) diff --git a/tests/sanity/tests/tags.spec.ts b/tests/sanity/tests/tags.spec.ts index 5ab790217c6..d164571d33e 100644 --- a/tests/sanity/tests/tags.spec.ts +++ b/tests/sanity/tests/tags.spec.ts @@ -46,7 +46,7 @@ test.describe('recruit tests', () => { // await page.click('button:has-text("Cancel")') await page.keyboard.press('Escape') // await page.keyboard.press('Escape') - // Click button:has-text("Crate") + // Click button:has-text("Create") await page.click('button:has-text("Create")') await page.waitForSelector('form.antiCard', { state: 'detached' }) })