UNPKG

migrat

Version:
171 lines (165 loc) 6.52 kB
var assert = require('chai').assert; var MigratReader = require('../lib/MigratReader.js'); var MigratMigration = require('../lib/MigratMigration.js'); var MigratPluginSystem = require('../lib/MigratPluginSystem.js'); var plugins = new MigratPluginSystem(); describe('MigratReader', function() { describe('.file()', function() { it('should return an error if the file does not exist', function(done) { MigratReader.file(__dirname + '/fixtures/1414006573678-doesnotexist.js', plugins, function(err, migration) { assert.instanceOf(err, Error); assert.match(err.message, /Cannot find/); done(); }); }); it('should return an error if the migration is missing an "up" method', function(done) { MigratReader.file(__dirname + '/fixtures/1414006573678-missing-up-method.js', plugins, function(err, migration) { assert.instanceOf(err, Error); assert.match(err.message, /missing "up"/); done(); }); }); it('should return an error if the migration is missing an "down" method', function(done) { MigratReader.file(__dirname + '/fixtures/1414006573678-missing-down-method.js', plugins, function(err, migration) { assert.instanceOf(err, Error); assert.match(err.message, /missing "down"/); done(); }); }); it('should not return an error if the migration is missing an "check" method', function(done) { MigratReader.file(__dirname + '/fixtures/1414006573678-missing-check-method.js', plugins, function(err, migration) { assert.isNull(err); assert.instanceOf(migration, MigratMigration); done(); }); }); it('should return a valid MigratMigration upon success (type: once)', function(done) { var file = __dirname + '/fixtures/1414006573678-valid.js'; MigratReader.file(file, plugins, function(err, migration) { assert.isNull(err); assert.instanceOf(migration, MigratMigration); assert.equal(migration.type, 'once'); assert.equal(migration.name, 'valid'); assert.equal(migration.file, file); assert.equal(migration.timestamp, 1414006573678); assert.equal(migration.filename, '1414006573678-valid.js'); assert.isFunction(migration.methods.up); assert.isFunction(migration.methods.down); assert.isFunction(migration.methods.check); done(); }); }); it('should return a valid MigratMigration upon success (type: all)', function(done) { var file = __dirname + '/fixtures/1414006573678-valid.all.js'; MigratReader.file(file, plugins, function(err, migration) { assert.isNull(err); assert.instanceOf(migration, MigratMigration); assert.equal(migration.type, 'all'); assert.equal(migration.name, 'valid'); assert.equal(migration.file, file); assert.equal(migration.timestamp, 1414006573678); assert.equal(migration.filename, '1414006573678-valid.all.js'); assert.isFunction(migration.methods.up); assert.isFunction(migration.methods.down); assert.isFunction(migration.methods.check); done(); }); }); it('should give plugin-defined loaders priority', function(done) { var up = function() {}; var down = function() {}; var check = function() {}; var file = __dirname + '/fixtures/1414006573678-doesntexistat.all.js'; var plugins = new MigratPluginSystem([ function(migrat) { migrat.registerLoader('*.js', function(file, callback) { return callback(null, { up: up, down: down, check: check }); }); } ]); MigratReader.file(file, plugins, function(err, migration) { assert.isNull(err); assert.instanceOf(migration, MigratMigration); assert.equal(migration.type, 'all'); assert.equal(migration.name, 'doesntexistat'); assert.equal(migration.file, file); assert.equal(migration.timestamp, 1414006573678); assert.equal(migration.filename, '1414006573678-doesntexistat.all.js'); assert.equal(migration.methods.up, up); assert.equal(migration.methods.down, down); assert.equal(migration.methods.check, check); done(); }); }); it('should handle non-js extensions properly via plugins', function(done) { var up = function() {}; var down = function() {}; var check = function() {}; var file = __dirname + '/fixtures/1414006573678-doesntexistat.all.sql'; var plugins = new MigratPluginSystem([ function(migrat) { migrat.registerLoader('*.sql', function(file, callback) { return callback(null, { up: up, down: down, check: check }); }); } ]); MigratReader.file(file, plugins, function(err, migration) { assert.isNull(err); assert.instanceOf(migration, MigratMigration); assert.equal(migration.type, 'all'); assert.equal(migration.name, 'doesntexistat'); assert.equal(migration.file, file); assert.equal(migration.timestamp, 1414006573678); assert.equal(migration.filename, '1414006573678-doesntexistat.all.sql'); assert.equal(migration.methods.up, up); assert.equal(migration.methods.down, down); assert.equal(migration.methods.check, check); done(); }); }); }); describe('.dir()', function() { it('should return error if the folder doesn\'t exist', function(done) { MigratReader.dir(__dirname + '/fixtures/missing-folder', plugins, function(err) { assert.instanceOf(err, Error); assert.match(err.message, /ENOENT/); done(); }); }); it('should return error if any of the migrations are invalid', function(done) { MigratReader.dir(__dirname + '/fixtures/invalid-migrations', plugins, function(err) { assert.instanceOf(err, Error); assert.match(err.message, /missing/); done(); }); }); it('should return an error if any of the migrations have the same timestamp', function(done) { MigratReader.dir(__dirname + '/fixtures/duplicate-timestamps', plugins, function(err) { assert.instanceOf(err, Error); assert.match(err.message, /timestamp/); done(); }); }); it('should return a list of migrations (order doesn\'t matter)', function(done) { MigratReader.dir(__dirname + '/fixtures/valid', plugins, function(err, migrations) { assert.isNull(err); assert.isArray(migrations); var filenames = migrations.map(v => v.filename); assert.include(filenames, '1414006573623-first.js'); assert.include(filenames, '1414006573678-second.js'); assert.include(filenames, '1414006573679-third.all.js'); assert.include(filenames, '1414006573700-fourth.js'); assert.lengthOf(migrations, 4); done(); }); }); }); });