mirror of https://github.com/nocodb/nocodb
Raju Udava
2 years ago
12 changed files with 318 additions and 3 deletions
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 931 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 1.8 MiB |
@ -0,0 +1,158 @@
|
||||
import { ColumnPageObject } from '.'; |
||||
import BasePage from '../../../Base'; |
||||
import { expect } from '@playwright/test'; |
||||
|
||||
export class AttachmentColumnPageObject extends BasePage { |
||||
readonly column: ColumnPageObject; |
||||
|
||||
constructor(column: ColumnPageObject) { |
||||
super(column.rootPage); |
||||
this.column = column; |
||||
} |
||||
|
||||
get() { |
||||
return this.column.get(); |
||||
} |
||||
|
||||
async advanceConfig({ |
||||
columnTitle, |
||||
fileCount, |
||||
fileSize, |
||||
fileTypesExcludeList, |
||||
}: { |
||||
columnTitle: string; |
||||
fileCount?: number; |
||||
fileSize?: number; |
||||
fileTypesExcludeList?: string[]; |
||||
}) { |
||||
await this.column.openEdit({ title: columnTitle }); |
||||
await this.column.editMenuShowMore(); |
||||
|
||||
// text box : nc-attachment-max-count
|
||||
// text box : nc-attachment-max-size
|
||||
// checkbox : ant-tree-checkbox
|
||||
// Checkbox order: Application, Audio, Image, Video, Misc
|
||||
|
||||
if (fileCount) { |
||||
const inputMaxCount = await this.column.get().locator(`.nc-attachment-max-count`); |
||||
await inputMaxCount.locator(`input`).fill(fileCount.toString()); |
||||
} |
||||
|
||||
if (fileSize) { |
||||
const inputMaxSize = await this.column.get().locator(`.nc-attachment-max-size`); |
||||
await inputMaxSize.locator(`input`).fill(fileSize.toString()); |
||||
} |
||||
|
||||
if (fileTypesExcludeList) { |
||||
const treeList = await this.column.get().locator(`.ant-tree-list`); |
||||
const checkboxList = await treeList.locator(`.ant-tree-treenode`); |
||||
|
||||
// print count of treenode
|
||||
const count = await checkboxList.count(); |
||||
console.log(`count: ${count}`); |
||||
|
||||
// log checkboxList
|
||||
for (let i = 0; i < count; i++) { |
||||
const checkbox = await checkboxList.nth(i); |
||||
const text = await checkbox.innerText(); |
||||
console.log(`text: ${text}`); |
||||
} |
||||
|
||||
for (let i = 0; i < fileTypesExcludeList.length; i++) { |
||||
const fileType = fileTypesExcludeList[i]; |
||||
switch (fileType) { |
||||
case 'Application': |
||||
await checkboxList.nth(0).locator(`.ant-tree-checkbox`).click(); |
||||
break; |
||||
case 'Audio': |
||||
await checkboxList.nth(1).locator(`.ant-tree-checkbox`).click(); |
||||
break; |
||||
case 'Image': |
||||
await checkboxList.nth(2).locator(`.ant-tree-checkbox`).click(); |
||||
break; |
||||
case 'Video': |
||||
await checkboxList.nth(3).locator(`.ant-tree-checkbox`).click(); |
||||
break; |
||||
case 'Misc': |
||||
await checkboxList.nth(4).locator(`.ant-tree-checkbox`).click(); |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
await this.rootPage.waitForTimeout(1000); |
||||
} |
||||
|
||||
await this.column.save({ isUpdated: true }); |
||||
} |
||||
|
||||
// add multiple options at once after column creation is completed
|
||||
//
|
||||
async addOptions({ columnTitle, options }: { columnTitle: string; options: string[] }) { |
||||
await this.column.openEdit({ title: columnTitle }); |
||||
for (let i = 0; i < options.length; i++) { |
||||
await this.column.get().locator('button:has-text("Add option")').click(); |
||||
await this.column.get().locator(`[data-testid="select-column-option-input-${i}"]`).click(); |
||||
await this.column.get().locator(`[data-testid="select-column-option-input-${i}"]`).fill(options[i]); |
||||
} |
||||
await this.column.save({ isUpdated: true }); |
||||
} |
||||
|
||||
async editOption({ columnTitle, index, newOption }: { index: number; columnTitle: string; newOption: string }) { |
||||
await this.column.openEdit({ title: columnTitle }); |
||||
|
||||
await this.column.get().locator(`[data-testid="select-column-option-input-${index}"]`).click(); |
||||
await this.column.get().locator(`[data-testid="select-column-option-input-${index}"]`).fill(newOption); |
||||
|
||||
await this.column.save({ isUpdated: true }); |
||||
} |
||||
|
||||
async deleteOption({ columnTitle, index }: { index: number; columnTitle: string }) { |
||||
await this.column.openEdit({ title: columnTitle }); |
||||
|
||||
await this.column.get().locator(`svg[data-testid="select-column-option-remove-${index}"]`).click(); |
||||
|
||||
await expect(this.column.get().getByTestId(`select-column-option-${index}`)).toHaveClass(/removed/); |
||||
|
||||
await this.column.save({ isUpdated: true }); |
||||
} |
||||
|
||||
async deleteOptionWithUndo({ columnTitle, index }: { index: number; columnTitle: string }) { |
||||
await this.column.openEdit({ title: columnTitle }); |
||||
|
||||
await this.column.get().locator(`svg[data-testid="select-column-option-remove-${index}"]`).click(); |
||||
|
||||
await expect(this.column.get().getByTestId(`select-column-option-${index}`)).toHaveClass(/removed/); |
||||
|
||||
await this.column.get().locator(`svg[data-testid="select-column-option-remove-undo-${index}"]`).click(); |
||||
|
||||
await expect(this.column.get().getByTestId(`select-column-option-${index}`)).not.toHaveClass(/removed/); |
||||
|
||||
await this.column.save({ isUpdated: true }); |
||||
} |
||||
|
||||
async reorderOption({ |
||||
columnTitle, |
||||
sourceOption, |
||||
destinationOption, |
||||
}: { |
||||
columnTitle: string; |
||||
sourceOption: string; |
||||
destinationOption: string; |
||||
}) { |
||||
await this.column.openEdit({ title: columnTitle }); |
||||
|
||||
await this.column.rootPage.waitForTimeout(150); |
||||
|
||||
await this.column.rootPage.dragAndDrop( |
||||
`svg[data-testid="select-option-column-handle-icon-${sourceOption}"]`, |
||||
`svg[data-testid="select-option-column-handle-icon-${destinationOption}"]`, |
||||
{ |
||||
force: true, |
||||
} |
||||
); |
||||
|
||||
await this.column.save({ isUpdated: true }); |
||||
} |
||||
} |
Loading…
Reference in new issue