mirror of https://github.com/nocodb/nocodb
Muhammed Mustafa
2 years ago
23 changed files with 435 additions and 153 deletions
@ -0,0 +1,249 @@ |
|||||||
|
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.delete({ title: context.project.title }); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export { quickVerify }; |
Loading…
Reference in new issue