Merge pull request #2799 from nocobase/Review-to-confirm-feasibility

test: confirm the feasibility of e2e test cases
This commit is contained in:
hongboji 2023-10-12 09:51:57 +08:00 committed by GitHub
commit ebde1b236b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 2127 additions and 0 deletions

View File

@ -0,0 +1,43 @@
import { expect, test } from '@nocobase/test/client';
import { CreateLocalStorage } from './pageobject/localStorage';
import { dayjs } from '@nocobase/utils';
test.describe('file manager', () => {
test('add new local storage', async ({ page }) => {
//用例编号
const caseNum = 'FM01AA';
//用例标题
const caseTitle = 'add new local storage';
// 1、前置条件已登录
// 2、测试步骤进入“文件管理器”-“新建”按钮,填写表单,点击“确定”按钮
await page.goto('/admin/settings/file-manager/storages');
await page.waitForLoadState('networkidle');
await page.getByTestId('create-action').click();
const createLocalStorage = new CreateLocalStorage(page);
await createLocalStorage.title.fill(caseTitle);
const storageName = caseNum + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await createLocalStorage.storageName.fill(storageName);
await createLocalStorage.storagebaseURL.fill('/storage/uploadsFM01AA');
await createLocalStorage.storageType.click();
await page.getByText('Local storage').nth(1).click();
await createLocalStorage.destination.fill('storage/uploadsFM01AA');
// await createLocalStorage.path.fill('');
// await createLocalStorage.defaultStorage.check();
// await createLocalStorage.deleteRecordRetentionFile.check();
await page.getByTestId('submit-action').click();
// 3、预期结果新建成功列表中出现新建的文件管理器
await expect(page.getByText(storageName)).toBeAttached();
// await page.waitForTimeout(5000);
// 4、后置处理删除新建的文件管理器
await page
.getByRole('row', { name: '2 ' + caseTitle + ' ' + storageName + ' Edit Delete' })
.getByTestId('delete-action')
.click();
await page.getByRole('button', { name: 'OK' }).click();
await expect(page.getByText(storageName)).toBeHidden();
});
});

View File

@ -0,0 +1,56 @@
import { expect, test } from '@nocobase/test/client';
import { CreateLocalStorage, EditLocalStorage } from './pageobject/localStorage';
import { dayjs } from '@nocobase/utils';
test.describe('File manager', () => {
test('edit local storage title', async ({ page }) => {
//用例编号
const caseNum = 'FM02AA';
//用例标题
let caseTitle = 'edit local storage title';
// 1、前置条件1.1已登录;1.2存在一个文件管理器
await page.goto('/admin/settings/file-manager/storages');
await page.waitForLoadState('networkidle');
await page.getByTestId('create-action').click();
const createLocalStorage = new CreateLocalStorage(page);
await createLocalStorage.title.fill(caseTitle);
const storageName = caseNum + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await createLocalStorage.storageName.fill(storageName);
await createLocalStorage.storagebaseURL.fill('/storage/uploadsFM02AA');
await createLocalStorage.storageType.click();
await page.getByText('Local storage').nth(1).click();
await createLocalStorage.destination.fill('storage/uploadsFM02AA');
// await createLocalStorage.path.fill('');
// await createLocalStorage.defaultStorage.check();
// await createLocalStorage.deleteRecordRetentionFile.check();
await page.getByTestId('submit-action').click();
await expect(page.getByText(storageName)).toBeAttached();
// 2、测试步骤点击“文件管理器”-“编辑”按钮,编辑标题,点击“确定”按钮
await page
.getByRole('row', { name: '2 ' + caseTitle + ' ' + storageName + ' Edit Delete' })
.getByTestId('update-action')
.click();
const editLocalStorage = new EditLocalStorage(page);
caseTitle = caseTitle + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await editLocalStorage.title.fill(caseTitle);
// await editLocalStorage.path.fill('');
// await editLocalStorage.defaultStorage.check();
// await editLocalStorage.deleteRecordRetentionFile.check();
await page.getByTestId('submit-action').click();
// await page.waitForTimeout(5000);
// 3、预期结果编辑成功列表中出现编辑后的文件管理器
await expect(page.getByText(caseTitle)).toBeAttached();
// 4、后置处理删除文件管理器
await page
.getByRole('row', { name: '2 ' + caseTitle + ' ' + storageName + ' Edit Delete' })
.getByTestId('delete-action')
.click();
await page.getByRole('button', { name: 'OK' }).click();
await expect(page.getByText(storageName)).toBeHidden();
});
});

View File

@ -0,0 +1,49 @@
import type { Page, Locator } from '@nocobase/test/client';
export class CreateLocalStorage {
readonly page: Page;
title: Locator;
storageName: Locator;
storagebaseURL: Locator;
storageType: Locator;
destination: Locator;
path: Locator;
defaultStorage: Locator;
deleteRecordRetentionFile: Locator;
constructor(page: Page) {
this.page = page;
this.title = page.getByTestId('title-item').getByRole('textbox');
this.storageName = page.getByTestId('name-item').getByRole('textbox');
this.storagebaseURL = page.getByTestId('baseUrl-item').getByRole('textbox');
this.storageType = page.getByTestId('type-item').getByLabel('Search');
this.destination = page.getByTestId('documentRoot-item').getByRole('textbox');
this.path = page.getByTestId('path-item').getByRole('textbox');
this.defaultStorage = page.getByLabel('Default storage');
this.deleteRecordRetentionFile = page.getByLabel('Keep file in storage when destroy record');
}
}
export class EditLocalStorage {
readonly page: Page;
title: Locator;
storageName: Locator;
storagebaseURL: Locator;
storageType: Locator;
destination: Locator;
path: Locator;
defaultStorage: Locator;
deleteRecordRetentionFile: Locator;
constructor(page: Page) {
this.page = page;
this.title = page.getByTestId('title-item').getByRole('textbox');
this.storageName = page.getByTestId('name-item').getByRole('textbox');
this.storagebaseURL = page.getByTestId('baseUrl-item').getByRole('textbox');
this.storageType = page.getByTestId('type-item').getByLabel('Search');
this.destination = page.getByTestId('documentRoot-item').getByRole('textbox');
this.path = page.getByTestId('path-item').getByRole('textbox');
this.defaultStorage = page.getByLabel('Default storage');
this.deleteRecordRetentionFile = page.getByLabel('Keep file in storage when destroy record');
}
}

View File

@ -0,0 +1,36 @@
import { expect, test } from '@nocobase/test/client';
import { dayjs } from '@nocobase/utils';
import { CreateWorkFlow } from './pageobject/workFlow';
test.describe('workflow manage', () => {
test('add new from event', async ({ page }) => {
//用例编号
const caseNum = 'WF02AA';
//用例标题
const caseTitle = 'add new from event';
// 1、前置条件已登录
// 2、测试步骤进入“工作流管理”-“新建”按钮,填写表单,点击“确定”按钮
await page.goto('/admin/settings/workflow/workflows');
await page.waitForLoadState('networkidle');
await page.getByTestId('create-action').click();
const createWorkFlow = new CreateWorkFlow(page);
const workFlowName = caseTitle + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await createWorkFlow.name.fill(workFlowName);
await createWorkFlow.triggerType.click();
await page.getByText('Form event').click();
await page.getByTestId('submit-action').click();
// 3、预期结果新建成功列表中出现新建的工作流
await expect(page.getByText(workFlowName)).toBeAttached();
// 4、后置处理删除新建的工作流
await page.getByTestId('filter-action').click();
await page.getByRole('textbox').fill(workFlowName);
await page.getByRole('button', { name: 'Submit' }).click();
await page.getByRole('cell', { name: 'View Edit Duplicate Delete' }).getByTestId('delete-action').click();
await page.getByRole('button', { name: 'OK' }).click();
await expect(page.getByText(workFlowName)).toBeHidden();
});
});

View File

@ -0,0 +1,43 @@
import { expect, test } from '@nocobase/test/client';
import { CreateWorkFlow, EditWorkFlow } from './pageobject/workFlow';
import { dayjs } from '@nocobase/utils';
test.describe('workflow manage', () => {
test('edit from event name', async ({ page }) => {
//用例编号
const caseNum = 'WF05AA';
//用例标题
const caseTitle = 'edit from event name';
// 1、前置条件1.1、已登录,1.2、存在一个工作流
await page.goto('/admin/settings/workflow/workflows');
await page.waitForLoadState('networkidle');
await page.getByTestId('create-action').click();
const createWorkFlow = new CreateWorkFlow(page);
let workFlowName = caseTitle + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await createWorkFlow.name.fill(workFlowName);
await createWorkFlow.triggerType.click();
await page.getByText('Form event').click();
await page.getByTestId('submit-action').click();
await expect(page.getByText(workFlowName)).toBeAttached();
// 2、测试步骤进入“工作流管理”-“编辑”按钮,编辑名称,点击“确定”按钮
await page.getByTestId('update-action').click();
const editWorkFlow = new EditWorkFlow(page);
workFlowName = caseTitle + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await createWorkFlow.name.fill(workFlowName);
await page.getByTestId('submit-action').click();
// 3、预期结果编辑成功列表中出现编辑后的工作流
await expect(page.getByText(workFlowName)).toBeAttached();
// 4、后置处理删除工作流
await page.getByTestId('filter-action').click();
await page.getByRole('textbox').fill(workFlowName);
await page.getByRole('button', { name: 'Submit' }).click();
await page.getByRole('cell', { name: 'View Edit Duplicate Delete' }).getByTestId('delete-action').click();
await page.getByRole('button', { name: 'OK' }).click();
await expect(page.getByText(workFlowName)).toBeHidden();
});
});

View File

@ -0,0 +1,43 @@
import type { Page, Locator } from '@nocobase/test/client';
export class CreateWorkFlow {
readonly page: Page;
name: Locator;
triggerType: Locator;
description: Locator;
autoDeleteHistory: Locator;
constructor(page: Page) {
this.page = page;
this.name = page.getByTestId('title-item').getByRole('textbox');
this.triggerType = page.getByTestId('type-item').getByLabel('Search');
this.description = page.getByTestId('description-item').getByRole('textbox');
this.autoDeleteHistory = page
.getByTestId('deleteExecutionOnStatus-item')
.getByTestId('antd-select')
.locator('div')
.nth(1);
}
}
export class EditWorkFlow {
readonly page: Page;
name: Locator;
statusIsOn: Locator;
statusIisOff: Locator;
description: Locator;
autoDeleteHistory: Locator;
constructor(page: Page) {
this.page = page;
this.name = page.getByTestId('title-item').getByRole('textbox');
this.statusIsOn = page.getByTestId('enabled-item').getByLabel('On');
this.statusIisOff = page.getByLabel('Off');
this.description = page.getByTestId('description-item').getByRole('textbox');
this.autoDeleteHistory = page
.getByTestId('deleteExecutionOnStatus-item')
.getByTestId('antd-select')
.locator('div')
.nth(1);
}
}

View File

@ -0,0 +1,106 @@
import { expect, test } from '@nocobase/test/client';
import { CreateWorkFlow, EditWorkFlow } from './pageobject/workFlow';
import { dayjs } from '@nocobase/utils';
import { e2e_GeneralFormsTable, appendJsonCollectionName, generateRandomLetters } from './pageobject/e2eTemplateJson';
test.describe('trigger collection events', () => {
test('add data to trigger collection events', async ({ page, mockPage }) => {
//用例编号
const caseNum = 'WF20AA';
//后缀标识用于不同用例调用e2eTemplateJson.ts中相同模板JSON生成不同的数据表标识、名称
const appendText = caseNum.toLowerCase() + generateRandomLetters().toString();
//用例标题
const caseTitle = 'add data to trigger collection events';
// 1、前置条件1.1、已登录;1.2、存在一个配置好数据表的表单事件工作流1.3、存在一个添加数据的区块
//创建数据表
const e2eJsonCollectionDisplayName = '自动>组织[普通表]';
const e2eJsonCollectionName = 'tt_amt_org';
const collectionDisplayName = e2eJsonCollectionDisplayName + appendText;
const collectionName = e2eJsonCollectionName + appendText;
const fieldName = 'orgname';
const fieldDisplayName = '公司名称(单行文本)';
const newPage = mockPage(appendJsonCollectionName(e2e_GeneralFormsTable, appendText));
//配置工作流
await page.goto('/admin/settings/workflow/workflows');
await page.waitForLoadState('networkidle');
await page.getByTestId('create-action').click();
const createWorkFlow = new CreateWorkFlow(page);
const workFlowName = caseTitle + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await createWorkFlow.name.fill(workFlowName);
await createWorkFlow.triggerType.click();
await page.getByTitle('Collection event').getByText('Collection event').click();
await page.getByTestId('submit-action').click();
await expect(page.getByText(workFlowName)).toBeAttached();
//配置工作流触发器
await page
.getByRole('row', { name: '1 ' + workFlowName + ' Collection event Off 0 View Edit Duplicate Delete' })
.getByRole('link')
.click();
await page.getByRole('button', { name: 'Configure' }).click();
await page.getByTestId('antd-select').getByLabel('Search').click();
await page.getByText('自动>组织[普通表]').click();
await page.getByTestId('mode-item').getByLabel('Search').click();
await page.getByText('After record added', { exact: true }).click();
await page.getByTestId('submit-action').click();
await page.getByRole('link', { name: 'Workflow' }).click();
await page
.getByRole('row', { name: '1 ' + workFlowName + ' Collection event Off 0 View Edit Duplicate Delete' })
.getByTestId('update-action')
.click();
await page.getByTestId('enabled-item').getByLabel('On').check();
await page.getByTestId('submit-action').click();
//配置录入数据区块
await newPage.goto();
await page.getByRole('button', { name: 'plus Add block' }).hover();
await page.getByRole('menuitem', { name: 'table Table right' }).hover();
await page.getByRole('menuitem', { name: collectionDisplayName }).click();
await page.getByRole('button', { name: 'setting Configure columns' }).click();
await page.getByRole('menuitem', { name: fieldDisplayName }).getByRole('switch').click();
await page.getByRole('button', { name: 'setting Configure actions' }).hover();
await page.getByRole('menuitem', { name: 'Add new' }).getByRole('switch').click();
await expect(page.getByRole('menuitem', { name: 'Add new' }).getByRole('switch')).toBeEnabled();
await page.getByRole('button', { name: 'setting Configure columns' }).hover();
await page.getByRole('button', { name: 'Add new' }).click();
await page.getByLabel('Add new').getByRole('button', { name: 'plus Add block' }).hover();
await page.getByRole('menuitem', { name: 'form Form' }).click();
await page.getByRole('button', { name: 'plus Add tab' }).click();
await page.getByRole('button', { name: 'Cancel' }).click();
await page.getByLabel('Add new').getByRole('button', { name: 'setting Configure actions' }).click();
await page.getByRole('group').getByText('Submit').click();
await page.getByRole('button', { name: 'setting Configure fields' }).click();
await page.getByRole('menuitem', { name: fieldDisplayName }).getByRole('switch').click();
await page.getByRole('button', { name: 'plus Add tab' }).click();
await page.getByRole('button', { name: 'Cancel' }).click();
// 2、测试步骤进入“数据区块”-“添加”按钮,填写表单,点击“确定”按钮
await page
.getByTestId(collectionName + '.' + fieldName + '-field')
.getByRole('textbox')
.click();
const fieldData = fieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
await page
.getByTestId(collectionName + '.' + fieldName + '-field')
.getByRole('textbox')
.fill(fieldData);
await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByText(fieldData)).toBeAttached();
// 3、预期结果数据添加成功工作流成功触发
await expect(page.getByText(fieldData)).toBeAttached();
await page.goto('/admin/settings/workflow/workflows');
await expect(page.getByRole('table').locator('a').filter({ hasText: '1' })).toBeAttached();
// 4、后置处理删除工作流
await page.getByTestId('filter-action').click();
await page.getByRole('textbox').fill(workFlowName);
await page.getByRole('button', { name: 'Submit' }).click();
await page.getByRole('cell', { name: 'View Edit Duplicate Delete' }).getByTestId('delete-action').click();
await page.getByRole('button', { name: 'OK' }).click();
await expect(page.getByText(workFlowName)).toBeHidden();
});
});