UNPKG

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
"use strict"; 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