多维表格
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.

249 lines
7.9 KiB

import { DashboardPage } from "../pages/Dashboard";
import { ProjectsPage } from "../pages/ProjectsPage";
import { NcContext } from "../setup";
import { isMysql } from "../setup/db";
// normal fields
let recordCells = {
Name: "Movie-1",
Notes: "Good",
Status: "Todo",
Tags: "Jan",
Phone: "123123123",
Email: "a@b.com",
URL: "www.a.com",
Number: "1",
Value: "$1.00",
Percent: "0.01",
};
// links/ computed fields
let recordsVirtualCells = {
Duration: "00:01",
Done: true,
Date: "2022-05-31",
Rating: 1,
Actor: ["Actor1", "Actor2"],
"Status (from Actor)": ["Todo", "In progress"],
RollUp: "128",
Computation: "4.04",
Producer: ["P1", "P2"],
};
let tn = ["Film", "Actor", "Producer"];
let cn = [
"Name",
"Notes",
"Status",
"Tags",
"Done",
"Date",
"Phone",
"Email",
"URL",
"Number",
"Percent",
"Duration",
"Rating",
"Actor",
"Status (from Actor)",
"RollUp",
"Computation",
"Producer",
];
const quickVerify = async (
{
dashboard,
airtableImport,
context
}:
{
dashboard: DashboardPage,
airtableImport?: boolean,
context: NcContext
}) => {
await dashboard.treeView.openTable({ title: "Film" });
// Verify tables
for (let i = 0; i < tn.length; i++) {
await dashboard.treeView.verifyTable({ title: tn[i] });
}
let cellIndex = 0;
let columnCount = cn.length;
if (airtableImport) {
cellIndex = 2;
columnCount -= 3;
}
for (let i = 0; i < columnCount; i++) {
await dashboard.grid.column.verify({ title: cn[i] });
}
// Verify cells
// normal cells
for (let [key, value] of Object.entries(recordCells)) {
await dashboard.grid.cell.verify({ index: cellIndex, columnHeader: key, value });
}
// checkbox
await dashboard.grid.cell.checkbox.verifyChecked({ index: cellIndex, columnHeader: "Done" });
// duration
await dashboard.grid.cell.verify({ index: cellIndex, columnHeader: "Duration", value: recordsVirtualCells.Duration });
// rating
await dashboard.grid.cell.rating.verify({ index: cellIndex, columnHeader: "Rating", rating: recordsVirtualCells.Rating });
// LinkToAnotherRecord
await dashboard.grid.cell.verifyVirtualCell({ index: cellIndex, columnHeader: "Actor", value: isMysql(context) ? ['Actor1'] : recordsVirtualCells.Actor });
// Status (from Actor)
// todo: Find a way to verify only the elements that are passed in
// await dashboard.grid.cell.verify({ index: cellIndex, columnHeader: "Status (from Actor)", value: recordsVirtualCells["Status (from Actor)"][0] });
if(!airtableImport){
// RollUp
await dashboard.grid.cell.verify({ index: cellIndex, columnHeader: "RollUp", value: recordsVirtualCells.RollUp });
// Computation
await dashboard.grid.cell.verify({ index: cellIndex, columnHeader: "Computation", value: recordsVirtualCells.Computation });
// LinkToAnotherRecord
await dashboard.grid.cell.verifyVirtualCell({ index: cellIndex, columnHeader: "Producer", value: recordsVirtualCells.Producer });
}
// Verify form
await dashboard.viewSidebar.openView({ title: "FormTitle" });
await dashboard.form.verifyHeader({ title: "FormTitle", subtitle: "FormDescription" });
await dashboard.form.verifyFormFieldLabel({ index: 0, label: "DisplayName" });
await dashboard.form.verifyFormFieldHelpText({ index: 0, helpText: "HelpText" });
await dashboard.form.verifyFieldsIsEditable({ index: 0 });
await dashboard.form.verifyAfterSubmitMsg({ msg: "Thank you for submitting the form!" });
await dashboard.form.verifyAfterSubmitMenuState({
emailMe: false,
showBlankForm: true,
submitAnotherForm: true,
});
await dashboard.treeView.openTable({ title: "Actor" });
if(!airtableImport){
// Verify webhooks
await dashboard.grid.toolbar.clickActions();
await dashboard.grid.toolbar.actions.click("Webhooks");
await dashboard.webhookForm.openForm({
index: 0,
});
await dashboard.webhookForm.verifyForm(
{
title: "Webhook-1",
hookEvent: "After Insert",
notificationType: "URL",
urlMethod: "POST",
url: "http://localhost:9090/hook",
condition: false,
}
);
await dashboard.webhookForm.goBackFromForm();
await dashboard.webhookForm.openForm({
index: 1,
});
await dashboard.webhookForm.verifyForm(
{
title: "Webhook-2",
hookEvent: "After Update",
notificationType: "URL",
urlMethod: "POST",
url: "http://localhost:9090/hook",
condition: false,
}
);
await dashboard.webhookForm.goBackFromForm();
await dashboard.webhookForm.openForm({
index: 2,
});
await dashboard.webhookForm.verifyForm(
{
title: "Webhook-3",
hookEvent: "After Delete",
notificationType: "URL",
urlMethod: "POST",
url: "http://localhost:9090/hook",
condition: false,
}
);
await dashboard.webhookForm.close();
}
// Verify pagination
await dashboard.grid.verifyActivePage({ page: '1' });
(await dashboard.grid.clickPagination({ page: ">" }));
await dashboard.grid.verifyActivePage({ page: '2' });
(await dashboard.grid.clickPagination({ page: "<" }));
await dashboard.grid.verifyActivePage({ page: '1' });
await dashboard.viewSidebar.openView({ title: "Filter&Sort" });
// Verify Fields, Filter & Sort
await dashboard.grid.column.verify({ title: "Name" });
await dashboard.grid.column.verify({ title: "Notes" });
await dashboard.grid.column.verify({ title: "Attachments", isVisible: false });
await dashboard.grid.column.verify({ title: "Status" });
await dashboard.grid.column.verify({ title: "Film" });
// Verify Fields
await dashboard.grid.toolbar.clickFields();
await dashboard.grid.toolbar.fields.verify({ title: "Name", checked: true });
await dashboard.grid.toolbar.fields.verify({ title: "Notes", checked: true });
await dashboard.grid.toolbar.fields.verify({ title: "Attachments", checked: false });
await dashboard.grid.toolbar.fields.verify({ title: "Status", checked: true });
await dashboard.grid.toolbar.fields.verify({ title: "Film", checked: true });
// Verify Sort
await dashboard.grid.toolbar.clickSort();
await dashboard.grid.toolbar.sort.verify({ index:0, column: "Name", direction: "A → Z" });
// Verify Filter
await dashboard.grid.toolbar.clickFilter();
await dashboard.grid.toolbar.filter.verify({ index: 0, column: "Name", operator: "is like", value: "1" });
await dashboard.grid.toolbar.filter.verify({ index: 1, column: "Name", operator: "is like", value: "2" });
if(!airtableImport){
// Verify views
// todo: Wait for 800ms, issue related to vue router
await dashboard.rootPage.waitForTimeout(800);
await dashboard.treeView.openTable({ title: "Producer" });
await dashboard.viewSidebar.verifyView({ index: 0, title: "Grid view" });
await dashboard.viewSidebar.verifyView({ index: 1, title: "Grid 2" });
await dashboard.viewSidebar.verifyView({ index: 2, title: "Grid 3" });
await dashboard.viewSidebar.verifyView({ index: 3, title: "Grid 4" });
await dashboard.viewSidebar.verifyView({ index: 4, title: "Form" });
await dashboard.viewSidebar.verifyView({ index: 5, title: "Form 2" });
await dashboard.viewSidebar.verifyView({ index: 6, title: "Form 3" });
await dashboard.viewSidebar.verifyView({ index: 7, title: "Form 4" });
await dashboard.viewSidebar.verifyView({ index: 8, title: "Gallery" });
await dashboard.viewSidebar.verifyView({ index: 9, title: "Gallery 2" });
await dashboard.viewSidebar.verifyView({ index: 10, title: "Gallery 3" });
// verify BT relation
await dashboard.grid.cell.verifyVirtualCell({ index: 0, columnHeader: "FilmRead", value: ['Movie-1'] });
}
if(airtableImport){
// Delete project
await dashboard.clickHome();
const projectsPage = new ProjectsPage(dashboard.rootPage);
await projectsPage.deleteProject({ title: context.project.title, withoutPrefix: true });
}
}
export { quickVerify };