html-reporter
Version:
Html-reporter and GUI for viewing and managing results of a tests run. Currently supports Testplane and Hermione.
111 lines • 4.95 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.backupAndReset = exports.migrateDatabase = exports.setDatabaseVersion = exports.getDatabaseVersion = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const debug_1 = __importDefault(require("debug"));
const database_1 = require("../constants/database");
const lodash_1 = require("lodash");
const common_1 = require("./common");
const debug = (0, debug_1.default)('html-reporter:db-migrations');
const getDatabaseVersion = (db) => {
debug('getDatabaseVersion');
try {
const versionTableExists = db.exec(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`, [database_1.DB_VERSION_TABLE_NAME])[0];
debug('versionTableExists:', versionTableExists);
if (versionTableExists) {
const getVersionNumberStatement = db.prepare(`SELECT ${database_1.VERSION_TABLE_COLUMNS[0].name} FROM ${database_1.DB_VERSION_TABLE_NAME} LIMIT 1`);
const versionNumberQueryResult = getVersionNumberStatement.getAsObject([]);
getVersionNumberStatement.free();
debug('versionRow: ', versionNumberQueryResult);
if (versionNumberQueryResult && typeof versionNumberQueryResult[database_1.VERSION_TABLE_COLUMNS[0].name] === 'number') {
const version = Number(versionNumberQueryResult[database_1.VERSION_TABLE_COLUMNS[0].name]);
if (!isNaN(version) && version >= 0) {
return version;
}
}
}
const tableInfoStatement = db.prepare(`PRAGMA table_info(${database_1.DB_SUITES_TABLE_NAME})`);
const columnNames = [];
while (tableInfoStatement.step()) {
const row = tableInfoStatement.getAsObject();
if (row && row.name) {
columnNames.push(row.name);
}
}
tableInfoStatement.free();
debug('column names in db:', columnNames);
const version0Columns = [
database_1.DB_COLUMNS.SUITE_PATH,
database_1.DB_COLUMNS.SUITE_NAME,
database_1.DB_COLUMNS.NAME,
database_1.DB_COLUMNS.SUITE_URL,
database_1.DB_COLUMNS.META_INFO,
database_1.DB_COLUMNS.HISTORY,
database_1.DB_COLUMNS.DESCRIPTION,
database_1.DB_COLUMNS.ERROR,
database_1.DB_COLUMNS.SKIP_REASON,
database_1.DB_COLUMNS.IMAGES_INFO,
database_1.DB_COLUMNS.SCREENSHOT,
database_1.DB_COLUMNS.MULTIPLE_TABS,
database_1.DB_COLUMNS.STATUS,
database_1.DB_COLUMNS.TIMESTAMP,
database_1.DB_COLUMNS.DURATION
];
if ((0, lodash_1.isEqual)(columnNames, version0Columns)) {
return 0;
}
if ((0, lodash_1.isEqual)(columnNames, [...version0Columns, database_1.DB_COLUMNS.ATTACHMENTS])) {
return 1;
}
}
catch (error) {
debug(`Error getting database version: ${error}`);
}
return null;
};
exports.getDatabaseVersion = getDatabaseVersion;
const setDatabaseVersion = (db, version) => {
db.run(`DELETE FROM ${database_1.DB_VERSION_TABLE_NAME}`);
db.run(`INSERT INTO ${database_1.DB_VERSION_TABLE_NAME} (${database_1.VERSION_TABLE_COLUMNS[0].name}) VALUES (?)`, [version]);
};
exports.setDatabaseVersion = setDatabaseVersion;
/**
* Migration from version 0 to version 1
* - Adds attachments column to suites table
*/
const migrateV0ToV1 = (db) => {
debug('migrating from v0 to v1');
db.run(`ALTER TABLE ${database_1.DB_SUITES_TABLE_NAME} ADD COLUMN ${database_1.DB_COLUMNS.ATTACHMENTS} TEXT DEFAULT '[]'`);
db.run((0, common_1.createTableQuery)(database_1.DB_VERSION_TABLE_NAME, database_1.VERSION_TABLE_COLUMNS));
};
const migrateDatabase = async (db, version) => {
const migrations = [
migrateV0ToV1
];
try {
if (version < 0 || version >= migrations.length) {
throw new Error(`Unsupported database version encountered. Try deleting your report directory and restarting html-reporter.`);
}
for (const migration of migrations.slice(version)) {
migration(db);
}
(0, exports.setDatabaseVersion)(db, database_1.DB_CURRENT_VERSION);
}
catch (error) {
debug(`Error during database migration: ${error}`);
throw error;
}
};
exports.migrateDatabase = migrateDatabase;
const backupAndReset = async (reportPath) => {
const timestamp = Date.now();
const backupDir = `${reportPath}_backup_${timestamp}`;
debug(`Creating backup of corrupted database at: ${backupDir}`);
await fs_extra_1.default.move(reportPath, backupDir);
return backupDir;
};
exports.backupAndReset = backupAndReset;
//# sourceMappingURL=migrations.js.map