UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.

102 lines 4.12 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const migrator_1 = require("../../../migrator"); const db_1 = require("../../../lib/db"); const db_pool_1 = require("../../../lib/db/db-pool"); const database_config_1 = require("./database-config"); const test_config_1 = require("../../config/test-config"); const database_json_1 = __importDefault(require("./database.json")); const no_logger_1 = __importDefault(require("../../fixtures/no-logger")); const constants_1 = require("../../../lib/util/constants"); // require('db-migrate-shared').log.silence(false); // because of migrator bug delete process.env.DATABASE_URL; // because of db-migrate bug (https://github.com/Unleash/unleash/issues/171) process.setMaxListeners(0); async function resetDatabase(knex) { return Promise.all([ knex.table('environments').del(), knex.table('strategies').del(), knex.table('features').del(), knex.table('client_applications').del(), knex.table('client_instances').del(), knex.table('context_fields').del(), knex.table('users').del(), knex.table('projects').del(), knex.table('tags').del(), knex.table('tag_types').del(), knex.table('addons').del(), knex.table('users').del(), knex.table('reset_tokens').del(), // knex.table('settings').del(), ]); } function createStrategies(store) { return database_json_1.default.strategies.map((s) => store.createStrategy(s)); } function createContextFields(store) { return database_json_1.default.contextFields.map((c) => store.create(c)); } function createProjects(store) { return database_json_1.default.projects.map((i) => store.create(i)); } function createTagTypes(store) { return database_json_1.default.tag_types.map((t) => store.createTagType(t)); } async function connectProject(store) { await store.connectProject(constants_1.DEFAULT_ENV, 'default'); } async function createEnvironments(store) { await Promise.all(database_json_1.default.environments.map(async (e) => store.create(e))); } async function setupDatabase(stores) { await createEnvironments(stores.environmentStore); await Promise.all(createStrategies(stores.strategyStore)); await Promise.all(createContextFields(stores.contextFieldStore)); await Promise.all(createProjects(stores.projectStore)); await Promise.all(createTagTypes(stores.tagTypeStore)); await connectProject(stores.featureEnvironmentStore); } async function init(databaseSchema = 'test', getLogger = no_logger_1.default, configOverride = {}) { const config = (0, test_config_1.createTestConfig)({ db: { ...(0, database_config_1.getDbConfig)(), pool: { min: 1, max: 4 }, schema: databaseSchema, ssl: false, }, ...configOverride, getLogger, }); const db = (0, db_pool_1.createDb)(config); await db.raw(`DROP SCHEMA IF EXISTS ${config.db.schema} CASCADE`); await db.raw(`CREATE SCHEMA IF NOT EXISTS ${config.db.schema}`); // @ts-expect-error await (0, migrator_1.migrateDb)({ ...config, databaseSchema: config.db.schema }); await db.destroy(); const testDb = (0, db_pool_1.createDb)(config); const stores = await (0, db_1.createStores)(config, testDb); stores.eventStore.setMaxListeners(0); await resetDatabase(testDb); await setupDatabase(stores); return { stores, reset: async () => { await resetDatabase(testDb); await setupDatabase(stores); }, destroy: async () => { const { clientInstanceStore } = stores; return new Promise((resolve, reject) => { clientInstanceStore.destroy(); testDb.destroy((error) => (error ? reject(error) : resolve())); }); }, }; } exports.default = init; module.exports = init; //# sourceMappingURL=database-init.js.map