knex/test/cli/migrate.spec.js

60 lines
1.7 KiB
JavaScript
Raw Permalink Normal View History

'use strict';
const path = require('path');
const sqlite3 = require('sqlite3');
const { expect } = require('chai');
const { execCommand } = require('cli-testlab');
const { getRootDir, setupFileHelper } = require('./cli-test-utils');
const KNEX = path.normalize(__dirname + '/../../bin/cli.js');
describe('migrate:latest', () => {
before(() => {
process.env.KNEX_PATH = '../knex.js';
});
let fileHelper;
const rootDir = getRootDir();
const dbPath = path.resolve(rootDir, 'db');
beforeEach(() => {
fileHelper = setupFileHelper();
fileHelper.registerForCleanup(dbPath);
});
afterEach(() => {
fileHelper.cleanup();
});
it('Run migrations', async () => {
fileHelper.createFile(
'migrations/000_create_rule_table.js',
`
exports.up = (knex)=> knex.schema.createTable('rules', (table)=> {
table.string('name');
});
exports.down = (knex)=> knex.schema.dropTable('rules');
`,
{ willBeCleanedUp: true, isPathAbsolute: false }
);
expect(fileHelper.fileExists(dbPath)).to.equal(false);
await execCommand(`node ${KNEX} migrate:latest \
--client=sqlite3 --connection=${dbPath} \
--migrations-directory=${rootDir}/migrations \
create_rule_table`);
expect(fileHelper.fileExists(dbPath)).to.equal(true);
const db = await new sqlite3.Database(dbPath);
const getPromise = new Promise((resolve, reject) => {
db.get('SELECT name FROM knex_migrations', {}, (err, row) => {
if (err) {
reject(err);
}
resolve(row);
});
});
const row = await getPromise;
expect(row.name).to.equal('000_create_rule_table.js');
db.close();
});
});