UNPKG

@cnlabs/ll-yandex-db-test-helpers

Version:

Library to work with Yandex Database in GitLab ci/cd pipelines

50 lines (44 loc) 1.91 kB
const YandexDB = require('@cnlabs/yandexdb-rest'); module.exports = { TestClient: class { constructor({endpoint, keyId, secretKey, verbose}) { process.env.YDB_PREFIX = (process.env.CI_PROJECT_NAME || process.env.USER) + '/' + new Date().toISOString().replace(/[:.]/g, "-") + "/"; this.ydb = new YandexDB({ endpoint, keyId, secretKey, verbose }); } async createTables(tableDefinitions) { this.lastTableDefinitions = tableDefinitions; this.tables = []; await Promise.all(tableDefinitions.map(d => this.ydb.query('CreateTable', d).then(({TableDescription}) => { this.tables.push(TableDescription.TableName); return TableDescription; }))); while (1) { const nonActiveStatuses = (await Promise.all(this.tables.map(v => this.ydb.query('DescribeTable', {TableName: v}).then(({Table}) => Table) ))).filter(v => v.TableStatus !== 'ACTIVE'); if (!nonActiveStatuses.length) { break; } } console.log("Created tables: ", this.tables.join(", ")); } async dropTables() { await Promise.all(this.tables.map(v => this.ydb.query('DeleteTable', {TableName: v}))); while (1) { const deleted = await Promise.all(this.tables.map(v => this.ydb.query('DescribeTable', ({TableName: v})).then(()=>false).catch(()=>true))); if (!deleted.find(deleted => !deleted)) { break; } } } async clearAllTables() { if (this.lastTableDefinitions) { this.dropTables(); this.createTables(this.lastTableDefinitions) } } } };