node-querybuilder
Version:
Modeled after Codeigniter's QueryBuilder. Build and execute queries in a safe and database-agnostic way.
124 lines (119 loc) • 5.43 kB
JavaScript
const should = require('chai').should();
const QueryBuilder = require('../../drivers/mssql/query_builder.js');
const qb = new QueryBuilder();
describe('MSSQL: from()', () => {
it('should exist', () => {
should.exist(qb.from);
});
it('should be a function', () => {
qb.from.should.be.a('function');
});
it('should have an array to put fields into', () => {
qb.should.have.property('from_array');
});
it('should have an empty array to put fields into at the beginning', () => {
qb.from_array.should.be.empty;
});
it('should add an item to an array and escape it properly', () => {
qb.from('universe');
qb.from_array.should.eql(['[universe]']);
})
it('should accept a comma-delimited string of items and trim and escape each properly', () => {
qb.reset_query();
qb.from('universe,galaxy , star_system, planet');
qb.from_array.should.eql(['[universe]','[galaxy]','[star_system]','[planet]']);
});
it('should have an empty array after resetting', () => {
qb.reset_query();
qb.from_array.should.be.empty;
});
it('should be allowed to be called multiple times to add multiple items to the from array', () => {
qb.reset_query();
qb.from('universe').from('galaxy').from('star_system').from('planet');
qb.from_array.should.eql(['[universe]','[galaxy]','[star_system]','[planet]']);
});
it('should accept an array of items and add them individually to the from array', () => {
qb.reset_query();
qb.from(['universe','galaxy','star_system','planet']);
qb.from_array.should.eql(['[universe]','[galaxy]','[star_system]','[planet]']);
});
it('should not double-escape an item', () => {
qb.reset_query();
qb.from('[do]');
qb.from_array.should.eql(['[do]']);
});
it('should not double-escape items when provided with an array of pre-escaped items', () => {
qb.reset_query();
qb.from(['[universe]','[galaxy]','[star_system]']);
qb.from_array.should.eql(['[universe]','[galaxy]','[star_system]']);
});
it('should not double-escape items when provided with an array of pre-escaped items but should escpae non-pre-escaped items', () => {
qb.reset_query();
qb.from(['[universe]','galaxy','[star_system]']);
qb.from_array.should.eql(['[universe]','[galaxy]','[star_system]']);
});
it('should allow for aliases and it should escape them properly', () => {
qb.reset_query();
qb.from('universe u');
qb.from_array.should.eql(['[universe] [u]']);
});
it('should allow for the word AS to be used to alias an item', () => {
qb.reset_query();
qb.from('universe as u');
qb.from_array.should.eql(['[universe] as [u]']);
});
it('should allow for an array of item + aliases and it should escape them all properly', () => {
qb.reset_query();
qb.from(['universe u', 'galaxy g']);
qb.from_array.should.eql(['[universe] [u]','[galaxy] [g]']);
});
it('should allow for an array of item + aliases that are pre-escaped and it should not double-escape them', () => {
qb.reset_query();
qb.from(['[universe] [u]', '[galaxy] [g]']);
qb.from_array.should.eql(['[universe] [u]','[galaxy] [g]']);
});
it('should allow for an array of item + aliases where some are pre-escaped and it should not double-escape pre-escaped items', () => {
qb.reset_query();
qb.from(['[universe] u', 'galaxy [g]']);
qb.from_array.should.eql(['[universe] [u]','[galaxy] [g]']);
});
it('should add aliases to alias-tracking array', () => {
qb.reset_query();
qb.from(['[universe] [u]', '[galaxy] [g]']);
qb.aliased_tables.should.eql(['u','g']);
});
it('should allow for an comma-delimited list of item + aliases and it should escape them all properly', () => {
qb.reset_query();
qb.from(['universe u, galaxy g']);
qb.from_array.should.eql(['[universe] [u]','[galaxy] [g]']);
});
it('should allow for namespacing in field name (host.db.table)', () => {
qb.reset_query();
qb.from('star_system.planet');
qb.from_array.should.eql(['[star_system].[planet]']);
qb.reset_query();
qb.from('galaxy.star_system.planet');
qb.from_array.should.eql(['[galaxy].[star_system].[planet]']);
});
it('should allow for namespacing in field name (host.db.table.column) + alias', () => {
qb.reset_query();
qb.from('universe.galaxy.star_system planet');
qb.from_array.should.eql(['[universe].[galaxy].[star_system] [planet]']);
});
it('should allow for namespacing in field name (host.db.table.column) + alias (declare with AS)', () => {
qb.reset_query();
qb.from('universe.galaxy.star_system as planet');
qb.from_array.should.eql(['[universe].[galaxy].[star_system] as [planet]']);
});
it('should accept but ignore empty strings and empty strings within arrays', () => {
qb.reset_query();
qb.from('');
qb.from_array.should.be.empty;
qb.reset_query();
qb.from(['','']);
qb.from_array.should.be.empty;
qb.reset_query();
qb.from(['','foobar']);
qb.from_array.should.eql(['[foobar]']);
});
});