forked from hcengineering/platform
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add custom attribute test and setup (hcengineering#5897)
Signed-off-by: Jasmin <jasmin@hardcoreeng.com>
- Loading branch information
Showing
6 changed files
with
362 additions
and
1 deletion.
There are no files selected for viewing
90 changes: 90 additions & 0 deletions
90
tests/sanity/tests/custom-atributes/class-properties-page.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
import { expect, type Locator, type Page } from '@playwright/test' | ||
|
||
export enum DataType { | ||
URL, | ||
String, | ||
Boolean, | ||
Number, | ||
Date, | ||
Ref, | ||
Array, | ||
Enum | ||
} | ||
|
||
export class ClassProperties { | ||
readonly page: Page | ||
|
||
constructor (page: Page) { | ||
this.page = page | ||
} | ||
|
||
url = (): Locator => this.page.getByRole('button', { name: 'URL' }) | ||
string = (): Locator => this.page.getByRole('button', { name: 'String' }) | ||
boolean = (): Locator => this.page.getByRole('button', { name: 'Boolean' }) | ||
number = (): Locator => this.page.getByRole('button', { name: 'Number' }) | ||
date = (): Locator => this.page.getByRole('button', { name: 'Date' }) | ||
ref = (): Locator => this.page.getByRole('button', { name: 'Ref' }) | ||
array = (): Locator => this.page.getByRole('button', { name: 'Array' }) | ||
enum = (): Locator => this.page.getByRole('button', { name: 'Enum', exact: true }) | ||
|
||
addedCustomAttribute = (attribute: string): Locator => this.page.getByRole('button', { name: attribute }) | ||
inputName = (): Locator => this.page.getByPlaceholder('Name') | ||
createButton = (): Locator => this.page.getByRole('button', { name: 'Create' }) | ||
enterTextString = (): Locator => this.page.getByPlaceholder('Type text...') | ||
confirmChange = (): Locator => this.page.locator('.ml-2 > .antiButton') | ||
|
||
async selectDataType (dataType: DataType): Promise<void> { | ||
switch (dataType) { | ||
case DataType.URL: | ||
await this.url().click() | ||
break | ||
case DataType.String: | ||
await this.string().click() | ||
break | ||
case DataType.Boolean: | ||
await this.boolean().click() | ||
break | ||
case DataType.Number: | ||
await this.number().click() | ||
break | ||
case DataType.Date: | ||
await this.date().click() | ||
break | ||
case DataType.Ref: | ||
await this.ref().click() | ||
break | ||
case DataType.Array: | ||
await this.array().click() | ||
break | ||
case DataType.Enum: | ||
await this.enum().click() | ||
break | ||
default: | ||
throw new Error('Unknown data type') | ||
} | ||
} | ||
|
||
async clickCustomAttribute (attribute: string): Promise<void> { | ||
await this.addedCustomAttribute(attribute).click() | ||
} | ||
|
||
async fillName (name: string): Promise<void> { | ||
await this.inputName().fill(name) | ||
} | ||
|
||
async clickCreateButton (): Promise<void> { | ||
await this.createButton().click() | ||
} | ||
|
||
async fillEnterTextString (newString: string): Promise<void> { | ||
await this.enterTextString().fill(newString) | ||
} | ||
|
||
async clickConfirmChange (): Promise<void> { | ||
await this.confirmChange().click() | ||
} | ||
|
||
async checkIfStringIsUpdated (customAttribute: string): Promise<void> { | ||
await expect(this.addedCustomAttribute(customAttribute)).toBeVisible() | ||
} | ||
} |
163 changes: 163 additions & 0 deletions
163
tests/sanity/tests/custom-atributes/custom-attributes-page.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
import { expect, type Locator, type Page } from '@playwright/test' | ||
|
||
export enum CustomAttributesButtons { | ||
Member, | ||
Contact, | ||
Person, | ||
Employee, | ||
Worker, | ||
Talent, | ||
Company, | ||
Customer, | ||
Vacancy, | ||
DefaultVacancy, | ||
Funnel, | ||
DefaultFunnel, | ||
Project, | ||
ClassicProject, | ||
Board, | ||
Task, | ||
Application, | ||
Applicant, | ||
Lead, | ||
Issue, | ||
Card, | ||
Product | ||
} | ||
|
||
export class CustomAttributesPage { | ||
readonly page: Page | ||
|
||
constructor (page: Page) { | ||
this.page = page | ||
} | ||
|
||
member = (): Locator => this.page.getByRole('button', { name: 'Member' }) | ||
contact = (): Locator => this.page.getByRole('button', { name: 'Contact' }) | ||
person = (): Locator => this.page.getByRole('button', { name: 'Person' }) | ||
employee = (): Locator => this.page.getByRole('button', { name: 'Employee' }) | ||
worker = (): Locator => this.page.getByRole('button', { name: 'Worker' }) | ||
talent = (): Locator => this.page.getByRole('button', { name: 'Talent' }) | ||
company = (): Locator => this.page.getByRole('button', { name: 'Company' }) | ||
customer = (): Locator => this.page.getByRole('button', { name: 'Customer' }) | ||
vacancy = (): Locator => this.page.getByRole('button', { name: 'Vacancy', exact: true }) | ||
defaultVacancy = (): Locator => this.page.getByRole('button', { name: 'Default vacancy', exact: true }) | ||
funnel = (): Locator => this.page.getByRole('button', { name: 'Funnel', exact: true }) | ||
defaultFunnel = (): Locator => this.page.getByRole('button', { name: 'Default funnel' }) | ||
project = (): Locator => this.page.getByRole('button', { name: 'Project', exact: true }) | ||
classicProject = (): Locator => this.page.getByRole('button', { name: 'Classic project', exact: true }) | ||
board = (): Locator => this.page.getByRole('button', { name: 'Board' }) | ||
task = (): Locator => this.page.getByRole('button', { name: 'Task' }) | ||
application = (): Locator => this.page.getByRole('button', { name: 'Application' }) | ||
applicant = (): Locator => this.page.getByRole('button', { name: 'Applicant' }) | ||
lead = (): Locator => this.page.getByRole('button', { name: 'Lead' }) | ||
issue = (): Locator => this.page.getByRole('button', { name: 'Issue' }) | ||
card = (): Locator => this.page.getByRole('button', { name: 'Card' }) | ||
product = (): Locator => this.page.getByRole('button', { name: 'Product' }) | ||
|
||
addAttribute = (): Locator => this.page.locator('.hulyTableAttr-header > .font-medium-14') | ||
|
||
async clickAddAttribute (): Promise<void> { | ||
await this.addAttribute().click() | ||
} | ||
|
||
async selectEntityTab (button: CustomAttributesButtons): Promise<void> { | ||
switch (button) { | ||
case CustomAttributesButtons.Member: | ||
await this.member().click() | ||
break | ||
case CustomAttributesButtons.Contact: | ||
await this.contact().click() | ||
break | ||
case CustomAttributesButtons.Person: | ||
await this.person().click() | ||
break | ||
case CustomAttributesButtons.Employee: | ||
await this.employee().click() | ||
break | ||
case CustomAttributesButtons.Worker: | ||
await this.worker().click() | ||
break | ||
case CustomAttributesButtons.Talent: | ||
await this.talent().click() | ||
break | ||
case CustomAttributesButtons.Company: | ||
await this.company().click() | ||
break | ||
case CustomAttributesButtons.Customer: | ||
await this.customer().click() | ||
break | ||
case CustomAttributesButtons.Vacancy: | ||
await this.vacancy().click() | ||
break | ||
case CustomAttributesButtons.DefaultVacancy: | ||
await this.defaultVacancy().click() | ||
break | ||
case CustomAttributesButtons.Funnel: | ||
await this.funnel().click() | ||
break | ||
case CustomAttributesButtons.DefaultFunnel: | ||
await this.defaultFunnel().click() | ||
break | ||
case CustomAttributesButtons.Project: | ||
await this.project().click() | ||
break | ||
case CustomAttributesButtons.ClassicProject: | ||
await this.classicProject().click() | ||
break | ||
case CustomAttributesButtons.Board: | ||
await this.board().click() | ||
break | ||
case CustomAttributesButtons.Task: | ||
await this.task().click() | ||
break | ||
case CustomAttributesButtons.Application: | ||
await this.application().click() | ||
break | ||
case CustomAttributesButtons.Applicant: | ||
await this.applicant().click() | ||
break | ||
case CustomAttributesButtons.Lead: | ||
await this.lead().click() | ||
break | ||
case CustomAttributesButtons.Issue: | ||
await this.issue().click() | ||
break | ||
case CustomAttributesButtons.Card: | ||
await this.card().click() | ||
break | ||
case CustomAttributesButtons.Product: | ||
await this.product().click() | ||
break | ||
default: | ||
throw new Error('Unknown button type') | ||
} | ||
} | ||
|
||
async checkIfClassesExists (): Promise<void> { | ||
await expect(this.member()).toBeVisible() | ||
await expect(this.contact()).toBeVisible() | ||
await expect(this.person()).toBeVisible() | ||
await expect(this.employee()).toBeVisible() | ||
await expect(this.worker()).toBeVisible() | ||
await expect(this.talent()).toBeVisible() | ||
await expect(this.company()).toBeVisible() | ||
await expect(this.customer()).toBeVisible() | ||
await expect(this.vacancy()).toBeVisible() | ||
await expect(this.defaultVacancy()).toBeVisible() | ||
await expect(this.funnel()).toBeVisible() | ||
await expect(this.defaultFunnel()).toBeVisible() | ||
await expect(this.project()).toBeVisible() | ||
await expect(this.classicProject()).toBeVisible() | ||
await expect(this.board()).toBeVisible() | ||
await expect(this.task()).toBeVisible() | ||
await expect(this.application()).toBeVisible() | ||
await expect(this.applicant()).toBeVisible() | ||
await expect(this.lead().nth(0)).toBeVisible() | ||
await expect(this.lead().nth(1)).toBeVisible() | ||
await expect(this.issue().nth(0)).toBeVisible() | ||
await expect(this.issue().nth(1)).toBeVisible() | ||
await expect(this.card()).toBeVisible() | ||
await expect(this.product()).toBeVisible() | ||
} | ||
} |
93 changes: 93 additions & 0 deletions
93
tests/sanity/tests/custom-atributes/custom-attributes.spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
import { test } from '@playwright/test' | ||
import { PlatformURI, generateId, generateTestData } from '../utils' | ||
import { LeftSideMenuPage } from '../model/left-side-menu-page' | ||
import { ApiEndpoint } from '../API/Api' | ||
import { LoginPage } from '../model/login-page' | ||
import { faker } from '@faker-js/faker' | ||
import { WorkspaceSettingsPage, ButtonType } from '../model/workspace/workspace-settings-page' | ||
import { UserProfilePage } from '../model/profile/user-profile-page' | ||
import { CustomAttributesPage, CustomAttributesButtons } from './custom-attributes-page' | ||
import { ClassProperties, DataType } from './class-properties-page' | ||
import { NewCompany } from '../model/recruiting/types' | ||
import { NavigationMenuPage } from '../model/recruiting/navigation-menu-page' | ||
import { CompaniesPage } from '../model/recruiting/companies-page' | ||
import { CompanyDetailsPage } from '../model/recruiting/company-details-page' | ||
|
||
test.describe('Custom attributes tests', () => { | ||
let leftSideMenuPage: LeftSideMenuPage | ||
let loginPage: LoginPage | ||
let userProfilePage: UserProfilePage | ||
let workspaceSettingsPage: WorkspaceSettingsPage | ||
let customAttributesPage: CustomAttributesPage | ||
let classProperties: ClassProperties | ||
let navigationMenuPage: NavigationMenuPage | ||
let companyDetailsPage: CompanyDetailsPage | ||
let companiesPage: CompaniesPage | ||
let api: ApiEndpoint | ||
let data: { workspaceName: string, userName: string, firstName: string, lastName: string, channelName: string } | ||
|
||
test.beforeEach(async ({ page, request }) => { | ||
data = generateTestData() | ||
leftSideMenuPage = new LeftSideMenuPage(page) | ||
loginPage = new LoginPage(page) | ||
userProfilePage = new UserProfilePage(page) | ||
workspaceSettingsPage = new WorkspaceSettingsPage(page) | ||
customAttributesPage = new CustomAttributesPage(page) | ||
classProperties = new ClassProperties(page) | ||
navigationMenuPage = new NavigationMenuPage(page) | ||
companiesPage = new CompaniesPage(page) | ||
companyDetailsPage = new CompanyDetailsPage(page) | ||
api = new ApiEndpoint(request) | ||
await api.createAccount(data.userName, '1234', data.firstName, data.lastName) | ||
await api.createWorkspaceWithLogin(data.workspaceName, data.userName, '1234') | ||
await (await page.goto(`${PlatformURI}`))?.finished() | ||
await loginPage.login(data.userName, '1234') | ||
await (await page.goto(`${PlatformURI}/workbench/${data.workspaceName}`))?.finished() | ||
}) | ||
|
||
test('Check if all custom attributes exists', async ({ browser, page }) => { | ||
await userProfilePage.openProfileMenu() | ||
await userProfilePage.clickSettings() | ||
await workspaceSettingsPage.selectWorkspaceSettingsTab(ButtonType.Classes) | ||
await customAttributesPage.checkIfClassesExists() | ||
}) | ||
|
||
test('create company add custom string attribute and check if it exists in member section', async ({ | ||
browser, | ||
page | ||
}) => { | ||
const customAttribute = faker.word.words() | ||
const addStringCustomAttribute = faker.word.words() | ||
const newCompany: NewCompany = { | ||
name: `Create a new Company test-${generateId()}`, | ||
socials: [ | ||
{ | ||
type: 'Phone', | ||
value: '3213221321213' | ||
}, | ||
{ | ||
type: 'Email', | ||
value: 'test+321313123@gmail.com' | ||
} | ||
] | ||
} | ||
await userProfilePage.openProfileMenu() | ||
await userProfilePage.clickSettings() | ||
await workspaceSettingsPage.selectWorkspaceSettingsTab(ButtonType.Classes) | ||
await customAttributesPage.selectEntityTab(CustomAttributesButtons.Member) | ||
await customAttributesPage.clickAddAttribute() | ||
await classProperties.selectDataType(DataType.String) | ||
await classProperties.fillName(customAttribute) | ||
await classProperties.clickCreateButton() | ||
await leftSideMenuPage.clickRecruiting() | ||
|
||
await navigationMenuPage.clickButtonCompanies() | ||
await companiesPage.createNewCompany(newCompany) | ||
await companiesPage.openCompanyByName(newCompany.name) | ||
await companyDetailsPage.addMember(data.lastName + ' ' + data.firstName) | ||
await classProperties.clickCustomAttribute(customAttribute) | ||
await classProperties.fillEnterTextString(addStringCustomAttribute) | ||
await classProperties.clickConfirmChange() | ||
await classProperties.checkIfStringIsUpdated(addStringCustomAttribute) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters