-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
migrate.spec.js
110 lines (98 loc) · 3.18 KB
/
migrate.spec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
'use strict';
const path = require('path');
const sqlite3 = require('@vscode/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();
});
it('CLI Options override knexfile', async () => {
const path = process.cwd() + '/knexfile.js';
fileHelper.createFile(
path,
`
module.exports = {
client: 'sqlite3',
connection: {
filename: '${dbPath}',
},
migrations: {
directory: __dirname + '/test//jake-util/knexfile_migrations',
},
};
`,
{ isPathAbsolute: true }
);
fileHelper.createFile(
'migrations/subdirectory/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 \
--knexpath=../knexfile.js \
--migrations-directory=${rootDir}/migrations/subdirectory/ \
--migrations-table-name=migration_table \
create_rule_table`);
expect(fileHelper.fileExists(dbPath)).to.equal(true);
const db = await new sqlite3.Database(dbPath);
const row = await new Promise((resolve, reject) => {
db.get('SELECT name FROM migration_table', {}, (err, row) => {
if (err) {
reject(err);
}
resolve(row);
});
});
expect(row.name).to.equal('000_create_rule_table.js');
db.close();
});
});