mirror of
https://github.com/knex/knex.git
synced 2025-07-03 23:19:26 +00:00
124 lines
4.5 KiB
JavaScript
124 lines
4.5 KiB
JavaScript
/*global after, before, describe, expect, it*/
|
|
'use strict';
|
|
|
|
var equal = require('assert').equal;
|
|
var path = require('path');
|
|
var rimraf = require('rimraf');
|
|
var Promise = require('../../../lib/promise');
|
|
|
|
module.exports = function(knex) {
|
|
|
|
require('rimraf').sync(path.join(__dirname, './migration'));
|
|
|
|
describe('knex.migrate', function () {
|
|
|
|
it('should create a new migration file with the create method', function() {
|
|
return knex.migrate.make('test').then(function(name) {
|
|
name = path.basename(name);
|
|
expect(name.split('_')[0]).to.have.length(14);
|
|
expect(name.split('_')[1].split('.')[0]).to.equal('test');
|
|
});
|
|
});
|
|
|
|
it('should list the current migration state with the currentVersion method', function() {
|
|
return knex.migrate.currentVersion().then(function(version) {
|
|
equal(version, 'none');
|
|
});
|
|
});
|
|
|
|
var tables = ['migration_test_1', 'migration_test_2', 'migration_test_2_1'];
|
|
|
|
describe('knex.migrate.latest', function() {
|
|
|
|
before(function() {
|
|
return knex.migrate.latest({directory: 'test/integration/migrate/test'}).catch(function() {});
|
|
});
|
|
|
|
it('should run all migration files in the specified directory', function() {
|
|
return knex('knex_migrations').select('*').then(function(data) {
|
|
expect(data.length).to.equal(2);
|
|
});
|
|
});
|
|
|
|
it('should run the migrations from oldest to newest', function() {
|
|
if (knex.client.dialect === 'oracle') {
|
|
return knex('knex_migrations').orderBy('migration_time', 'asc').select('*').then(function(data) {
|
|
expect(path.basename(data[0].name)).to.equal('20131019235242_migration_1.js');
|
|
expect(path.basename(data[1].name)).to.equal('20131019235306_migration_2.js');
|
|
});
|
|
} else {
|
|
return knex('knex_migrations').orderBy('id', 'asc').select('*').then(function(data) {
|
|
expect(path.basename(data[0].name)).to.equal('20131019235242_migration_1.js');
|
|
expect(path.basename(data[1].name)).to.equal('20131019235306_migration_2.js');
|
|
});
|
|
}
|
|
});
|
|
|
|
it('should create all specified tables and columns', function() {
|
|
// Map the table names to promises that evaluate chai expectations to
|
|
// confirm that the table exists and the 'id' and 'name' columns exist
|
|
// within the table
|
|
return Promise.map(tables, function(table) {
|
|
return knex.schema.hasTable(table).then(function(exists) {
|
|
expect(exists).to.equal(true);
|
|
if (exists) {
|
|
return Promise.all([
|
|
knex.schema.hasColumn(table, 'id').then(function(exists) {
|
|
expect(exists).to.equal(true);
|
|
}),
|
|
knex.schema.hasColumn(table, 'name').then(function(exists) {
|
|
expect(exists).to.equal(true);
|
|
})
|
|
]);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
it('should not create column for invalid migration', function() {
|
|
knex.schema.hasColumn('migration_test_1', 'transaction').then(function(exists) {
|
|
// MySQL / Oracle commit transactions implicit for most common
|
|
// migration statements (e.g. CREATE TABLE, ALTER TABLE, DROP TABLE),
|
|
// so we need to check for dialect
|
|
if (knex.client.dialect === 'mysql' || knex.client.dialect === 'mariadb' || knex.client.dialect === 'oracle') {
|
|
expect(exists).to.equal(true);
|
|
} else {
|
|
expect(exists).to.equal(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
it('should not proceed after invalid migration', function() {
|
|
return knex.schema.hasTable('should_not_be_run').then(function(exists) {
|
|
expect(exists).to.equal(false);
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('knex.migrate.rollback', function() {
|
|
it('should delete the most recent batch from the migration log', function() {
|
|
return knex.migrate.rollback({directory: 'test/integration/migrate/test'}).then(function() {
|
|
return knex('knex_migrations').select('*').then(function(data) {
|
|
expect(data.length).to.equal(0);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('should drop tables as specified in the batch', function() {
|
|
return Promise.map(tables, function(table) {
|
|
return knex.schema.hasTable(table).then(function(exists) {
|
|
expect(!!exists).to.equal(false);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
after(function() {
|
|
rimraf.sync(path.join(__dirname, './migration'));
|
|
});
|
|
|
|
});
|
|
|
|
};
|