datahub/test/view.map.test.js
Michael Bauer 4954e442a3 added regex support for query
Added a the regex support for queries - this will also match substrings!
(change from previous behavior).

Also fixed the test vor Custom popups, since this was b0rken.
2012-09-13 16:32:36 +02:00

203 lines
4.8 KiB
JavaScript

(function ($) {
module("View - Map");
var GeoJSONFixture = {
getDataset: function() {
var fields = [
{id: 'id'},
{id: 'x'},
{id: 'y'},
{id: 'z'},
{id: 'geom'}
];
var records = [
{id: 0, x: 1, y: 2, z: 3, geom: '{"type":"Point","coordinates":[13.40,52.35]}'},
{id: 1, x: 2, y: 4, z: 6, geom: {type:"Point",coordinates:[13.40,52.35]}},
{id: 2, x: 3, y: 6, z: 9, geom: {type:"LineString",coordinates:[[100.0, 0.0],[101.0, 1.0]]}}
];
var dataset = new recline.Model.Dataset({
records: records,
fields: fields
});
return dataset;
}
};
test('basics', function () {
var dataset = Fixture.getDataset();
var view = new recline.View.Map({
model: dataset
});
$('.fixtures').append(view.el);
view.render();
assertPresent('.editor-field-type', view.elSidebar);
// Check that the Leaflet map was set up
assertPresent('.leaflet-container',view.el);
ok(view.map instanceof L.Map);
ok(view.features instanceof L.GeoJSON);
view.remove();
});
test('_setupGeometryField', function () {
var dataset = Fixture.getDataset();
var view = new recline.View.Map({
model: dataset
});
view.render();
var exp = {
geomField: null,
lonField: 'lon',
latField: 'lat',
autoZoom: true
};
deepEqual(view.state.toJSON(), exp);
deepEqual(view.menu.state.toJSON(), exp);
});
test('Lat/Lon geom fields', function () {
var dataset = Fixture.getDataset();
var view = new recline.View.Map({
model: dataset
});
$('.fixtures').append(view.el);
view.render();
// Not really needed but fire query to test that resetting works!
dataset.query();
// Check that all markers were created
equal(_getFeaturesCount(view.features),6);
// Delete a record
view.model.records.remove(view.model.records.get('1'));
equal(_getFeaturesCount(view.features),5);
// Add a new one
view.model.records.add({id: 7, x: 7, y: 14, z: 21, country: 'KX', label: 'seventh', lat:13.23, lon:23.56}),
equal(_getFeaturesCount(view.features),6);
view.remove();
});
test('GeoJSON geom field', function () {
var dataset = GeoJSONFixture.getDataset();
var view = new recline.View.Map({
model: dataset
});
$('.fixtures').append(view.el);
view.render();
// Check that all features were created
equal(_getFeaturesCount(view.features),3);
// Delete a record
view.model.records.remove(view.model.records.get('2'));
equal(_getFeaturesCount(view.features),2);
// Add it back
view.model.records.add({id: 2, x: 3, y: 6, z: 9, geom: {type:"LineString",coordinates:[[100.0, 0.0],[101.0, 1.0]]}}),
equal(_getFeaturesCount(view.features),3);
view.remove();
});
test('_getGeometryFromRecord non-GeoJSON', function () {
var test = [
[{ lon: 47, lat: 53}, [47,53]],
["53.3,47.32", [47.32, 53.3]],
["53.3, 47.32", [47.32, 53.3]],
["(53.3,47.32)", [47.32, 53.3]],
[[53.3,47.32], [53.3, 47.32]]
];
var view = new recline.View.Map({
model: new recline.Model.Dataset({
records: [{a: 1}]
}),
state: {
geomField: 'location'
}
});
_.each(test, function(item) {
var record = new recline.Model.Record({location: item[0]});
var out = view._getGeometryFromRecord(record);
deepEqual(out.coordinates, item[1]);
});
});
test('Popup', function () {
var dataset = GeoJSONFixture.getDataset();
var view = new recline.View.Map({
model: dataset
});
$('.fixtures').append(view.el);
view.render();
var marker = view.el.find('.leaflet-marker-icon').first();
assertPresent(marker);
_.values(view.features._layers)[0].fire('click');
var popup = view.el.find('.leaflet-popup-content');
assertPresent(popup);
var text = popup.text();
ok((text.indexOf('geom') === -1))
_.each(view.model.fields.toJSON(),function(field){
if (field.id != 'geom'){
ok((text.indexOf(field.id) !== -1))
}
});
view.remove();
});
test('Popup - Custom', function () {
var dataset = GeoJSONFixture.getDataset();
var view = new recline.View.Map({
model: dataset
});
$('.fixtures').append(view.el);
view.infobox = function(record) {
var html = Mustache.render('<h3>{{x}}</h3>y: {{y}}', record.toJSON());
return html;
};
view.render();
var marker = view.el.find('.leaflet-marker-icon').first();
_.values(view.features._layers)[0].fire('click');
var popup = view.el.find('.leaflet-popup-content');
assertPresent(popup);
var text = popup.html();
ok((text.indexOf('<h3>1</h3>y: 2') != -1))
view.remove();
});
test('MapMenu', function () {
var dataset = Fixture.getDataset();
var controls = new recline.View.MapMenu({
model: dataset,
state: {}
});
assertPresent('.editor-field-type', controls.el);
});
var _getFeaturesCount = function(features){
var cnt = 0;
_.each(features._layers, function(layer) {
cnt++;
});
return cnt;
}
})(this.jQuery);