TSK-891: Fix UI Tests instability (#2780)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev 2023-03-21 08:56:00 +07:00 committed by GitHub
parent b5a74cdbc9
commit 340b0c3198
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 36 additions and 22 deletions

View File

@ -28,7 +28,7 @@
let avatarEditor: EditableAvatar let avatarEditor: EditableAvatar
const account = getCurrentAccount() as EmployeeAccount const account = getCurrentAccount() as EmployeeAccount
const employee = $employeeByIdStore.get(account.employee) $: employee = $employeeByIdStore.get(account.employee)
let firstName: string = employee ? getFirstName(employee.name) : '' let firstName: string = employee ? getFirstName(employee.name) : ''
let lastName: string = employee ? getLastName(employee.name) : '' let lastName: string = employee ? getLastName(employee.name) : ''
let displayName = employee?.displayName ?? '' let displayName = employee?.displayName ?? ''

View File

@ -270,11 +270,14 @@ export class SpaceSecurityMiddleware extends BaseMiddleware implements Middlewar
query: ObjQueryType<T['space']> query: ObjQueryType<T['space']>
): Promise<ObjQueryType<T['space']>> { ): Promise<ObjQueryType<T['space']>> {
const spaces = await this.getAllAllowedSpaces(account) const spaces = await this.getAllAllowedSpaces(account)
if (query == null) {
return { $in: spaces }
}
if (typeof query === 'string') { if (typeof query === 'string') {
if (!spaces.includes(query)) { if (!spaces.includes(query)) {
throw new PlatformError(new Status(Severity.ERROR, platform.status.Forbidden, {})) throw new PlatformError(new Status(Severity.ERROR, platform.status.Forbidden, {}))
} }
} else if (query.$in !== undefined) { } else if (query.$in != null) {
query.$in = query.$in.filter((p) => spaces.includes(p)) query.$in = query.$in.filter((p) => spaces.includes(p))
} else { } else {
query.$in = spaces query.$in = spaces

View File

@ -8,7 +8,7 @@ test.use({
test.describe('actions tests', () => { test.describe('actions tests', () => {
test.beforeEach(async ({ page }) => { test.beforeEach(async ({ page }) => {
// Create user and workspace // Create user and workspace
await page.goto(`${PlatformURI}/workbench/sanity-ws/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws/sanity-ws`))?.finished()
}) })
test('action-new-candidate', async ({ page }) => { test('action-new-candidate', async ({ page }) => {
await page.click('[id="app-recruit\\:string\\:RecruitApplication"]') await page.click('[id="app-recruit\\:string\\:RecruitApplication"]')

View File

@ -9,7 +9,9 @@ test.describe('login test', () => {
}) })
// Create user and workspace // Create user and workspace
await (
await page.goto(`${PlatformURI}/login/login`) await page.goto(`${PlatformURI}/login/login`)
)?.finished
const emaillocator = page.locator('[name=email]') const emaillocator = page.locator('[name=email]')
await emaillocator.click() await emaillocator.click()

View File

@ -88,6 +88,13 @@ test.describe('recruit tests', () => {
await page.fill('[placeholder="Search..."]', vacancyId) await page.fill('[placeholder="Search..."]', vacancyId)
await page.click(`button:has-text("${vacancyId}")`) await page.click(`button:has-text("${vacancyId}")`)
await page.waitForSelector('space.selector', { state: 'detached' })
await expect(
await page.locator('[id="recruit:string:CreateApplication"] button:has-text("HR Interview")')
).toBeVisible()
// We need to be sure state is proper one, no other way to do it.
await page.waitForTimeout(100)
await page.click('button:has-text("Create")') await page.click('button:has-text("Create")')
await page.waitForSelector('form.antiCard', { state: 'detached' }) await page.waitForSelector('form.antiCard', { state: 'detached' })

View File

@ -7,11 +7,11 @@ test.use({
test.describe('contact tests', () => { test.describe('contact tests', () => {
test.beforeEach(async ({ page }) => { test.beforeEach(async ({ page }) => {
// Create user and workspace // Create user and workspace
await page.goto(`${PlatformURI}/workbench/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
}) })
test('update-profile', async ({ page, context }) => { test('update-profile', async ({ page, context }) => {
// Go to http://localhost:8083/workbench/sanity-ws // Go to http://localhost:8083/workbench/sanity-ws
await page.goto(`${PlatformURI}/workbench/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
// Click #profile-button // Click #profile-button
await page.click('#profile-button') await page.click('#profile-button')
await page.click('text=Appleseed John') await page.click('text=Appleseed John')
@ -19,6 +19,7 @@ test.describe('contact tests', () => {
// Click text=Edit profile // Click text=Edit profile
// await page.click('text=Edit profile') // await page.click('text=Edit profile')
await expect(page).toHaveURL(`${PlatformURI}/workbench/sanity-ws/setting/profile`) await expect(page).toHaveURL(`${PlatformURI}/workbench/sanity-ws/setting/profile`)
// Click [placeholder="Location"] // Click [placeholder="Location"]
await page.click('[placeholder="Location"]') await page.click('[placeholder="Location"]')
// Fill [placeholder="Location"] // Fill [placeholder="Location"]
@ -37,7 +38,7 @@ test.describe('contact tests', () => {
}) })
test('create-template', async ({ page }) => { test('create-template', async ({ page }) => {
// Go to http://localhost:8083/workbench/sanity-ws // Go to http://localhost:8083/workbench/sanity-ws
await page.goto(`${PlatformURI}/workbench/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
// Click #profile-button // Click #profile-button
await page.click('#profile-button') await page.click('#profile-button')
// Click button:has-text("Settings") // Click button:has-text("Settings")
@ -70,7 +71,7 @@ test.describe('contact tests', () => {
test('manage-templates', async ({ page }) => { test('manage-templates', async ({ page }) => {
// Go to http://localhost:8083/workbench/sanity-ws // Go to http://localhost:8083/workbench/sanity-ws
await page.goto(`${PlatformURI}/workbench/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
// Click #profile-button // Click #profile-button
await page.click('#profile-button') await page.click('#profile-button')
// await page.click('text=Workspace') // await page.click('text=Workspace')

View File

@ -12,7 +12,7 @@ test.describe('recruit tests', () => {
}) })
test('create-skill-candidate-with-skill', async ({ page }) => { test('create-skill-candidate-with-skill', async ({ page }) => {
// Go to http://localhost:8083/workbench/sanity-ws // Go to http://localhost:8083/workbench/sanity-ws
await page.goto(`${PlatformURI}/workbench/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
// Click [id="app-recruit\:string\:RecruitApplication"] // Click [id="app-recruit\:string\:RecruitApplication"]
await page.click('[id="app-recruit\\:string\\:RecruitApplication"]') await page.click('[id="app-recruit\\:string\\:RecruitApplication"]')
await expect(page).toHaveURL(`${PlatformURI}/workbench/sanity-ws/recruit`) await expect(page).toHaveURL(`${PlatformURI}/workbench/sanity-ws/recruit`)
@ -51,7 +51,7 @@ test.describe('recruit tests', () => {
test('create-tag-candidate', async ({ page }) => { test('create-tag-candidate', async ({ page }) => {
// Go to http://localhost:8083/workbench/sanity-ws // Go to http://localhost:8083/workbench/sanity-ws
await page.goto(`${PlatformURI}/workbench/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
// Click [id="app-recruit\:string\:RecruitApplication"] // Click [id="app-recruit\:string\:RecruitApplication"]
await page.click('[id="app-recruit\\:string\\:RecruitApplication"]') await page.click('[id="app-recruit\\:string\\:RecruitApplication"]')
await expect(page).toHaveURL(`${PlatformURI}/workbench/sanity-ws/recruit`) await expect(page).toHaveURL(`${PlatformURI}/workbench/sanity-ws/recruit`)

View File

@ -45,37 +45,38 @@ export async function setViewOrder (page: Page, orderName: string): Promise<void
await page.keyboard.press('Escape') await page.keyboard.press('Escape')
} }
export async function fillIssueForm (page: Page, props: IssueProps): Promise<void> { export async function fillIssueForm (page: Page, props: IssueProps, addForm: boolean): Promise<void> {
const { name, description, status, assignee, labels, priority, component, sprint } = props const { name, description, status, assignee, labels, priority, component, sprint } = props
await page.fill('[placeholder="Issue\\ title"]', name) const af = addForm ? 'form ' : ''
await page.fill(af + '[placeholder="Issue\\ title"]', name)
if (description !== undefined) { if (description !== undefined) {
await page.fill('.ProseMirror', description) await page.fill('.ProseMirror', description)
} }
if (status !== undefined) { if (status !== undefined) {
await page.click('#status-editor') await page.click(af + '#status-editor')
await page.click(`.menu-item:has-text("${status}")`) await page.click(`.menu-item:has-text("${status}")`)
} }
if (priority !== undefined) { if (priority !== undefined) {
await page.click('button:has-text("No priority")') await page.click(af + 'button:has-text("No priority")')
await page.click(`.selectPopup button:has-text("${priority}")`) await page.click(`.selectPopup button:has-text("${priority}")`)
} }
if (labels !== undefined) { if (labels !== undefined) {
await page.click('.button:has-text("Labels")') await page.click(af + '.button:has-text("Labels")')
for (const label of labels) { for (const label of labels) {
await page.click(`.selectPopup button:has-text("${label}") >> nth=0`) await page.click(`.selectPopup button:has-text("${label}") >> nth=0`)
} }
await page.keyboard.press('Escape') await page.keyboard.press('Escape')
} }
if (assignee !== undefined) { if (assignee !== undefined) {
await page.click('.button:has-text("Assignee")') await page.click(af + '.button:has-text("Assignee")')
await page.click(`.selectPopup button:has-text("${assignee}")`) await page.click(`.selectPopup button:has-text("${assignee}")`)
} }
if (component !== undefined) { if (component !== undefined) {
await page.click('form button:has-text("Component")') await page.click(af + 'button:has-text("Component")')
await page.click(`.selectPopup button:has-text("${component}")`) await page.click(`.selectPopup button:has-text("${component}")`)
} }
if (sprint !== undefined) { if (sprint !== undefined) {
await page.click('.button:has-text("No Sprint")') await page.click(af + '.button:has-text("No Sprint")')
await page.click(`.selectPopup button:has-text("${sprint}")`) await page.click(`.selectPopup button:has-text("${sprint}")`)
} }
} }
@ -83,8 +84,8 @@ export async function fillIssueForm (page: Page, props: IssueProps): Promise<voi
export async function createIssue (page: Page, props: IssueProps): Promise<void> { export async function createIssue (page: Page, props: IssueProps): Promise<void> {
await page.waitForSelector('span:has-text("Default")') await page.waitForSelector('span:has-text("Default")')
await page.click('button:has-text("New issue")') await page.click('button:has-text("New issue")')
await fillIssueForm(page, props) await fillIssueForm(page, props, true)
await page.click('button:has-text("Create issue")') await page.click('form button:has-text("Create issue")')
await page.waitForSelector('form.antiCard', { state: 'detached' }) await page.waitForSelector('form.antiCard', { state: 'detached' })
} }
@ -110,7 +111,7 @@ export async function createSprint (page: Page, sprintName: string): Promise<voi
export async function createSubissue (page: Page, props: IssueProps): Promise<void> { export async function createSubissue (page: Page, props: IssueProps): Promise<void> {
await page.click('button:has-text("Add sub-issue")') await page.click('button:has-text("Add sub-issue")')
await fillIssueForm(page, props) await fillIssueForm(page, props, false)
await page.click('button:has-text("Save")') await page.click('button:has-text("Save")')
} }

View File

@ -7,7 +7,7 @@ test.use({
test.describe('workbench tests', () => { test.describe('workbench tests', () => {
test.beforeEach(async ({ page }) => { test.beforeEach(async ({ page }) => {
// Create user and workspace // Create user and workspace
await page.goto(`${PlatformURI}/workbench/sanity-ws`) await (await page.goto(`${PlatformURI}/workbench/sanity-ws`))?.finished()
}) })
test('navigator', async ({ page }) => { test('navigator', async ({ page }) => {
// Click [id="app-recruit\:string\:RecruitApplication"] // Click [id="app-recruit\:string\:RecruitApplication"]