knex-postgis
Version:
postgis extension for knex
256 lines (195 loc) • 6.47 kB
JavaScript
;
var chai = require('chai'),
expect = chai.expect;
var utils = require('../lib/utils');
function test(obj, expected) {
var str = JSON.stringify(obj);
expect(utils.checkGeoJsonGeometry(str)).to.deep.equals(expected);
}
function testError(obj) {
expect(function() {
var str = JSON.stringify(obj);
utils.checkGeoJsonGeometry(str);
}).to.throw(Error);
}
describe('geoJSON validation', function() {
it('filter invalid ', function() {
testError({});
testError({type:'point', coordinates:[]});
testError({type:'Point', coordinates:'select *'});
testError({type:'Point', coordinates: ['a', 'b']});
});
it('clean additional properties', function() {
test({type:'Point', coordinates: [0, 0], extra: 'foo'}, {type:'Point', coordinates: [0, 0]});
});
});
describe('isBoolean validation', function() {
describe('responds `true` for valid booleans', function() {
it('for true', function() {
expect(utils.isBoolean(true)).to.true;
});
it('for false', function() {
expect(utils.isBoolean(false)).to.true;
});
});
describe('responds `false` for invalid booleans', function() {
it('for strings', function() {
expect(utils.isBoolean('true')).to.false;
});
it('for null', function() {
expect(utils.isBoolean(null)).to.false;
});
it('for numbers', function() {
expect(utils.isBoolean(0)).to.false;
});
it('for undefined', function() {
expect(utils.isBoolean(undefined)).to.false;
});
it('for object', function() {
expect(utils.isBoolean({})).to.false;
});
});
});
describe('isNumber validation', function() {
describe('responds `true` for valid numbers', function() {
it('for a normal int', function() {
expect(utils.isNumber(5)).to.true;
});
it('for normal float', function() {
expect(utils.isNumber(5.3)).to.true;
});
it('for string integer', function() {
expect(utils.isNumber('5')).to.true;
});
it('for string floats', function() {
expect(utils.isNumber('5.3')).to.true;
});
});
describe('responds `false` for invalid numbers', function() {
it('for non-number strings', function() {
expect(utils.isNumber('banana')).to.be.false;
expect(utils.isNumber(',32.5')).to.be.false;
});
it('for empty strings', function() {
expect(utils.isNumber('')).to.be.false;
});
it('for space strings', function() {
expect(utils.isNumber(' ')).to.be.false;
});
it('for multiple space strings', function() {
expect(utils.isNumber(' ')).to.be.false;
});
it('for null', function() {
expect(utils.isNumber(null)).to.be.false;
});
it('for undefined', function() {
expect(utils.isNumber(undefined)).to.be.false;
});
it('for object', function() {
expect(utils.isNumber({})).to.be.false;
expect(utils.isNumber({ test: 'yes' })).to.be.false;
});
it('for array', function() {
expect(utils.isNumber([])).to.be.false;
expect(utils.isNumber([1, 2, 3])).to.be.false;
});
it('for boolean values', function() {
expect(utils.isNumber(false)).to.be.false;
expect(utils.isNumber(true)).to.be.false;
});
it('for errors', function() {
expect(utils.isNumber(new Error())).to.be.false;
});
it('for functions', function() {
expect(utils.isNumber(function() {})).to.be.false;
});
});
});
describe('isString validation', function() {
describe('responds `true` for valid strings', function() {
it('for a normal string', function() {
expect(utils.isString('banana')).to.true;
});
it('for an empty string', function() {
expect(utils.isString('')).to.true;
});
it('for a space string', function() {
expect(utils.isString(' ')).to.true;
});
});
describe('responds `false` for invalid strings', function() {
it('for numbers', function() {
expect(utils.isString(5)).to.be.false;
expect(utils.isString(32.5)).to.be.false;
});
it('for nothing', function() {
expect(utils.isString()).to.be.false;
});
it('for null', function() {
expect(utils.isString(null)).to.be.false;
});
it('for undefined', function() {
expect(utils.isString(undefined)).to.be.false;
});
it('for object', function() {
expect(utils.isString({})).to.be.false;
expect(utils.isString({ test: 'yes' })).to.be.false;
});
it('for array', function() {
expect(utils.isString([])).to.be.false;
expect(utils.isString([1, 2, 3])).to.be.false;
});
it('for boolean values', function() {
expect(utils.isString(false)).to.be.false;
expect(utils.isString(true)).to.be.false;
});
it('for errors', function() {
expect(utils.isString(new Error())).to.be.false;
});
it('for functions', function() {
expect(utils.isString(function() {})).to.be.false;
});
});
});
describe('isWKT validation', function() {
describe('responds `true` for valid WKTs', function() {
it('for points', function() {
var wkt = 'POINT(6 10)';
expect(utils.isWKT(wkt)).to.be.true;
});
it('for linestrings', function() {
var wkt = 'LINESTRING(3 4,10 50,20 25)';
expect(utils.isWKT(wkt)).to.be.true;
});
it('for polygons', function() {
var wkt = 'POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2))';
expect(utils.isWKT(wkt)).to.be.true;
});
it('for multipoints', function() {
var wkt = 'MULTIPOINT(3.5 5.6, 4.8 10.5)';
expect(utils.isWKT(wkt)).to.be.true;
});
it('for multilinestrings', function() {
var wkt = 'MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))';
expect(utils.isWKT(wkt)).to.be.true;
});
it('for multipolygons', function() {
var wkt = 'MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3))';
expect(utils.isWKT(wkt)).to.be.true;
});
});
describe('responds `false` for invalid WKTs', function() {
it('for nothing', function() {
expect(utils.isWKT()).to.be.false;
});
it('for null', function() {
expect(utils.isWKT(null)).to.be.false;
});
it('for undefined', function() {
expect(utils.isWKT(undefined)).to.be.false;
});
it('for non-WKT strings', function() {
expect(utils.isWKT('geom')).to.be.false;
});
});
});