@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
JavaScript
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)
}
}
}
};