db-meta
Version:
Relational database metadata extraction library
129 lines (107 loc) • 4.57 kB
JavaScript
var expect = require('chai').expect;
var pg = require('../../lib/pg/driver');
var driver = null;
describe('pg driver', function() {
before(function(done) {
pg.connect({ database: 'db_meta_test' }, onConnect);
function onConnect(err, dbDriver) {
driver = dbDriver;
driver.client.query('CREATE TABLE person (id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(100), age INTEGER DEFAULT 30,number SERIAL NOT NULL, CONSTRAINT person_email_key UNIQUE (email))', createIndex);
}
function createIndex(err) {
driver.client.query('CREATE INDEX person_name_idx ON person (name, age)', done);
}
});
after(function(done) {
driver.client.query('DROP TABLE person', driver.close.bind(driver, done));
});
it('should return the database version', function(done) {
driver.getVersion(onResult);
function onResult(err, version) {
expect(err).to.be.null;
expect(version).to.be.present;
done();
}
});
it('should return all database tables', function(done) {
driver.getTables(onResult);
function onResult(err, tables) {
expect(err).to.be.null;
expect(tables).not.to.be.empty;
expect(tables.length).to.equal(1);
expect(tables[0].getName()).to.equal('person');
expect(tables[0].meta).not.to.be.empty;
done();
}
});
it('should return all columns for a given table', function(done) {
driver.getColumns('person', onResult);
function onResult(err, columns) {
expect(err).to.be.null;
expect(columns).not.to.be.empty;
expect(columns.length).to.equal(5);
var idColumn = getColumnByName(columns, 'id');
expect(idColumn).not.to.be.null;
expect(idColumn.meta).not.to.be.empty;
expect(idColumn.isNullable()).to.be.false;
expect(idColumn.getDataType()).to.equal('INTEGER');
expect(idColumn.getMaxLength()).to.be.null;
expect(idColumn.isPrimaryKey()).to.be.true;
expect(idColumn.isUnique()).to.be.true;
expect(idColumn.isAutoIncrementing()).to.be.false;
var nameColumn = getColumnByName(columns, 'name');
expect(nameColumn).not.to.be.null;
expect(nameColumn.meta).not.to.be.empty;
expect(nameColumn.isNullable()).to.be.false;
expect(nameColumn.getMaxLength()).to.equal(255);
expect(nameColumn.getDataType()).to.equal('CHARACTER VARYING');
expect(nameColumn.isPrimaryKey()).to.be.false;
expect(nameColumn.isUnique()).to.be.false;
expect(nameColumn.isAutoIncrementing()).to.be.false;
var emailColumn = getColumnByName(columns, 'email');
expect(emailColumn).not.to.be.null;
expect(emailColumn.meta).not.to.be.empty;
expect(emailColumn.isNullable()).to.be.true;
expect(emailColumn.getMaxLength()).to.equal(100);
expect(emailColumn.getDataType()).to.equal('CHARACTER VARYING');
expect(emailColumn.isPrimaryKey()).to.be.false;
expect(emailColumn.isUnique()).to.be.true;
expect(emailColumn.isAutoIncrementing()).to.be.false;
var ageColumn = getColumnByName(columns, 'age');
expect(ageColumn.getDefaultValue()).to.equal('30');
var numberColumn = getColumnByName(columns, 'number');
expect(numberColumn).not.to.be.null;
expect(numberColumn.meta).not.to.be.empty;
expect(numberColumn.isNullable()).to.be.false;
expect(numberColumn.getDataType()).to.equal('INTEGER');
expect(numberColumn.isPrimaryKey()).to.be.false;
expect(numberColumn.isUnique()).to.be.false;
expect(numberColumn.isAutoIncrementing()).to.be.true;
done();
}
});
it('should return all indexes in the database', function(done) {
driver.getIndexes('person', onResult);
function onResult(err, indexes) {
expect(indexes.length).to.equal(4);
expect(indexes[1].getName()).to.equal('person_email_key');
expect(indexes[1].getTableName()).to.equal('person');
expect(indexes[1].getColumnName()).to.equal('email');
expect(indexes[2].getName()).to.equal('person_name_idx');
expect(indexes[2].getTableName()).to.equal('person');
expect(indexes[2].getColumnName()).to.equal('name');
expect(indexes[3].getName()).to.equal('person_name_idx');
expect(indexes[3].getTableName()).to.equal('person');
expect(indexes[3].getColumnName()).to.equal('age');
done();
}
});
});
function getColumnByName(columns, name) {
for (var i = 0; i < columns.length; i++) {
if (columns[i].getName() === name) {
return columns[i];
}
}
return null;
}