UNPKG

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
"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.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