Skip to content

Commit 61b89cb

Browse files
committed
Add test for filtering companies
Signed-off-by: Alexander Manakov <[email protected]>
1 parent d270572 commit 61b89cb

File tree

3 files changed

+59
-5
lines changed

3 files changed

+59
-5
lines changed

tests/sanity/tests/model/common-page.ts

+12-3
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,13 @@ export class CommonPage {
5757
buttonFilterApply = (): Locator => this.page.locator('div.selectPopup button[type="button"]', { hasText: 'Apply' })
5858
buttonClearFilters = (): Locator => this.page.locator('button > span', { hasText: 'Clear filters' })
5959
filterButton = (index: number): Locator => this.page.locator(`div.filter-section button:nth-child(${index})`)
60+
filterRow = (): Locator => this.page.locator('div.filterbar-container')
6061
selectFilterSection = (label: string): Locator =>
61-
this.page.locator('div.filterbar-container div.filter-section', { hasText: label })
62+
this.filterRow().locator('div.filter-section', { hasText: label })
63+
64+
filterCloseButton = (label: string): Locator => this.selectFilterSection(label).locator('button .btn-icon')
65+
66+
addFilterButton = (): Locator => this.filterRow().locator('div.add-filter')
6267

6368
selectPopupMenu = (filter: string): Locator =>
6469
this.page.locator('div.selectPopup [class*="menu"]', { hasText: filter })
@@ -216,8 +221,8 @@ export class CommonPage {
216221
await this.menuPopupItemButton(itemText).first().click()
217222
}
218223

219-
async selectFilter (filter: string, filterSecondLevel?: string): Promise<void> {
220-
await this.buttonFilter().click()
224+
async selectFilter (filter: string, filterSecondLevel?: string, addButton: Locator = this.buttonFilter()): Promise<void> {
225+
await addButton.click()
221226
await this.selectPopupMenu(filter).click()
222227

223228
if (filterSecondLevel !== null && typeof filterSecondLevel === 'string') {
@@ -325,4 +330,8 @@ export class CommonPage {
325330
async pressEscape (): Promise<void> {
326331
await this.page.keyboard.press('Escape')
327332
}
333+
334+
async removeFilterOption (label: string): Promise<void> {
335+
await this.filterCloseButton(label).click()
336+
}
328337
}

tests/sanity/tests/model/recruiting/companies-page.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ export class CompaniesPage extends CommonRecruitingPage {
2222
readonly inputCreateOrganizationModalCreate = (): Locator =>
2323
this.page.locator('form[id="contact:string:CreateOrganization"] button[type="submit"]')
2424

25-
readonly companyByName = (companyName: string): Locator => this.page.locator('tr a', { hasText: companyName })
25+
readonly companyPanel = (): Locator =>
26+
this.page.locator('xpath=//div[@data-id="contentPanel" and .//button[.//text()="Company"]]')
27+
28+
readonly companyByName = (companyName: string): Locator =>
29+
this.companyPanel().locator('tr a', { hasText: companyName })
2630

2731
async createNewCompany (data: NewCompany): Promise<void> {
2832
await expect(this.pageHeader()).toBeVisible()
@@ -43,7 +47,15 @@ export class CompaniesPage extends CommonRecruitingPage {
4347
await this.companyByName(companyName).click()
4448
}
4549

50+
async checkCompanyRowCount (companyName: string, count: number = 0): Promise<void> {
51+
await expect(this.companyByName(companyName)).toHaveCount(count)
52+
}
53+
4654
async checkCompanyNotExist (companyName: string): Promise<void> {
47-
await expect(this.companyByName(companyName)).toHaveCount(0)
55+
await this.checkCompanyRowCount(companyName)
56+
}
57+
58+
async checkCompanyExist (companyName: string): Promise<void> {
59+
await this.checkCompanyRowCount(companyName, 1)
4860
}
4961
}

tests/sanity/tests/recruiting/companies.spec.ts

+33
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { NavigationMenuPage } from '../model/recruiting/navigation-menu-page'
44
import { CompaniesPage } from '../model/recruiting/companies-page'
55
import { NewCompany } from '../model/recruiting/types'
66
import { CompanyDetailsPage } from '../model/recruiting/company-details-page'
7+
import { DEFAULT_USER } from '../tracker/tracker.utils'
78

89
test.use({
910
storageState: PlatformSetting
@@ -86,4 +87,36 @@ test.describe('Companies tests', () => {
8687
await navigationMenuPage.clickButtonCompanies()
8788
await companiesPage.checkCompanyNotExist(deleteCompany.name)
8889
})
90+
91+
test('Filtering companies', async ({ page }) => {
92+
const firstCompany: NewCompany = {
93+
name: `Company for filtering one-${generateId()}`
94+
}
95+
const secondCompany: NewCompany = {
96+
name: `Company for filtering two-${generateId()}`
97+
}
98+
await test.step('Create companies', async () => {
99+
await navigationMenuPage.clickButtonCompanies()
100+
await companiesPage.createNewCompany(firstCompany)
101+
await companiesPage.checkCompanyExist(firstCompany.name)
102+
await companiesPage.createNewCompany(secondCompany)
103+
await companiesPage.checkCompanyExist(secondCompany.name)
104+
})
105+
await test.step('Filtering by creator', async () => {
106+
await companiesPage.selectFilter('Created by', DEFAULT_USER)
107+
await companiesPage.pressEscape()
108+
await companiesPage.checkCompanyExist(firstCompany.name)
109+
await companiesPage.checkCompanyExist(secondCompany.name)
110+
})
111+
await test.step('Filtering by name', async () => {
112+
await companiesPage.selectFilter('Name', firstCompany.name, companiesPage.addFilterButton())
113+
await companiesPage.checkCompanyExist(firstCompany.name)
114+
await companiesPage.checkCompanyNotExist(secondCompany.name)
115+
})
116+
await test.step('Remove name filter', async () => {
117+
await companiesPage.removeFilterOption('Name')
118+
await companiesPage.checkCompanyExist(firstCompany.name)
119+
await companiesPage.checkCompanyExist(secondCompany.name)
120+
})
121+
})
89122
})

0 commit comments

Comments
 (0)