mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.6 KiB
137 lines
4.6 KiB
import { expect } from '@playwright/test'; |
|
import BasePage from '../../../Base'; |
|
import { ToolbarPage } from './index'; |
|
|
|
export class ToolbarFieldsPage extends BasePage { |
|
readonly toolbar: ToolbarPage; |
|
|
|
constructor(toolbar: ToolbarPage) { |
|
super(toolbar.rootPage); |
|
this.toolbar = toolbar; |
|
} |
|
|
|
get() { |
|
return this.rootPage.locator(`[data-testid="nc-fields-menu"]`); |
|
} |
|
|
|
// todo: Click and toggle are similar method. Remove one of them |
|
async toggle({ |
|
title, |
|
isLocallySaved, |
|
validateResponse = true, |
|
checked, |
|
}: { |
|
title: string; |
|
isLocallySaved?: boolean; |
|
validateResponse?: boolean; |
|
checked?: boolean; |
|
}) { |
|
await this.toolbar.clickFields(); |
|
|
|
// hack |
|
await this.rootPage.waitForTimeout(100); |
|
|
|
// toggle only if input checked value is not equal to given checked value |
|
await this.get().locator(`[data-testid="nc-fields-menu-${title}"]`).locator('.nc-switch').scrollIntoViewIfNeeded(); |
|
const isChecked = await this.get() |
|
.locator(`[data-testid="nc-fields-menu-${title}"]`) |
|
.locator('.nc-switch') |
|
.isChecked(); |
|
if (checked !== undefined) { |
|
if ((checked && isChecked) || (!checked && !isChecked)) { |
|
await this.toolbar.clickFields(); |
|
return; |
|
} |
|
} |
|
|
|
if (isChecked === true) { |
|
// disable response validation for hide field |
|
validateResponse = false; |
|
} |
|
|
|
const toggleColumn = () => |
|
this.get().locator(`[data-testid="nc-fields-menu-${title}"]`).locator('.nc-switch').click(); |
|
|
|
if (validateResponse) { |
|
await this.waitForResponse({ |
|
uiAction: toggleColumn, |
|
requestUrlPathToMatch: isLocallySaved ? '/api/v1/db/public/' : '/api/v1/db/data/noco/', |
|
httpMethodsToMatch: ['GET'], |
|
}); |
|
} else { |
|
await toggleColumn(); |
|
} |
|
|
|
await this.toolbar.parent.dashboard.waitForLoaderToDisappear(); |
|
await this.toolbar.clickFields(); |
|
} |
|
|
|
async verify({ title, checked }: { title: string; checked?: boolean }) { |
|
const checkbox = this.get().locator(`[data-testid="nc-fields-menu-${title}"]`).locator('.nc-switch'); |
|
|
|
if (checked) { |
|
await expect(checkbox).toBeChecked(); |
|
} else if (checked === false) { |
|
await expect(checkbox).not.toBeChecked(); |
|
} |
|
} |
|
|
|
async click({ title, isLocallySaved }: { title: string; isLocallySaved?: boolean }) { |
|
// hide field doesn't trigger an un-solicited update from backend |
|
// await this.waitForResponse({ |
|
// uiAction: () => this.get().locator(`[data-testid="nc-fields-menu-${title}"]`).locator('.nc-switch').click(), |
|
// requestUrlPathToMatch: isLocallySaved ? '/api/v1/db/public/' : '/api/v1/db/data/noco/', |
|
// httpMethodsToMatch: ['GET'], |
|
// }); |
|
await this.get().locator(`[data-testid="nc-fields-menu-${title}"]`).locator('.nc-switch').click(); |
|
await this.toolbar.parent.waitLoading(); |
|
} |
|
|
|
async toggleShowAllFields({ isLocallySaved }: { isLocallySaved?: boolean } = {}) { |
|
await this.toolbar.clickFields(); |
|
await this.waitForResponse({ |
|
uiAction: () => this.get().locator(`.nc-fields-show-all-fields`).click(), |
|
requestUrlPathToMatch: isLocallySaved ? '/api/v1/db/public/' : '/api/v1/db/data/noco/', |
|
httpMethodsToMatch: ['GET'], |
|
timeout: 10000, |
|
}); |
|
await this.toolbar.clickFields(); |
|
} |
|
|
|
// async showAll({ isLocallySaved }: { isLocallySaved?: boolean } = {}) { |
|
// await this.toolbar.clickFields(); |
|
// await this.waitForResponse({ |
|
// uiAction: () => this.get().locator(`button.nc-switch`).first().click(), |
|
// requestUrlPathToMatch: isLocallySaved ? '/api/v1/db/public/' : '/api/v1/db/data/noco/', |
|
// httpMethodsToMatch: ['GET'], |
|
// }); |
|
// await this.toolbar.clickFields(); |
|
// } |
|
|
|
async toggleShowSystemFields({ isLocallySaved }: { isLocallySaved?: boolean } = {}) { |
|
await this.toolbar.clickFields(); |
|
await this.waitForResponse({ |
|
uiAction: async () => await this.get().locator(`.nc-fields-show-system-fields`).click(), |
|
requestUrlPathToMatch: isLocallySaved ? '/api/v1/db/public/' : '/api/v1/db/data/noco/', |
|
httpMethodsToMatch: ['GET'], |
|
}); |
|
await this.toolbar.clickFields(); |
|
} |
|
|
|
async getFieldsTitles() { |
|
const fields: string[] = await this.rootPage.locator(`.nc-grid-header .name`).allTextContents(); |
|
return fields; |
|
} |
|
|
|
async dragDropFields(param: { from: number; to: number }) { |
|
await this.toolbar.clickFields(); |
|
const { from, to } = param; |
|
const [fromStack, toStack] = await Promise.all([ |
|
this.get().locator(`.cursor-move`).nth(from), |
|
this.get().locator(`.cursor-move`).nth(to), |
|
]); |
|
|
|
await fromStack.dragTo(toStack); |
|
await this.toolbar.clickFields(); |
|
} |
|
}
|
|
|