Browse Source

Merge pull request #3766 from nocodb/test/erd-pg-mysql

test: enable ERD for PG, SQLite
pull/3815/head
Raju Udava 2 years ago committed by GitHub
parent
commit
fe8395beb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 709
      scripts/cypress/integration/common/9b_ERD.js
  2. 3
      scripts/cypress/integration/test/pg-restMisc.js
  3. 4
      scripts/cypress/integration/test/xcdb-restMisc.js
  4. 263
      scripts/cypress/support/page_objects/projectConstants.js

709
scripts/cypress/integration/common/9b_ERD.js

@ -1,28 +1,45 @@
import { mainPage, settingsPage } from "../../support/page_objects/mainPage"; import { mainPage } from "../../support/page_objects/mainPage";
import { loginPage, projectsPage } from "../../support/page_objects/navigation"; import {loginPage} from "../../support/page_objects/navigation";
import { import { isTestSuiteActive, mysqlSakilaSqlViews, mysqlSakilaTables, pgSakilaSqlViews, pgSakilaTables, sqliteSakilaSqlViews } from "../../support/page_objects/projectConstants";
isTestSuiteActive,
sakilaSqlViews, import {getProjectString} from "../../support/page_objects/projectConstants";
sakilaTables,
} from "../../support/page_objects/projectConstants";
export const genTest = (apiType, dbType) => { export const genTest = (apiType, dbType) => {
if (!isTestSuiteActive(apiType, dbType)) return; if (!isTestSuiteActive(apiType, dbType)) return;
let projectId;
let sakilaTables, sakilaSqlViews;
describe(`${apiType.toUpperCase()} ERD`, () => { describe(`${apiType.toUpperCase()} ERD`, () => {
// before(() => { before(() => {
// loginPage.loginAndOpenProject(apiType, dbType); cy.restoreLocalStorage();
// cy.openTableTab("Country", 25);
// cy.saveLocalStorage(); // loginPage.loginAndOpenProject(apiType, dbType);
// });
cy.openTableTab("Country", 25);
projectId = getProjectString()
cy.log('erd:getProjectString' + projectId)
if (dbType === "postgres") {
sakilaTables = pgSakilaTables;
sakilaSqlViews = pgSakilaSqlViews;
} else if(dbType === "mysql") {
sakilaTables = mysqlSakilaTables;
sakilaSqlViews = mysqlSakilaSqlViews;
} else if(dbType === "xcdb") {
sakilaTables = mysqlSakilaTables.map((tableName) => `${projectId}${tableName}`);
sakilaSqlViews = sqliteSakilaSqlViews.map((viewName) => `${projectId}${viewName}`);
}
cy.saveLocalStorage();
});
beforeEach(() => { beforeEach(() => {
cy.restoreLocalStorage(); cy.restoreLocalStorage();
}); })
afterEach(() => { afterEach(() => {
cy.saveLocalStorage(); cy.saveLocalStorage();
}); })
after(() => { after(() => {
cy.restoreLocalStorage(); cy.restoreLocalStorage();
@ -33,7 +50,7 @@ export const genTest = (apiType, dbType) => {
// Test cases // Test cases
it(`Enable MM setting Open Table ERD`, () => { it(`Enable MM setting Open Table ERD`, () => {
cy.openTableTab("Country", 25); // cy.openTableTab("Country", 25);
mainPage.toggleShowMMSetting(); mainPage.toggleShowMMSetting();
mainPage.openErdTab(); mainPage.openErdTab();
@ -42,408 +59,500 @@ export const genTest = (apiType, dbType) => {
it(`Verify ERD Context menu in all table view`, () => { it(`Verify ERD Context menu in all table view`, () => {
mainPage.openErdTab(); mainPage.openErdTab();
cy.get(".nc-erd-context-menu").should("be.visible"); cy.get('.nc-erd-context-menu').should('be.visible');
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-histogram').should('be.visible');
.get(".nc-erd-histogram") cy.get('.nc-erd-context-menu').find('.ant-checkbox').should('have.length', 3);
.should("be.visible"); cy.get('.nc-erd-context-menu').find('.ant-checkbox').eq(0).should('have.class', 'ant-checkbox-checked');
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').find('.ant-checkbox').eq(1).should('have.class', 'ant-checkbox-checked');
.find(".ant-checkbox") cy.get('.nc-erd-context-menu').find('.ant-checkbox').eq(2).should('not.have.class', 'ant-checkbox-checked');
.should("have.length", 3);
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').find('.nc-erd-showColumns-label').dblclick();
.find(".ant-checkbox") cy.get('.nc-erd-context-menu').find('.ant-checkbox').should('have.length', 5);
.eq(0)
.should("have.class", "ant-checkbox-checked");
cy.get(".nc-erd-context-menu")
.find(".ant-checkbox")
.eq(1)
.should("have.class", "ant-checkbox-checked");
cy.get(".nc-erd-context-menu")
.find(".ant-checkbox")
.eq(2)
.should("not.have.class", "ant-checkbox-checked");
cy.get(".nc-erd-context-menu")
.find(".nc-erd-showColumns-label")
.dblclick();
cy.get(".nc-erd-context-menu")
.find(".ant-checkbox")
.should("have.length", 5);
}); });
it("Verify ERD of all tables view and verify columns of actor and payment with default config", () => { it("Verify ERD of all tables view and verify columns of actor and payment with default config", () => {
cy.get(".nc-erd-vue-flow") if(dbType === "mysql") {
.find(".nc-erd-table-node") cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 12)
.should("have.length", 12); cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 14)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 11)
.find(".vue-flow__edge") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 17)
.should("have.length", 14); } else if (dbType === "postgres") {
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 17)
.find(".nc-erd-edge-circle") cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 32)
.should("have.length", 11); cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 29)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 35)
.find(".nc-erd-edge-rect") } else {
.should("have.length", 17); cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 12)
cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 14)
for (const tableName of sakilaTables) { cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 11)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 17)
.find(`.nc-erd-table-node-${tableName}`) }
.should("exist");
for(const tableName of sakilaTables) {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${tableName}`).should('exist');
} }
// Actor table // Actor table
[ [
"actor_id", 'actor_id',
"first_name", 'first_name',
"last_name", 'last_name',
"last_update", 'last_update',
"film_list", 'film_list'
].forEach((colTitle) => { ].forEach((colTitle) => {
cy.get(".nc-erd-vue-flow") if (dbType === "xcdb") {
.find(`.nc-erd-table-node-actor`) cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}actor`).find(`.nc-erd-table-node-${projectId}actor-column-${colTitle}`).should('exist');
.find(`.nc-erd-table-node-actor-column-${colTitle}`) } else {
.should("exist"); cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-actor`).find(`.nc-erd-table-node-actor-column-${colTitle}`).should('exist');
}
}); });
// Payment table // Payment table
[ if(dbType === "mysql") {
"payment_id", [
"customer_id", 'payment_id',
"staff_id", 'customer_id',
"rental_id", 'staff_id',
"amount", 'rental_id',
"payment_date", 'amount',
"last_update", 'payment_date',
"customer", 'last_update',
"rental", 'customer',
"staff", 'rental',
].forEach((colTitle) => { 'staff'
cy.get(".nc-erd-vue-flow") ]
.find(`.nc-erd-table-node-payment`) .forEach((colTitle) => {
.find(`.nc-erd-table-node-payment-column-${colTitle}`) cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-payment`).find(`.nc-erd-table-node-payment-column-${colTitle}`).should('exist');
.should("exist"); });
}); } else if(dbType === "postgres") {
[
'payment_id',
'customer_id',
'staff_id',
'rental_id',
'amount',
'payment_date',
'customer',
'rental',
'staff'
]
.forEach((colTitle) => {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-payment`).find(`.nc-erd-table-node-payment-column-${colTitle}`).should('exist');
});
} else {
[
'payment_id',
'customer_id',
'staff_id',
'rental_id',
'amount',
'payment_date',
'last_update',
'customer',
'rental',
'staff'
]
.forEach((colTitle) => {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}payment`).find(`.nc-erd-table-node-${projectId}payment-column-${colTitle}`).should('exist');
});
}
}); });
it("Verify ERD of all tables view and verify columns of actor and payment with default config with showAllColumn disabled", () => { it("Verify ERD of all tables view and verify columns of actor and payment with default config with showAllColumn disabled", () => {
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showColumns-checkbox').click();
.get(".nc-erd-showColumns-checkbox") cy.get('.nc-erd-showPkAndFk-checkbox-disabled').should('exist');
.click(); cy.get('.nc-erd-showPkAndFk-checkbox-unchecked').should('exist');
cy.get(".nc-erd-showPkAndFk-checkbox-disabled").should("exist");
cy.get(".nc-erd-showPkAndFk-checkbox-unchecked").should("exist");
// Actor table // Actor table
["film_list"].forEach((colTitle) => { [
cy.get(".nc-erd-vue-flow") 'film_list'
.find(`.nc-erd-table-node-actor`) ].forEach((colTitle) => {
.find(`.nc-erd-table-node-actor-column-${colTitle}`) if(dbType === "xcdb") {
.should("exist"); cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}actor`).find(`.nc-erd-table-node-${projectId}actor-column-${colTitle}`).should('exist');
} else {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-actor`).find(`.nc-erd-table-node-actor-column-${colTitle}`).should('exist');
}
}); });
// Payment table // Payment table
["customer", "rental", "staff"].forEach((colTitle) => { [
cy.get(".nc-erd-vue-flow") 'customer',
.find(`.nc-erd-table-node-payment`) 'rental',
.find(`.nc-erd-table-node-payment-column-${colTitle}`) 'staff'
.should("exist"); ].forEach((colTitle) => {
if(dbType === "xcdb") {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}payment`).find(`.nc-erd-table-node-${projectId}payment-column-${colTitle}`).should('exist');
} else {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-payment`).find(`.nc-erd-table-node-payment-column-${colTitle}`).should('exist');
}
}); });
}); });
it("Verify ERD of all tables view and verify columns of actor and payment with default config with showPkAndFk disabled", () => { it("Verify ERD of all tables view and verify columns of actor and payment with default config with showPkAndFk disabled", () => {
// enable showAllColumn // enable showAllColumn
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showColumns-checkbox').click();
.get(".nc-erd-showColumns-checkbox") cy.get('.nc-erd-context-menu').get('.nc-erd-showPkAndFk-checkbox').click();
.click();
cy.get(".nc-erd-context-menu")
.get(".nc-erd-showPkAndFk-checkbox")
.click();
// Actor table // Actor table
["last_name", "last_update", "film_list"].forEach((colTitle) => {
cy.get(".nc-erd-vue-flow")
.find(`.nc-erd-table-node-actor`)
.find(`.nc-erd-table-node-actor-column-${colTitle}`)
.should("exist");
});
// Payment table
[ [
"amount", 'last_name',
"payment_date", 'last_update',
"last_update", 'film_list'
"customer",
"rental",
"staff",
].forEach((colTitle) => { ].forEach((colTitle) => {
cy.get(".nc-erd-vue-flow") if(dbType === "xcdb") {
.find(`.nc-erd-table-node-payment`) cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}actor`).find(`.nc-erd-table-node-${projectId}actor-column-${colTitle}`).should('exist');
.find(`.nc-erd-table-node-payment-column-${colTitle}`) } else {
.should("exist"); cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-actor`).find(`.nc-erd-table-node-actor-column-${colTitle}`).should('exist');
}
}); });
// Payment table
if(dbType === "mysql") {
[
'amount',
'payment_date',
'last_update',
'customer',
'rental',
'staff'
].forEach((colTitle) => {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-payment`).find(`.nc-erd-table-node-payment-column-${colTitle}`).should('exist');
});
} else if(dbType === "postgres") {
[
'amount',
'payment_date',
'customer',
'rental',
'staff'
].forEach((colTitle) => {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-payment`).find(`.nc-erd-table-node-payment-column-${colTitle}`).should('exist');
});
} else {
[
'amount',
'payment_date',
'last_update',
'customer',
'rental',
'staff'
].forEach((colTitle) => {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}payment`).find(`.nc-erd-table-node-${projectId}payment-column-${colTitle}`).should('exist');
});
}
}); });
it("Verify ERD of all tables view with sql grid on and verify columns of ActorInfo", () => { it("Verify ERD of all tables view with sql grid on and verify columns of ActorInfo", () => {
cy.get(".nc-erd-context-menu").get(".nc-erd-showViews-checkbox").click(); cy.get('.nc-erd-context-menu').get('.nc-erd-showViews-checkbox').click();
cy.get(".nc-erd-vue-flow") if(dbType === "mysql") {
.find(".nc-erd-table-node") cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 19)
.should("have.length", 19); cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 14)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 11)
.find(".vue-flow__edge") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 17)
.should("have.length", 14); } else if(dbType === "postgres") {
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 24)
.find(".nc-erd-edge-circle") cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 32)
.should("have.length", 11); cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 29)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 35)
.find(".nc-erd-edge-rect") } else {
.should("have.length", 17); cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 19)
cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 14)
for (const tableName of sakilaTables) { cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 11)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 17)
.find(`.nc-erd-table-node-${tableName}`)
.should("exist");
} }
for (const tableName of sakilaSqlViews) { for(const tableName of sakilaTables) {
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${tableName}`).should('exist');
.find(`.nc-erd-table-node-${tableName}`) }
.should("exist");
for(const tableName of sakilaSqlViews) {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${tableName}`).should('exist');
} }
// ActorInfo SQL View // ActorInfo SQL View
["actor_id", "first_name", "last_name", "film_info"].forEach( let actorInfoColumns;
(colTitle) => { if(dbType === "xcdb") {
cy.get(".nc-erd-vue-flow") actorInfoColumns = [
.find(`.nc-erd-table-node-actor_info`) 'ID',
.find(`.nc-erd-table-node-actor_info-column-${colTitle}`) 'name',
.should("exist"); 'address',
'zip_code',
'phone',
'city',
'country',
'SID',
];
} else {
actorInfoColumns = [
'actor_id',
'first_name',
'last_name',
'film_info'
];
}
actorInfoColumns.forEach((colTitle) => {
if(dbType === "xcdb") {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}actor_info`).find(`.nc-erd-table-node-${projectId}actor_info-column-${colTitle}`).should('exist');
} else {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-actor_info`).find(`.nc-erd-table-node-actor_info-column-${colTitle}`).should('exist');
} }
); })
}); });
it("Verify show MM tables", () => { it("Verify show MM tables", () => {
cy.get(".nc-erd-vue-flow") if(dbType === "xcdb") {
.find(`.nc-erd-table-node-store`) cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}store`).should('not.exist');
.should("not.exist"); } else {
cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-store`).should('not.exist');
}
// disable showViews // disable showViews
cy.get(".nc-erd-context-menu").get(".nc-erd-showViews-checkbox").click(); cy.get('.nc-erd-context-menu').get('.nc-erd-showViews-checkbox').click();
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showMMTables-checkbox').click();
.get(".nc-erd-showMMTables-checkbox")
.click(); if(dbType === "mysql") {
cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 16)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 26)
.find(".nc-erd-table-node") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 22)
.should("have.length", 16); cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 30)
cy.get(".nc-erd-vue-flow") } else if(dbType === "postgres") {
.find(".vue-flow__edge") cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 21)
.should("have.length", 26); cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 44)
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 40)
.find(".nc-erd-edge-circle") cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 48)
.should("have.length", 22); } else {
cy.get(".nc-erd-vue-flow") cy.get('.nc-erd-vue-flow').find('.nc-erd-table-node').should('have.length', 16)
.find(".nc-erd-edge-rect") cy.get('.nc-erd-vue-flow').find('.vue-flow__edge').should('have.length', 26)
.should("have.length", 30); cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-circle').should('have.length', 22)
cy.get('.nc-erd-vue-flow').find('.nc-erd-edge-rect').should('have.length', 30)
}
// Check if store table is present // Check if store table is present
cy.get(".nc-erd-vue-flow") if(dbType === "xcdb") {
.find(`.nc-erd-table-node-store`) cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-${projectId}store`).should('exist');
.should("exist"); } else {
}); cy.get('.nc-erd-vue-flow').find(`.nc-erd-table-node-store`).should('exist');
}
})
it("Verify show junction table names", () => { it("Verify show junction table names", () => {
// disable showViews // disable showViews
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showJunctionTableNames-checkbox').click();
.get(".nc-erd-showJunctionTableNames-checkbox")
.click();
cy.get(".nc-erd-vue-flow") if(dbType === "xcdb") {
.get(".nc-erd-table-label-filmactor-film_actor") cy.get('.nc-erd-vue-flow').get(`.nc-erd-table-label-filmactor-${projectId}film_actor`).should('exist');
.should("exist"); } else {
cy.get('.nc-erd-vue-flow').get('.nc-erd-table-label-filmactor-film_actor').should('exist');
}
mainPage.closeMetaTab(); mainPage.closeMetaTab();
}); })
it("Verify table ERD view of country", () => { it('Verify table ERD view of country', () => {
mainPage.openTableErdView(); mainPage.openTableErdView();
cy.get(".nc-erd-vue-flow-single-table") cy.get('.nc-erd-vue-flow-single-table').find('.nc-erd-table-node').should('have.length', 2)
.find(".nc-erd-table-node") cy.get('.nc-erd-vue-flow-single-table').find('.vue-flow__edge').should('have.length', 1)
.should("have.length", 2); cy.get('.nc-erd-vue-flow-single-table').find('.nc-erd-edge-circle').should('have.length', 1)
cy.get(".nc-erd-vue-flow-single-table") cy.get('.nc-erd-vue-flow-single-table').find('.nc-erd-edge-rect').should('have.length', 1)
.find(".vue-flow__edge")
.should("have.length", 1);
cy.get(".nc-erd-vue-flow-single-table")
.find(".nc-erd-edge-circle")
.should("have.length", 1);
cy.get(".nc-erd-vue-flow-single-table")
.find(".nc-erd-edge-rect")
.should("have.length", 1);
const countryColumns = [ const countryColumns = [
"country_id", 'country_id',
"country", 'country',
"last_update", 'last_update',
"city_list", 'city_list'
]; ]
// Country table // Country table
countryColumns.forEach((colTitle) => { countryColumns.forEach((colTitle) => {
cy.get(".nc-erd-vue-flow-single-table") if(dbType === "xcdb") {
.find(`.nc-erd-table-node-country`) cy.get('.nc-erd-vue-flow-single-table').find(`.nc-erd-table-node-${projectId}country`).find(`.nc-erd-table-node-${projectId}country-column-${colTitle}`).should('exist');
.find(`.nc-erd-table-node-country-column-${colTitle}`) } else {
.should("exist"); cy.get('.nc-erd-vue-flow-single-table').find(`.nc-erd-table-node-country`).find(`.nc-erd-table-node-country-column-${colTitle}`).should('exist');
}
}); });
const cityColumns = [ const cityColumns = [
"city_id", 'city_id',
"city", 'city',
"last_update", 'last_update',
"country", 'country',
"address_list", 'address_list'
]; ]
// City table // City table
cityColumns.forEach((colTitle) => { cityColumns.forEach((colTitle) => {
cy.get(".nc-erd-vue-flow-single-table") if(dbType === "xcdb") {
.find(`.nc-erd-table-node-city`) cy.get('.nc-erd-vue-flow-single-table').find(`.nc-erd-table-node-${projectId}city`).find(`.nc-erd-table-node-${projectId}city-column-${colTitle}`).should('exist');
.find(`.nc-erd-table-node-city-column-${colTitle}`) } else {
.should("exist"); cy.get('.nc-erd-vue-flow-single-table').find(`.nc-erd-table-node-city`).find(`.nc-erd-table-node-city-column-${colTitle}`).should('exist');
}
}); });
}); })
it("Verify table ERD view of country showAllColumn disabled", () => { it('Verify table ERD view of country showAllColumn disabled', () => {
cy.get(".nc-erd-vue-flow-single-table").within(() => { cy.get('.nc-erd-vue-flow-single-table').within(() => {
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showColumns-checkbox').click();
.get(".nc-erd-showColumns-checkbox") cy.get('.nc-erd-showPkAndFk-checkbox-disabled').should('exist');
.click(); cy.get('.nc-erd-showPkAndFk-checkbox-unchecked').should('exist');
cy.get(".nc-erd-showPkAndFk-checkbox-disabled").should("exist");
cy.get(".nc-erd-showPkAndFk-checkbox-unchecked").should("exist");
const countryColumns = ["city_list"]; const countryColumns = [
'city_list'
]
// Country table // Country table
countryColumns.forEach((colTitle) => { countryColumns.forEach((colTitle) => {
cy.get(`.nc-erd-table-node-country`) if(dbType === "xcdb") {
.find(`.nc-erd-table-node-country-column-${colTitle}`) cy.get(`.nc-erd-table-node-${projectId}country`).find(`.nc-erd-table-node-${projectId}country-column-${colTitle}`).should('exist');
.should("exist"); } else {
cy.get(`.nc-erd-table-node-country`).find(`.nc-erd-table-node-country-column-${colTitle}`).should('exist');
}
}); });
const cityColumns = ["country", "address_list"]; const cityColumns = [
'country',
'address_list'
]
// City table // City table
cityColumns.forEach((colTitle) => { cityColumns.forEach((colTitle) => {
cy.get(`.nc-erd-table-node-city`) if(dbType === "xcdb") {
.find(`.nc-erd-table-node-city-column-${colTitle}`) cy.get(`.nc-erd-table-node-${projectId}city`).find(`.nc-erd-table-node-${projectId}city-column-${colTitle}`).should('exist');
.should("exist"); } else {
cy.get(`.nc-erd-table-node-city`).find(`.nc-erd-table-node-city-column-${colTitle}`).should('exist');
}
}); });
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showColumns-checkbox').click();
.get(".nc-erd-showColumns-checkbox") })
.click(); })
});
});
it("Verify table ERD view of country show PK AND FK disabled", () => { it('Verify table ERD view of country show PK AND FK disabled', () => {
cy.get(".nc-erd-vue-flow-single-table").within(() => { cy.get('.nc-erd-vue-flow-single-table').within(() => {
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showPkAndFk-checkbox').click();
.get(".nc-erd-showPkAndFk-checkbox")
.click();
const countryColumns = ["country", "last_update", "city_list"]; const countryColumns = [
'country',
'last_update',
'city_list'
]
// Country table // Country table
countryColumns.forEach((colTitle) => { countryColumns.forEach((colTitle) => {
cy.get(`.nc-erd-table-node-country`) if(dbType === "xcdb") {
.find(`.nc-erd-table-node-country-column-${colTitle}`) cy.get(`.nc-erd-table-node-${projectId}country`).find(`.nc-erd-table-node-${projectId}country-column-${colTitle}`).should('exist');
.should("exist"); } else {
cy.get(`.nc-erd-table-node-country`).find(`.nc-erd-table-node-country-column-${colTitle}`).should('exist');
}
}); });
const cityColumns = ["city", "last_update", "country", "address_list"]; const cityColumns = [
'city',
'last_update',
'country',
'address_list'
]
// City table // City table
cityColumns.forEach((colTitle) => { cityColumns.forEach((colTitle) => {
cy.get(`.nc-erd-table-node-city`) if(dbType === "xcdb") {
.find(`.nc-erd-table-node-city-column-${colTitle}`) cy.get(`.nc-erd-table-node-${projectId}city`).find(`.nc-erd-table-node-${projectId}city-column-${colTitle}`).should('exist');
.should("exist"); } else {
cy.get(`.nc-erd-table-node-city`).find(`.nc-erd-table-node-city-column-${colTitle}`).should('exist');
}
}); });
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').get('.nc-erd-showPkAndFk-checkbox').click();
.get(".nc-erd-showPkAndFk-checkbox")
.click(); })
}); cy.getActiveModal().find('.nc-modal-close').click({ force: true });
cy.getActiveModal().find(".nc-modal-close").click({ force: true }); })
});
it("create column and check if the change is in the schema", () => { it('create column and check if the change is in the schema', () => {
mainPage.addColumn("test_column", "country"); mainPage.addColumn('test_column', 'country')
// table view // table view
mainPage.openTableErdView(); mainPage.openTableErdView();
cy.get(".nc-erd-vue-flow-single-table").within(() => { cy.get('.nc-erd-vue-flow-single-table').within(() => {
cy.get(".nc-erd-table-node-country") if(dbType === "xcdb") {
.find(".nc-erd-table-node-country-column-test_column") cy.get(`.nc-erd-table-node-${projectId}country`).find(`.nc-erd-table-node-${projectId}country-column-test_column`).should('exist');
.should("exist"); } else {
}); cy.get('.nc-erd-table-node-country').find('.nc-erd-table-node-country-column-test_column').should('exist');
cy.getActiveModal().find(".nc-modal-close").click({ force: true }); }
})
cy.getActiveModal().find('.nc-modal-close').click({ force: true });
// All table view // All table view
mainPage.openErdTab(); mainPage.openErdTab();
cy.get(".nc-erd-vue-flow").within(() => { cy.get('.nc-erd-vue-flow').within(() => {
cy.get(".nc-erd-table-node-country") if(dbType === "xcdb") {
.find(".nc-erd-table-node-country-column-test_column") cy.get(`.nc-erd-table-node-${projectId}country`).find(`.nc-erd-table-node-${projectId}country-column-test_column`).should('exist');
.should("exist"); } else {
}); cy.get('.nc-erd-table-node-country').find('.nc-erd-table-node-country-column-test_column').should('exist');
}
})
mainPage.closeMetaTab(); mainPage.closeMetaTab();
mainPage.deleteColumn("test_column");
mainPage.deleteColumn('test_column')
// table view // table view
mainPage.openTableErdView(); mainPage.openTableErdView();
cy.get(".nc-erd-vue-flow-single-table").within(() => { cy.get('.nc-erd-vue-flow-single-table').within(() => {
cy.get(".nc-erd-table-node-country") if(dbType === "xcdb") {
.find(".nc-erd-table-node-country-column-test_column") cy.get(`.nc-erd-table-node-${projectId}country`).find(`.nc-erd-table-node-${projectId}country-column-test_column`).should('not.exist');
.should("not.exist"); } else {
}); cy.get('.nc-erd-table-node-country').find('.nc-erd-table-node-country-column-test_column').should('not.exist');
cy.getActiveModal().find(".nc-modal-close").click({ force: true }); }
})
cy.getActiveModal().find('.nc-modal-close').click({ force: true });
// All table view // All table view
mainPage.openErdTab(); mainPage.openErdTab();
cy.get(".nc-erd-vue-flow").within(() => { cy.get('.nc-erd-vue-flow').within(() => {
cy.get(".nc-erd-table-node-country") if(dbType === "xcdb") {
.find(".nc-erd-table-node-country-column-test_column") cy.get(`.nc-erd-table-node-${projectId}country`).find(`.nc-erd-table-node-${projectId}country-column-test_column`).should('not.exist');
.should("not.exist"); } else {
}); cy.get('.nc-erd-table-node-country').find('.nc-erd-table-node-country-column-test_column').should('not.exist');
}
})
mainPage.closeMetaTab(); mainPage.closeMetaTab();
}); })
it("Create table should reflected in ERD", () => { it('Create table should reflected in ERD', () => {
cy.createTable("new"); cy.createTable('new')
mainPage.openErdTab(); mainPage.openErdTab();
cy.get(".nc-erd-vue-flow").within(() => { cy.get('.nc-erd-vue-flow').within(() => {
cy.get(".nc-erd-table-node-new").should("exist"); if(dbType === "xcdb") {
}); cy.get(`.nc-erd-table-node-${projectId}new`).should('exist');
} else {
cy.get('.nc-erd-table-node-new').should('exist');
}
})
mainPage.closeMetaTab(); mainPage.closeMetaTab();
cy.deleteTable("new"); cy.deleteTable('new')
mainPage.openErdTab(); mainPage.openErdTab();
cy.get(".nc-erd-vue-flow").within(() => { cy.get('.nc-erd-vue-flow').within(() => {
cy.get(".nc-erd-table-node-new").should("not.exist"); if(dbType === "xcdb") {
}); cy.get(`.nc-erd-table-node-${projectId}new`).should('not.exist');
} else {
cy.get('.nc-erd-table-node-new').should('not.exist');
}
})
mainPage.closeMetaTab(); mainPage.closeMetaTab();
}); })
it(`Disable MM setting Open Table ERD and check easter egg should not work`, () => { it(`Disable MM setting Open Table ERD and check easter egg should not work`, () => {
mainPage.toggleShowMMSetting(); mainPage.toggleShowMMSetting();
mainPage.openErdTab(); mainPage.openErdTab();
cy.get(".nc-erd-vue-flow").within(() => { cy.get('.nc-erd-vue-flow').within(() => {
cy.get(".nc-erd-context-menu") cy.get('.nc-erd-context-menu').find('.nc-erd-showColumns-label').dblclick();
.find(".nc-erd-showColumns-label") cy.get('.nc-erd-context-menu').find('.ant-checkbox').should('have.length', 3);
.dblclick(); })
cy.get(".nc-erd-context-menu")
.find(".ant-checkbox")
.should("have.length", 3);
});
mainPage.closeMetaTab(); mainPage.closeMetaTab();
}); });

3
scripts/cypress/integration/test/pg-restMisc.js

@ -11,6 +11,7 @@ const {
setCurrentMode, setCurrentMode,
} = require("../../support/page_objects/projectConstants"); } = require("../../support/page_objects/projectConstants");
const t8a = require("../common/8a_webhook"); const t8a = require("../common/8a_webhook");
const t9b = require("../common/9b_ERD");
const nocoTestSuite = (apiType, dbType) => { const nocoTestSuite = (apiType, dbType) => {
setCurrentMode(apiType, dbType); setCurrentMode(apiType, dbType);
@ -31,7 +32,7 @@ const nocoTestSuite = (apiType, dbType) => {
t6f.genTest(apiType, dbType); t6f.genTest(apiType, dbType);
// ERD: // ERD:
// t9b.genTest(apiType, dbType); t9b.genTest(apiType, dbType);
// Webhook tests // Webhook tests
t8a.genTest(apiType, dbType); t8a.genTest(apiType, dbType);

4
scripts/cypress/integration/test/xcdb-restMisc.js

@ -8,11 +8,11 @@ let t6f = require("../common/6f_attachments");
let t6g = require("../common/6g_base_share"); let t6g = require("../common/6g_base_share");
let t7a = require("../common/7a_create_project_from_excel"); let t7a = require("../common/7a_create_project_from_excel");
let t8a = require("../common/8a_webhook"); let t8a = require("../common/8a_webhook");
const t9b = require("../common/9b_ERD");
const { const {
setCurrentMode, setCurrentMode,
} = require("../../support/page_objects/projectConstants"); } = require("../../support/page_objects/projectConstants");
const t9b = require("../common/9b_ERD");
const nocoTestSuite = (apiType, dbType) => { const nocoTestSuite = (apiType, dbType) => {
setCurrentMode(apiType, dbType); setCurrentMode(apiType, dbType);
@ -33,7 +33,7 @@ const nocoTestSuite = (apiType, dbType) => {
t6f.genTest(apiType, dbType); t6f.genTest(apiType, dbType);
// ERD: // ERD:
// t9b.genTest(apiType, dbType); t9b.genTest(apiType, dbType);
// Webhook tests // Webhook tests
t8a.genTest(apiType, dbType); t8a.genTest(apiType, dbType);

263
scripts/cypress/support/page_objects/projectConstants.js

@ -1,19 +1,19 @@
export const defaultDbParams = { export const defaultDbParams = {
databaseType: 0, // MySQL databaseType: 0, // MySQL
hostAddress: "localhost", hostAddress: "localhost",
portNumber: "3306", portNumber: "3306",
username: "root", username: "root",
password: "password", password: "password",
databaseName: "sakila", databaseName: "sakila",
}; };
export const defaultPgDbParams = { export const defaultPgDbParams = {
databaseType: 1, // Postgres databaseType: 1, // Postgres
hostAddress: "localhost", hostAddress: "localhost",
portNumber: "5432", portNumber: "5432",
username: "postgres", username: "postgres",
password: "password", password: "password",
databaseName: "postgres", databaseName: "postgres",
}; };
// database // database
@ -24,162 +24,157 @@ export const defaultPgDbParams = {
// editComment: add comment // editComment: add comment
// shareView: right navigation bar (share options) // shareView: right navigation bar (share options)
export const roles = { export const roles = {
owner: { owner: {
name: "owner", name: "owner",
credentials: { username: "user@nocodb.com", password: "Password123." }, credentials: { username: "user@nocodb.com", password: "Password123." },
validations: { validations: {
advSettings: true, advSettings: true,
editSchema: true, editSchema: true,
editData: true, editData: true,
editComment: true, editComment: true,
shareView: true, shareView: true,
},
}, },
}, creator: {
creator: { name: "creator",
name: "creator", credentials: {
credentials: { username: "creator@nocodb.com",
username: "creator@nocodb.com", password: "Password123.",
password: "Password123.", },
validations: {
advSettings: true,
editSchema: true,
editData: true,
editComment: true,
shareView: true,
},
}, },
validations: { editor: {
advSettings: true, name: "editor",
editSchema: true, credentials: {
editData: true, username: "editor@nocodb.com",
editComment: true, password: "Password123.",
shareView: true, },
validations: {
advSettings: false,
editSchema: false,
editData: true,
editComment: true,
shareView: false,
},
}, },
}, commenter: {
editor: { name: "commenter",
name: "editor", credentials: {
credentials: { username: "commenter@nocodb.com",
username: "editor@nocodb.com", password: "Password123.",
password: "Password123.", },
validations: {
advSettings: false,
editSchema: false,
editData: false,
editComment: true,
shareView: false,
},
}, },
validations: { viewer: {
advSettings: false, name: "viewer",
editSchema: false, credentials: {
editData: true, username: "viewer@nocodb.com",
editComment: true, password: "Password123.",
shareView: false, },
validations: {
advSettings: false,
editSchema: false,
editData: false,
editComment: false,
shareView: false,
},
}, },
},
commenter: {
name: "commenter",
credentials: {
username: "commenter@nocodb.com",
password: "Password123.",
},
validations: {
advSettings: false,
editSchema: false,
editData: false,
editComment: true,
shareView: false,
},
},
viewer: {
name: "viewer",
credentials: {
username: "viewer@nocodb.com",
password: "Password123.",
},
validations: {
advSettings: false,
editSchema: false,
editData: false,
editComment: false,
shareView: false,
},
},
}; };
// default projects // default projects
// //
export const staticProjects = { export const staticProjects = {
sampleREST: { sampleREST: {
basic: { dbType: "none", apiType: "REST", name: "sampleREST" }, basic: { dbType: "none", apiType: "REST", name: "sampleREST" },
config: {}, config: {},
}, },
sampleGQL: { sampleGQL: {
basic: { dbType: "none", apiType: "GQL", name: "sampleGQL" }, basic: { dbType: "none", apiType: "GQL", name: "sampleGQL" },
config: {}, config: {},
}, },
externalREST: { externalREST: {
basic: { dbType: "external", apiType: "REST", name: "externalREST" }, basic: { dbType: "external", apiType: "REST", name: "externalREST" },
config: defaultDbParams, config: defaultDbParams,
}, },
externalGQL: { externalGQL: {
basic: { dbType: "external", apiType: "GQL", name: "externalGQL" }, basic: { dbType: "external", apiType: "GQL", name: "externalGQL" },
config: defaultDbParams, config: defaultDbParams,
}, },
pgExternalREST: { pgExternalREST: {
basic: { dbType: "external", apiType: "REST", name: "pgExtREST" }, basic: { dbType: "external", apiType: "REST", name: "pgExtREST" },
config: defaultPgDbParams, config: defaultPgDbParams,
}, },
pgExternalGQL: { pgExternalGQL: {
basic: { dbType: "external", apiType: "GQL", name: "pgExternalGQL" }, basic: { dbType: "external", apiType: "GQL", name: "pgExternalGQL" },
config: defaultPgDbParams, config: defaultPgDbParams,
}, },
}; };
// return TRUE if test suite specified is activated from env-variables // return TRUE if test suite specified is activated from env-variables
// //
export const isTestSuiteActive = (apiType, dbType) => { export const isTestSuiteActive = (apiType, dbType) => {
const env = Cypress.env("testMode"); const env = Cypress.env("testMode");
return env.some( return env.some(
(element) => element.apiType === apiType && element.dbType === dbType (element) => element.apiType === apiType && element.dbType === dbType
); );
}; };
let currentTestMode = { apiType: null, dbType: null }; let currentTestMode = { apiType: null, dbType: null };
let xcdbProjectString = ``; let xcdbProjectString = ``;
export function setCurrentMode(apiType, dbType) { export function setCurrentMode(apiType, dbType) {
currentTestMode = { apiType: apiType, dbType: dbType }; currentTestMode = { apiType: apiType, dbType: dbType };
} }
export function getCurrentMode() { export function getCurrentMode() {
return currentTestMode; return currentTestMode;
} }
export function isXcdb() { export function isXcdb() {
return currentTestMode.dbType === "xcdb"; return currentTestMode.dbType === "xcdb";
} }
export function isPostgres() { export function isPostgres() {
return currentTestMode.dbType === "postgres"; return currentTestMode.dbType === "postgres";
} }
export function setProjectString(projStr) { export function setProjectString(projStr) {
xcdbProjectString = projStr; xcdbProjectString = projStr;
} }
export function getProjectString() { export function getProjectString() {
return xcdbProjectString; return xcdbProjectString;
} }
const sakilaTables = [ const mysqlSakilaTables = [
"actor", 'actor', 'address', 'category', 'city', 'country', 'customer', 'film', 'film_text', 'language', 'payment', 'rental', 'staff'
"address", ]
"category",
"city", const mysqlSakilaSqlViews = [
"country", 'actor_info', 'customer_list', 'film_list', 'nicer_but_slower_film_list', 'sales_by_film_category', 'sales_by_store', 'staff_list'
"customer", ]
"film",
"film_text", const pgSakilaTables = [
"language", 'actor', 'address', 'category', 'city', 'country', 'customer', 'film', 'language', 'payment', 'payment_p2007_01', 'payment_p2007_02', 'payment_p2007_03', 'payment_p2007_04', 'payment_p2007_05', 'payment_p2007_06', 'rental', 'staff'
"payment", ]
"rental",
"staff", const pgSakilaSqlViews = [
]; 'actor_info', 'customer_list', 'film_list', 'nicer_but_slower_film_list', 'sales_by_film_category', 'sales_by_store', 'staff_list'
]
const sakilaSqlViews = [
"actor_info", const sqliteSakilaSqlViews = [
"customer_list", 'actor_info', 'customer_list', 'film_list', 'nice_but_slower_film_list', 'sales_by_film_category', 'sales_by_store', 'staff_list'
"film_list", ]
"nicer_but_slower_film_list",
"sales_by_film_category", export { mysqlSakilaTables, mysqlSakilaSqlViews, pgSakilaTables, pgSakilaSqlViews, sqliteSakilaSqlViews }
"sales_by_store",
"staff_list",
];
export { sakilaTables, sakilaSqlViews };
Loading…
Cancel
Save