html-reporter
Version:
Html-reporter and GUI for viewing and managing results of a tests run. Currently supports Testplane and Hermione.
94 lines • 4.78 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTableQuery = exports.mergeTables = exports.handleDatabases = exports.makeFileDownloadErrorMessage = exports.compareDatabaseRowsByTimestamp = exports.createTablesQuery = exports.selectAllSuitesQuery = exports.selectAllQuery = void 0;
const lodash_1 = __importDefault(require("lodash"));
const common_utils_1 = require("../common-utils");
const constants_1 = require("../constants");
const selectAllQuery = (tableName) => `SELECT * FROM ${tableName}`;
exports.selectAllQuery = selectAllQuery;
const selectAllSuitesQuery = () => (0, exports.selectAllQuery)(constants_1.DB_SUITES_TABLE_NAME);
exports.selectAllSuitesQuery = selectAllSuitesQuery;
const createTablesQuery = () => [
createTableQuery(constants_1.DB_SUITES_TABLE_NAME, constants_1.SUITES_TABLE_COLUMNS),
createTableQuery(constants_1.DB_VERSION_TABLE_NAME, constants_1.VERSION_TABLE_COLUMNS)
];
exports.createTablesQuery = createTablesQuery;
const compareDatabaseRowsByTimestamp = (row1, row2) => {
return row1[constants_1.DB_COLUMN_INDEXES.timestamp] - row2[constants_1.DB_COLUMN_INDEXES.timestamp];
};
exports.compareDatabaseRowsByTimestamp = compareDatabaseRowsByTimestamp;
const makeFileDownloadErrorMessage = (fileUrl, error, requestStatus) => {
const REMOTE_REPORT_DOWNLOAD_HINT = 'Check that the URL is correct and can be accessed without authentication (authentication during download is not available yet). Alternatively, you can download the report manually first before working with it.';
let reason;
if (error instanceof Error && error.message) {
reason = error.message;
}
else if (error && typeof error !== 'object') {
reason = String(error);
}
else {
reason = requestStatus ? `request failed with status ${requestStatus}` : 'unknown error';
}
return [
`Cannot download file from "${fileUrl}".`,
`Reason: ${reason}.`,
REMOTE_REPORT_DOWNLOAD_HINT
].join('\n');
};
exports.makeFileDownloadErrorMessage = makeFileDownloadErrorMessage;
const handleDatabases = async (dbJsonUrls, opts) => {
return lodash_1.default.flattenDeep(await Promise.all(dbJsonUrls.map(async (dbJsonUrl) => {
try {
const currentJsonResponse = await opts.loadDbJsonUrl(dbJsonUrl);
if (!currentJsonResponse.data) {
const message = (0, exports.makeFileDownloadErrorMessage)(dbJsonUrl, currentJsonResponse.error, currentJsonResponse.status);
if (opts.strict) {
throw new Error(message);
}
common_utils_1.logger.warn(message);
return opts.formatData ? opts.formatData(dbJsonUrl, currentJsonResponse.status) : [];
}
const { dbUrls, jsonUrls } = currentJsonResponse.data;
const preparedDbUrls = opts.prepareUrls(dbUrls, dbJsonUrl);
const preparedDbJsonUrls = opts.prepareUrls(jsonUrls, dbJsonUrl);
return await Promise.all([
(0, exports.handleDatabases)(preparedDbJsonUrls, opts),
...preparedDbUrls.map((dbUrl) => opts.loadDbUrl(dbUrl, opts))
]);
}
catch (e) {
if (opts.strict) {
throw e;
}
common_utils_1.logger.warn(`Error while downloading databases from ${dbJsonUrl}`, e);
return opts.formatData ? opts.formatData(dbJsonUrl) : [];
}
})));
};
exports.handleDatabases = handleDatabases;
const mergeTables = ({ db, dbPaths, getExistingTables = () => [] }) => {
db.run(`PRAGMA page_size = ${constants_1.DB_MAX_AVAILABLE_PAGE_SIZE}`);
for (const dbPath of dbPaths) {
db.run(`ATTACH DATABASE '${dbPath}' AS attached`);
const getTablesStatement = db.prepare(`SELECT name FROM attached.sqlite_master WHERE type='table'`);
const tables = getExistingTables(getTablesStatement);
getTablesStatement.free();
for (const tableName of tables) {
db.run(`CREATE TABLE IF NOT EXISTS ${tableName} AS SELECT * FROM attached.${tableName} LIMIT 0`);
db.run(`INSERT OR IGNORE INTO ${tableName} SELECT * FROM attached.${tableName}`);
}
db.run(`DETACH attached`);
}
};
exports.mergeTables = mergeTables;
function createTableQuery(tableName, columns) {
const formattedColumns = columns
.map(({ name, type }) => `${name} ${type}`)
.join(', ');
return `CREATE TABLE IF NOT EXISTS ${tableName} (${formattedColumns})`;
}
exports.createTableQuery = createTableQuery;
//# sourceMappingURL=common.js.map