html-reporter
Version:
Html-reporter and GUI for viewing and managing results of a tests run. Currently supports Testplane and Hermione.
100 lines • 4.44 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.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`).get(database_1.DB_VERSION_TABLE_NAME);
debug('versionTableExists:', versionTableExists);
if (versionTableExists) {
const versionRow = db.prepare(`SELECT ${database_1.VERSION_TABLE_COLUMNS[0].name} FROM ${database_1.DB_VERSION_TABLE_NAME} LIMIT 1`).get();
debug('versionRow: ', versionRow);
const version = Number(versionRow?.[database_1.VERSION_TABLE_COLUMNS[0].name]);
if (!isNaN(version) && version >= 0) {
return version;
}
}
const tableInfo = db.prepare(`PRAGMA table_info(${database_1.DB_SUITES_TABLE_NAME})`).all();
const columnNames = tableInfo.map(col => col.name);
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.prepare(`DELETE FROM ${database_1.DB_VERSION_TABLE_NAME}`).run();
db.prepare(`INSERT INTO ${database_1.DB_VERSION_TABLE_NAME} (${database_1.VERSION_TABLE_COLUMNS[0].name}) VALUES (?)`).run(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.prepare(`ALTER TABLE ${database_1.DB_SUITES_TABLE_NAME} ADD COLUMN ${database_1.DB_COLUMNS.ATTACHMENTS} TEXT DEFAULT '[]'`).run();
db.prepare((0, common_1.createTableQuery)(database_1.DB_VERSION_TABLE_NAME, database_1.VERSION_TABLE_COLUMNS)).run();
};
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