|
|
|
import { expect } from '@playwright/test';
|
|
|
|
import { CellPageObject } from '.';
|
|
|
|
import BasePage from '../../../Base';
|
|
|
|
|
|
|
|
export class AttachmentCellPageObject extends BasePage {
|
|
|
|
readonly cell: CellPageObject;
|
|
|
|
|
|
|
|
constructor(cell: CellPageObject) {
|
|
|
|
super(cell.rootPage);
|
|
|
|
this.cell = cell;
|
|
|
|
}
|
|
|
|
|
|
|
|
get({ index, columnHeader }: { index?: number; columnHeader: string }) {
|
|
|
|
return this.cell.get({ index, columnHeader });
|
|
|
|
}
|
|
|
|
|
|
|
|
clickFilePicker({ index, columnHeader }: { index?: number; columnHeader: string }) {
|
|
|
|
return this.get({ index, columnHeader }).locator('[data-testid="attachment-cell-file-picker-button"]').click();
|
|
|
|
}
|
|
|
|
|
|
|
|
// filePath: to attach multiple files, pass an array of file paths
|
|
|
|
// e.g. ['path/to/file1', 'path/to/file2']
|
|
|
|
//
|
|
|
|
async addFile({
|
|
|
|
index,
|
|
|
|
columnHeader,
|
|
|
|
filePath,
|
|
|
|
skipElemClick,
|
|
|
|
}: {
|
|
|
|
index?: number;
|
|
|
|
columnHeader: string;
|
|
|
|
filePath: string[];
|
|
|
|
skipElemClick?: boolean;
|
|
|
|
}) {
|
|
|
|
await this.get({ index, columnHeader }).scrollIntoViewIfNeeded();
|
|
|
|
|
|
|
|
if (!skipElemClick) {
|
|
|
|
await this.get({ index, columnHeader }).click({ position: { x: 1, y: 1 } });
|
|
|
|
}
|
|
|
|
|
|
|
|
await this.get({ index, columnHeader }).locator('[data-testid="attachment-cell-file-picker-button"]').click();
|
|
|
|
|
|
|
|
await this.rootPage.locator('.nc-modal-attachment-create').waitFor({ state: 'visible' });
|
|
|
|
|
|
|
|
const attachFileAction = this.rootPage.getByTestId('attachment-drop-zone').click({ force: true });
|
|
|
|
|
|
|
|
await this.attachFile({ filePickUIAction: attachFileAction, filePath });
|
|
|
|
|
|
|
|
await this.rootPage.getByTestId('nc-upload-file').click();
|
|
|
|
|
|
|
|
// wait for file to be uploaded
|
|
|
|
await this.rootPage.waitForTimeout(750);
|
|
|
|
}
|
|
|
|
|
|
|
|
async removeFile({
|
|
|
|
attIndex,
|
|
|
|
index,
|
|
|
|
columnHeader,
|
|
|
|
skipElemClick,
|
|
|
|
}: {
|
|
|
|
attIndex: number;
|
|
|
|
index?: number;
|
|
|
|
columnHeader: string;
|
|
|
|
skipElemClick?: boolean;
|
|
|
|
}) {
|
|
|
|
await this.get({ index, columnHeader }).scrollIntoViewIfNeeded();
|
|
|
|
|
|
|
|
if (!skipElemClick) {
|
|
|
|
await this.get({ index, columnHeader }).click({ position: { x: 1, y: 1 } });
|
|
|
|
}
|
|
|
|
|
|
|
|
await this.get({ index, columnHeader }).locator('.nc-attachment-item').nth(attIndex).hover();
|
|
|
|
await this.get({ index, columnHeader })
|
|
|
|
.locator('.nc-attachment-item')
|
|
|
|
.nth(attIndex)
|
|
|
|
.locator('.nc-attachment-remove')
|
|
|
|
.click();
|
|
|
|
|
|
|
|
await this.rootPage.locator('.ant-modal.active').waitFor({ state: 'visible' });
|
|
|
|
await this.rootPage.locator('.ant-modal.active').getByTestId('nc-delete-modal-delete-btn').click();
|
|
|
|
await this.rootPage.locator('.ant-modal.active').waitFor({ state: 'hidden' });
|
|
|
|
}
|
|
|
|
|
|
|
|
async expandModalAddFile({ filePath }: { filePath: string[] }) {
|
|
|
|
const attachFileAction = this.rootPage
|
|
|
|
.locator('.ant-modal.nc-attachment-modal.active')
|
|
|
|
.locator('[data-testid="attachment-expand-file-picker-button"]')
|
|
|
|
.click();
|
|
|
|
return await this.attachFile({ filePickUIAction: attachFileAction, filePath });
|
|
|
|
}
|
|
|
|
|
|
|
|
async expandModalOpen({ index, columnHeader }: { index?: number; columnHeader: string }) {
|
|
|
|
return this.get({ index, columnHeader })
|
|
|
|
.locator('.nc-cell > .nc-attachment-cell > .group.cursor-pointer')
|
|
|
|
.last()
|
|
|
|
.click();
|
|
|
|
}
|
|
|
|
|
|
|
|
async verifyFile({ index, columnHeader }: { index: number; columnHeader: string }) {
|
|
|
|
await expect(this.get({ index, columnHeader }).locator('.nc-attachment')).toBeVisible();
|
|
|
|
}
|
|
|
|
|
|
|
|
async verifyFileCount({ index, columnHeader, count }: { index: number; columnHeader: string; count: number }) {
|
|
|
|
// retry below logic for 5 times, with 1 second delay
|
|
|
|
const attachments = this.get({ index, columnHeader }).locator('.nc-attachment');
|
|
|
|
await expect(attachments).toHaveCount(count);
|
|
|
|
}
|
|
|
|
|
|
|
|
async expandModalClose() {
|
|
|
|
return this.rootPage.locator('.ant-modal.nc-attachment-modal.active').press('Escape');
|
|
|
|
}
|
|
|
|
}
|