db-migrate-cassandra
Version:
Cassanda migration using CQLSH for node DB migration
158 lines (147 loc) • 6.17 kB
JavaScript
var assert = require('chai').assert;
var expect = require('chai').expect;
var sinon = require('sinon');
var driver = require('./index');
var testHostname = 'localhost';
var config = {
"driver": "cassandra",
"host": [testHostname],
"database": "dbmigration"
};
var configWithHostListAsString = {
"driver": "cassandra",
"host": testHostname + "," + testHostname,
"database": "dbmigration"
};
var configWithSingleHostAsString = {
"driver": "cassandra",
"host": testHostname,
"database": "dbmigration"
};
var configWithoutHost = {
"driver": "cassandra",
"database": "dbmigration"
}
var internals = {};
internals.mod = {};
internals.migrationTable = 'migrations';
describe('Cassandra Migration', function() {
driver.connect(config, internals, function(err, db) {
// Stub connection execute
var executeSpy = sinon.spy();
db.connection.execute = function () {};
sinon.stub(db.connection, 'execute', executeSpy);
describe('Create Table', function() {
it('A simple table with one Primary key', function() {
db.createTable('users', {
'name': 'varchar',
'age': 'id'
}, {
'primary_key': 'name'
});
var expectedQuery = ['CREATE TABLE IF NOT EXISTS users',
'( name varchar, age id, PRIMARY KEY (name) )'];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
});
it('A simple table with multiple Primary keys', function() {
db.createTable('users', {
'name': 'varchar',
'age': 'id'
}, {
'primary_key': '(name, age)'
});
var expectedQuery = ['CREATE TABLE IF NOT EXISTS users',
'( name varchar, age id, PRIMARY KEY (name, age) )'];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
});
it('A simple table with compression', function() {
db.createTable('users', {
'name': 'varchar'
}, {
'primary_key': 'name',
'compression': "{'sstable_compression': 'DeflateCompressor', 'chunk_length_kb': 1024}"
});
var expectedQuery = ['CREATE TABLE IF NOT EXISTS users',
"( name varchar, PRIMARY KEY (name) )",
"WITH compression = {'sstable_compression': 'DeflateCompressor', 'chunk_length_kb': 1024}"];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
});
});
describe('Drop table', function() {
it('Should build a valid SQL', function() {
db.dropTable('users');
var expectedQuery = ['DROP TABLE users'];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
})
});
describe('Alter Table', function() {
it('Add a new column', function() {
db.addColumn('users', 'age', 'int');
var expectedQuery = ['ALTER TABLE users ADD age int'];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
});
it('Drop a existing column', function() {
db.removeColumn('users', 'age');
var expectedQuery = ['ALTER TABLE users DROP age'];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
});
it('Rename an existing column', function() {
db.renameColumn('users', 'age', 'age2');
var expectedQuery = ['ALTER TABLE users RENAME age TO age2'];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
});
it('Change an existing column type', function() {
db.changeColumn('users', 'age', 'blob');
var expectedQuery = ['ALTER TABLE users ALTER age TYPE blob'];
sinon.assert.calledOnce(executeSpy);
assert.equal(executeSpy.args[0][0], expectedQuery.join(' '));
executeSpy.reset();
});
});
});
describe('Driver contactPoints format', function() {
var checkHostname = function(db, name) {
name = name || testHostname;
var hostname = db.connectionParam.hostname;
for (var i = 0; i < db.connectionParam.length; i++) {
assert.equal(hostname[i], name);
}
}
driver.connect(config, internals, function(err, db) {
it('Host as array configuration', function() {
checkHostname(db);
});
});
driver.connect(
configWithHostListAsString, internals, function(err, db) {
it('Host as comma-list configuration', function() {
checkHostname(db);
});
});
driver.connect(
configWithSingleHostAsString, internals, function(err, db) {
it('Host as single string configuration', function() {
checkHostname(db);
});
});
driver.connect(configWithoutHost, internals, function(err, db) {
it('Host missing', function() {
checkHostname(db, 'localhost');
});
});
});
});