chore: move cypress-v2 to cypress

This commit is contained in:
Wing-Kam Wong
2022-09-06 11:40:22 +08:00
parent d628a5f4aa
commit db2b6bf006
87 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,225 @@
/// <reference types="cypress" />
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
const { rmdir, copyFile } = require("fs");
// https://stackoverflow.com/questions/61934443/read-excel-files-in-cypress
const readXlsx = require("./read-xlsx");
const makeServer = require('./server')
/**
* @type {Cypress.PluginConfig}
*/
// eslint-disable-next-line no-unused-vars
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
// register utility tasks to read and parse Excel files
on("task", {
copyFile() {
console.log("copyFile", __dirname)
return new Promise((resolve, reject) => {
copyFile("./scripts/cypress-v2/fixtures/quickTest/noco_0_91_7.db", "./packages/nocodb/noco.db", (err) => {
if(err) {
console.log(err)
return reject(err)
}
resolve(null);
})
})
},
deleteFolder(folderName) {
console.log("deleting folder %s", folderName);
return new Promise((resolve, reject) => {
rmdir(
folderName,
{ maxRetries: 10, recursive: true },
(err) => {
if (err) {
console.error(err);
return reject(err);
}
resolve(null);
}
);
});
},
readXlsx: readXlsx.read,
readSheetList: readXlsx.sheetList,
log(message) {
console.log(`##Cypress>> ${message}`);
return null;
},
queryDb: (query) => {
return queryTestDb(query, config);
},
sqliteExec: (query) => {
_sqliteExec(query);
return null;
},
sqliteExecReturnValue: (query) => {
return _sqliteExecReturnValue(query);
},
pgExec: (query) => {
_pgExec(query);
return null;
},
});
let server, port, close
on('before:spec', async (spec) => {
// we can customize the server based on the spec about to run
const info = await makeServer()
// save the server instance information
server = info.server
port = info.port
close = info.close
console.log('started the server on port %d', port)
})
on('after:spec', async (spec) => {
if (!server) {
console.log('no server to close')
return
}
await close()
console.log('closed the server running on port %d', port)
})
};
// mysql connection
// https://gist.github.com/fityanos/0a345e9e9de498b6c629f78e6b2835f5
const mysql = require("mysql2");
function queryTestDb(query, config) {
// creates a new mysql connection using credentials from cypress.json env's
const connection = mysql.createConnection(config.env.db);
// start connection to db
connection.connect();
// exec query + disconnect to db as a Promise
return new Promise((resolve, reject) => {
connection.query(query, (error, results) => {
if (error) reject(error);
else {
connection.end();
// console.log(results)
return resolve(results);
}
});
});
}
// sqlite connection
const sqlite3 = require("sqlite3").verbose();
function _sqliteExecReturnValue(query) {
// open the database
console.log("Current directory: " + process.cwd());
let db = new sqlite3.Database(
"./scripts/cypress-v2/fixtures/sqlite-sakila/sakila.db",
sqlite3.OPEN_READWRITE,
(err) => {
if (err) {
console.error(err.message);
} else {
console.log("Connected to the noco xcdb database.");
}
}
);
// exec query + disconnect to db as a Promise
return new Promise((resolve, reject) => {
db.get(query, [], (err, row) => {
db.close();
if (err) {
reject(err);
} else {
return resolve(row);
}
});
});
}
function _sqliteExec(query) {
// open the database
console.log("Current directory: " + process.cwd());
let db = new sqlite3.Database(
"./scripts/cypress-v2/fixtures/sqlite-sakila/sakila.db",
sqlite3.OPEN_READWRITE,
(err) => {
if (err) {
console.error(err.message);
} else {
console.log("Connected to the noco xcdb database.");
}
}
);
db.serialize(() => {
db.run(query);
});
db.close((err) => {
if (err) {
console.error(err.message);
} else {
console.log("Close the database connection.");
}
});
}
// pg connection
const { Pool, Client } = require("pg");
const pg_credentials = {
user: "postgres",
host: "localhost",
database: "postgres",
password: "password",
port: 5432,
};
function _pgExec(query) {
// open pg client connection
const client = new Client(pg_credentials);
client.connect();
// query & terminate
client.query(query, (err, res) => {
console.log(err, res);
client.end();
});
}
/**
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
*
* @author Raju Udava <sivadstala@gmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

View File

@@ -0,0 +1,33 @@
// https://stackoverflow.com/questions/61934443/read-excel-files-in-cypress
const fs = require("fs");
const XLSX = require("xlsx");
const read = ({ file, sheet }) => {
const buf = fs.readFileSync(file);
const workbook = XLSX.read(buf, { type: "buffer" });
const rows = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
return rows;
};
// const read = ({file, sheet}) => {
// const buf = fs.readFileSync(file);
// const workbook = XLSX.read(buf, { type: 'buffer' });
// const rows = XLSX.utils.sheet_to_json(workbook.Sheets[sheet], {
// header: 1,
// blankrows: false
// });
// return rows
// }
const sheetList = ({ file }) => {
const buf = fs.readFileSync(file);
const workbook = XLSX.read(buf, { type: "buffer" });
const rows = workbook.SheetNames;
return rows;
};
module.exports = {
read,
sheetList,
};

View File

@@ -0,0 +1,84 @@
// https://glebbahmutov.com/blog/restart-server/
const express = require('express')
const bodyParser = require("body-parser")
let request = []
function makeServer() {
const app = express()
app.use(bodyParser.json())
app.get("/hook/all", (req, res) => {
// console.log(request)
res.json(request)
})
app.get("/hook/last", (req, res) => {
if(request.length) {
// console.log(request[request.length - 1])
res.json(request[request.length - 1])
}
})
app.get("/hook/count", (req, res) => {
// console.log(request.length)
res.json(request.length)
})
app.get("/hook/clear", (req, res) => {
request = []
res.status(200).end()
})
app.post("/hook", (req, res) => {
request.push(req.body)
// console.log("/hook :: ", req.body) // Call your action on the request here
res.status(200).end() // Responding is important
})
app.post("/stop", (req, res) => {
process.exit();
})
const port = 9090
return new Promise((resolve) => {
const server = app.listen(port, function () {
const port = server.address().port
console.log('Example app listening at port %d', port)
// close the server
const close = () => {
return new Promise((resolve) => {
console.log('closing server')
server.close(resolve)
})
}
resolve({ server, port, close })
})
})
}
module.exports = makeServer
/**
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
*
* @author Raju Udava <sivadstala@gmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/