107 lines
3.6 KiB
JavaScript
107 lines
3.6 KiB
JavaScript
|
require('../../../support/test_helper');
|
||
|
|
||
|
var assert = require('../../../support/assert');
|
||
|
var TestClient = require('../../../support/test-client');
|
||
|
var _ = require('underscore');
|
||
|
|
||
|
describe('widgets', function() {
|
||
|
|
||
|
describe('lists', function() {
|
||
|
|
||
|
afterEach(function(done) {
|
||
|
if (this.testClient) {
|
||
|
this.testClient.drain(done);
|
||
|
} else {
|
||
|
done();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
function listsMapConfig(columns) {
|
||
|
return {
|
||
|
version: '1.5.0',
|
||
|
layers: [
|
||
|
{
|
||
|
type: 'mapnik',
|
||
|
options: {
|
||
|
sql: 'select * from test_table',
|
||
|
cartocss: '#layer0 { marker-fill: red; marker-width: 10; }',
|
||
|
cartocss_version: '2.0.1',
|
||
|
widgets: {
|
||
|
places: {
|
||
|
type: 'list',
|
||
|
options: {
|
||
|
columns: columns || ['name', 'address']
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
var EXPECTED_NAMES = ['Hawai', 'El Estocolmo', 'El Rey del Tallarín', 'El Lacón', 'El Pico'];
|
||
|
|
||
|
it('can be fetched from a valid list', function(done) {
|
||
|
var columns = ['name', 'address'];
|
||
|
this.testClient = new TestClient(listsMapConfig(columns));
|
||
|
this.testClient.getWidget('places', function (err, res, list) {
|
||
|
assert.ok(!err, err);
|
||
|
assert.ok(list);
|
||
|
assert.equal(list.type, 'list');
|
||
|
assert.equal(list.rows.length, 5);
|
||
|
|
||
|
assert.ok(onlyHasFields(list, columns));
|
||
|
|
||
|
var names = list.rows.map(function (item) {
|
||
|
return item.name;
|
||
|
});
|
||
|
assert.deepEqual(names, EXPECTED_NAMES);
|
||
|
|
||
|
var expectedAddresses = [
|
||
|
'Calle de Pérez Galdós 9, Madrid, Spain',
|
||
|
'Calle de la Palma 72, Madrid, Spain',
|
||
|
'Plaza Conde de Toreno 2, Madrid, Spain',
|
||
|
'Manuel Fernández y González 8, Madrid, Spain',
|
||
|
'Calle Divino Pastor 12, Madrid, Spain'
|
||
|
];
|
||
|
var addresses = list.rows.map(function (item) {
|
||
|
return item.address;
|
||
|
});
|
||
|
assert.deepEqual(addresses, expectedAddresses);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('should fetch just one column', function(done) {
|
||
|
var columns = ['name'];
|
||
|
this.testClient = new TestClient(listsMapConfig(columns));
|
||
|
this.testClient.getWidget('places', function (err, res, list) {
|
||
|
assert.ok(!err, err);
|
||
|
assert.ok(list);
|
||
|
assert.equal(list.type, 'list');
|
||
|
assert.equal(list.rows.length, 5);
|
||
|
|
||
|
assert.ok(onlyHasFields(list, columns));
|
||
|
|
||
|
var names = list.rows.map(function (item) {
|
||
|
return item.name;
|
||
|
});
|
||
|
assert.deepEqual(names, EXPECTED_NAMES);
|
||
|
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
function onlyHasFields(list, expectedFields) {
|
||
|
var fields = (!!list.rows[0]) ? Object.keys(list.rows[0]) : [];
|
||
|
|
||
|
return _.difference(fields, expectedFields).length === 0 &&
|
||
|
_.difference(expectedFields, fields).length === 0;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
});
|