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.
249 lines
7.9 KiB
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 }; |