Merge branch 'master' into 120-solr-backend

This commit is contained in:
Rufus Pollock
2012-10-16 21:14:09 +01:00
85 changed files with 14736 additions and 5653 deletions

View File

@@ -1,5 +1,42 @@
(function ($) {
module("Backend CKAN");
test('_parseCkanResourceUrl', function() {
var resid = 'eb23e809-ccbb-4ad1-820a-19586fc4bebd';
var url = 'http://demo.ckan.org/dataset/some-dataset/resource/' + resid;
var out = recline.Backend.Ckan._parseCkanResourceUrl(url);
var exp = {
resource_id: resid,
endpoint: 'http://demo.ckan.org/api'
}
deepEqual(out, exp);
});
test('_normalizeQuery', function() {
var dataset = new recline.Model.Dataset({
url: 'does-not-matter',
id: 'xyz',
backend: 'ckan'
});
var queryObj = {
q: 'abc',
sort: [
{ field: 'location', order: 'desc' },
{ field: 'last' }
]
};
var out = recline.Backend.Ckan._normalizeQuery(queryObj, dataset);
var exp = {
resource_id: dataset.id,
q: 'abc',
sort: 'location desc,last ',
limit: 10,
offset: 0
};
deepEqual(out, exp);
});
test("fetch", function() {
var dataset = new recline.Model.Dataset({
url: 'http://localhost:5000/dataset/test-data-viewer/resource/4f1299ab-a100-4e5f-ba81-e6d234a2f3bd',
@@ -162,3 +199,4 @@ var sample_data = {
"success": true
};
})(this.jQuery);

View File

@@ -34,12 +34,12 @@ test("parseCSV", function() {
deepEqual(row, {Name: 'Jones, Jay', Value: 10});
});
test("parseCSVsemicolon", function() {
test("parseCSV - semicolon", function() {
var csv = '"Jones; Jay";10\n' +
'"Xyz ""ABC"" O\'Brien";11:35\n' +
'"Other; AN";12:35\n';
var array = recline.Backend.CSV.parseCSV(csv, {separator : ';'});
var array = recline.Backend.CSV.parseCSV(csv, {delimiter : ';'});
var exp = [
['Jones; Jay', 10],
['Xyz "ABC" O\'Brien', '11:35' ],
@@ -49,12 +49,12 @@ test("parseCSVsemicolon", function() {
});
test("parseCSVdelimiter", function() {
test("parseCSV - quotechar", function() {
var csv = "'Jones, Jay',10\n" +
"'Xyz \"ABC\" O''Brien',11:35\n" +
"'Other; AN',12:35\n";
var array = recline.Backend.CSV.parseCSV(csv, {delimiter:"'"});
var array = recline.Backend.CSV.parseCSV(csv, {quotechar:"'"});
var exp = [
["Jones, Jay", 10],
["Xyz \"ABC\" O'Brien", "11:35" ],
@@ -64,7 +64,7 @@ test("parseCSVdelimiter", function() {
});
test("serializeCSV", function() {
test("serializeCSV - Array", function() {
var csv = [
['Jones, Jay', 10],
['Xyz "ABC" O\'Brien', '11:35' ],
@@ -78,5 +78,22 @@ test("serializeCSV", function() {
deepEqual(array, exp);
});
test("serializeCSV - Object", function() {
var indata = {
fields: [ {id: 'name'}, {id: 'number'}],
records: [
{name: 'Jones, Jay', number: 10},
{name: 'Xyz "ABC" O\'Brien', number: '11:35' },
{name: 'Other, AN', number: '12:35' }
]
};
var array = recline.Backend.CSV.serializeCSV(indata);
var exp = 'name,number\n' +
'"Jones, Jay",10\n' +
'"Xyz \"ABC\" O\'Brien",11:35\n' +
'"Other, AN",12:35\n';
deepEqual(array, exp);
});
})(this.jQuery);

View File

@@ -196,52 +196,53 @@ test("query", function() {
$.ajax.restore();
});
test("write", function() {
var url = 'http://localhost:9200/recline-test/es-write';
var backend = new recline.Backend.ElasticSearch.Wrapper(url);
stop();
var id = parseInt(Math.random()*100000000).toString();
var rec = {
id: id,
title: 'my title'
};
var jqxhr = backend.upsert(rec);
jqxhr.done(function(data) {
ok(data.ok);
equal(data._id, id);
equal(data._type, 'es-write');
equal(data._version, 1);
// update
rec.title = 'new title';
var jqxhr = backend.upsert(rec);
jqxhr.done(function(data) {
equal(data._version, 2);
// delete
var jqxhr = backend.delete(rec.id);
jqxhr.done(function(data) {
ok(data.ok);
rec = null;
// try to get ...
var jqxhr = backend.get(id);
jqxhr.done(function(data) {
// should not be here
ok(false, 'Should have got 404');
}).error(function(error) {
equal(error.status, 404);
start();
});
});
});
}).fail(function(error) {
console.log(error);
ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
start();
});
});
// DISABLED - this test requires ElasticSearch to be running locally
// test("write", function() {
// var url = 'http://localhost:9200/recline-test/es-write';
// var backend = new recline.Backend.ElasticSearch.Wrapper(url);
// stop();
//
// var id = parseInt(Math.random()*100000000).toString();
// var rec = {
// id: id,
// title: 'my title'
// };
// var jqxhr = backend.upsert(rec);
// jqxhr.done(function(data) {
// ok(data.ok);
// equal(data._id, id);
// equal(data._type, 'es-write');
// equal(data._version, 1);
//
// // update
// rec.title = 'new title';
// var jqxhr = backend.upsert(rec);
// jqxhr.done(function(data) {
// equal(data._version, 2);
//
// // delete
// var jqxhr = backend.remove(rec.id);
// jqxhr.done(function(data) {
// ok(data.ok);
// rec = null;
//
// // try to get ...
// var jqxhr = backend.get(id);
// jqxhr.done(function(data) {
// // should not be here
// ok(false, 'Should have got 404');
// }).error(function(error) {
// equal(error.status, 404);
// start();
// });
// });
// });
// }).fail(function(error) {
// console.log(error);
// ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
// start();
// });
// });
// ==================================================
@@ -289,63 +290,64 @@ test("query", function() {
$.ajax.restore();
});
test("write", function() {
var dataset = new recline.Model.Dataset({
url: 'http://localhost:9200/recline-test/es-write',
backend: 'elasticsearch'
});
stop();
var id = parseInt(Math.random()*100000000).toString();
var rec = new recline.Model.Record({
id: id,
title: 'my title'
});
dataset.records.add(rec);
// have to do this explicitly as we not really supporting adding new items atm
dataset._changes.creates.push(rec.toJSON());
var jqxhr = dataset.save();
jqxhr.done(function(data) {
ok(data.ok);
equal(data._id, id);
equal(data._type, 'es-write');
equal(data._version, 1);
// update
rec.set({title: 'new title'});
// again set up by hand ...
dataset._changes.creates = [];
dataset._changes.updates.push(rec.toJSON());
var jqxhr = dataset.save();
jqxhr.done(function(data) {
equal(data._version, 2);
// delete
dataset._changes.updates = 0;
dataset._changes.deletes.push(rec.toJSON());
var jqxhr = dataset.save();
jqxhr.done(function(data) {
ok(data.ok);
rec = null;
// try to get ...
var es = new recline.Backend.ElasticSearch.Wrapper(dataset.get('url'));
var jqxhr = es.get(id);
jqxhr.done(function(data) {
// should not be here
ok(false, 'Should have got 404');
}).error(function(error) {
equal(error.status, 404);
start();
});
});
});
}).fail(function(error) {
console.log(error);
ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
start();
});
});
// DISABLED - this test requires ElasticSearch to be running locally
// test("write", function() {
// var dataset = new recline.Model.Dataset({
// url: 'http://localhost:9200/recline-test/es-write',
// backend: 'elasticsearch'
// });
//
// stop();
//
// var id = parseInt(Math.random()*100000000).toString();
// var rec = new recline.Model.Record({
// id: id,
// title: 'my title'
// });
// dataset.records.add(rec);
// // have to do this explicitly as we not really supporting adding new items atm
// dataset._changes.creates.push(rec.toJSON());
// var jqxhr = dataset.save();
// jqxhr.done(function(data) {
// ok(data.ok);
// equal(data._id, id);
// equal(data._type, 'es-write');
// equal(data._version, 1);
//
// // update
// rec.set({title: 'new title'});
// // again set up by hand ...
// dataset._changes.creates = [];
// dataset._changes.updates.push(rec.toJSON());
// var jqxhr = dataset.save();
// jqxhr.done(function(data) {
// equal(data._version, 2);
//
// // delete
// dataset._changes.updates = 0;
// dataset._changes.deletes.push(rec.toJSON());
// var jqxhr = dataset.save();
// jqxhr.done(function(data) {
// ok(data.ok);
// rec = null;
//
// // try to get ...
// var es = new recline.Backend.ElasticSearch.Wrapper(dataset.get('url'));
// var jqxhr = es.get(id);
// jqxhr.done(function(data) {
// // should not be here
// ok(false, 'Should have got 404');
// }).error(function(error) {
// equal(error.status, 404);
// start();
// });
// });
// });
// }).fail(function(error) {
// console.log(error);
// ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
// start();
// });
// });
})(this.jQuery);

View File

@@ -11,9 +11,20 @@ var memoryData = [
, {id: 5, date: '2011-10-11', x: 6, y: 12, z: 18, country: 'DE', label: 'sixth'}
];
var memoryFields = [
{id: 'id'},
{id: 'date', type: 'date'},
{id: 'x', type: 'integer'},
{id: 'y', type: 'integer'},
{id: 'z', type: 'integer'},
{id: 'country'},
{id: 'label'}
];
var _wrapData = function() {
var dataCopy = $.extend(true, [], memoryData);
return new recline.Backend.Memory.Store(dataCopy);
// return new recline.Backend.Memory.Store(dataCopy, fields);
return new recline.Backend.Memory.Store(dataCopy, memoryFields);
}
test('basics', function () {
@@ -40,7 +51,7 @@ test('query sort', function () {
var data = _wrapData();
var queryObj = {
sort: [
{'y': {order: 'desc'}}
{field: 'y', order: 'desc'}
]
};
data.query(queryObj).then(function(out) {
@@ -49,7 +60,7 @@ test('query sort', function () {
var queryObj = {
sort: [
{'country': {order: 'desc'}}
{field: 'country', order: 'desc'}
]
};
data.query(queryObj).then(function(out) {
@@ -58,7 +69,7 @@ test('query sort', function () {
var queryObj = {
sort: [
{'country': {order: 'asc'}}
{field: 'country', order: 'asc'}
]
};
data.query(queryObj).then(function(out) {
@@ -74,7 +85,7 @@ test('query string', function () {
});
data.query({q: 'UK 6'}).then(function(out) {
equal(out.total, 1);
equal(out.total, 2); // the new regex support will find 2 hits
deepEqual(out.hits[0].id, 1);
});
});
@@ -82,27 +93,63 @@ test('query string', function () {
test('filters', function () {
var data = _wrapData();
var query = new recline.Model.Query();
query.addFilter({type: 'term', fieldType: 'string', field: 'country', term: 'UK'});
query.addFilter({type: 'term', field: 'country', term: 'UK'});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 3);
deepEqual(_.pluck(out.hits, 'country'), ['UK','UK','UK']);
});
query = new recline.Model.Query();
query.addFilter({type: 'range', fieldType: 'date', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
query.addFilter({type: 'range', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 3);
deepEqual(_.pluck(out.hits, 'date'), ['2011-01-01','2011-02-03','2011-04-05']);
});
query = new recline.Model.Query();
query.addFilter({type: 'range', fieldType: 'number', field: 'z', start: '0', stop: '10'});
query.addFilter({type: 'range', field: 'z', start: '0', stop: '10'});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 3);
deepEqual(_.pluck(out.hits, 'z'), [3,6,9]);
});
});
test('filters with nulls', function () {
var data = _wrapData();
query = new recline.Model.Query();
query.addFilter({type: 'range', field: 'z', start: '', stop: null});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 6);
});
query = new recline.Model.Query();
query.addFilter({type: 'range', field: 'x', start: '', stop: '3'});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 3);
});
query = new recline.Model.Query();
query.addFilter({type: 'range', field: 'x', start: '3', stop: ''});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 4);
});
data.data[5].country = '';
query = new recline.Model.Query();
query.addFilter({type: 'range', field: 'country', start: '', stop: 'Z'});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 5);
});
query = new recline.Model.Query();
query.addFilter({type: 'range', field: 'x', start: '', stop: ''});
data.query(query.toJSON()).then(function(out) {
equal(out.total, 6);
});
});
test('facet', function () {
var data = _wrapData();
var query = new recline.Model.Query();
@@ -135,7 +182,7 @@ test('update and delete', function () {
equal(data.data[0].x, newVal);
// Test Delete
data.delete(doc1);
data.remove(doc1);
equal(data.data.length, 5);
equal(data.data[0].x, memoryData[1].x);
});
@@ -148,13 +195,23 @@ test('update and delete', function () {
module("Backend Memory - Model Integration");
var memoryFields = [
{id: 'id'},
{id: 'date', type: 'date'},
{id: 'x', type: 'integer'},
{id: 'y', type: 'integer'},
{id: 'z', type: 'integer'},
{id: 'country'},
{id: 'label'}
];
var memoryData = {
metadata: {
title: 'My Test Dataset'
, name: '1-my-test-dataset'
, id: 'test-dataset'
},
fields: [{id: 'x'}, {id: 'y'}, {id: 'z'}, {id: 'country'}, {id: 'label'}],
fields: memoryFields,
records: [
{id: 0, x: 1, y: 2, z: 3, country: 'DE', label: 'first'}
, {id: 1, x: 2, y: 4, z: 6, country: 'UK', label: 'second'}
@@ -170,7 +227,7 @@ function makeBackendDataset() {
id: 'test-dataset',
title: 'My Test Dataset',
name: '1-my-test-dataset',
fields: [{id: 'date'}, {id: 'x'}, {id: 'y'}, {id: 'z'}, {id: 'country'}, {id: 'label'}],
fields: memoryFields,
records: [
{id: 0, date: '2011-01-01', x: 1, y: 2, z: 3, country: 'DE', label: 'first'}
, {id: 1, date: '2011-02-03', x: 2, y: 4, z: 6, country: 'UK', label: 'second'}
@@ -216,7 +273,7 @@ test('query sort', function () {
var data = dataset._store.data;
var queryObj = {
sort: [
{'y': {order: 'desc'}}
{field: 'y', order: 'desc'}
]
};
dataset.query(queryObj).then(function() {
@@ -234,28 +291,28 @@ test('query string', function () {
});
dataset.query({q: 'UK 6'}).then(function() {
equal(dataset.records.length, 1);
equal(dataset.records.length, 2);
deepEqual(dataset.records.models[0].id, 1);
});
});
test('filters', function () {
var dataset = makeBackendDataset();
dataset.queryState.addFilter({type: 'term', fieldType: 'string', field: 'country', term: 'UK'});
dataset.queryState.addFilter({type: 'term', field: 'country', term: 'UK'});
dataset.query().then(function() {
equal(dataset.records.length, 3);
deepEqual(dataset.records.pluck('country'), ['UK', 'UK', 'UK']);
});
dataset = makeBackendDataset();
dataset.queryState.addFilter({type: 'range', fieldType: 'date', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
dataset.queryState.addFilter({type: 'range', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
dataset.query().then(function() {
equal(dataset.records.length, 3);
deepEqual(dataset.records.pluck('date'), ['2011-01-01','2011-02-03','2011-04-05']);
});
dataset = makeBackendDataset();
dataset.queryState.addFilter({type: 'range', fieldType: 'number', field: 'z', start: '0', stop: '10'});
dataset.queryState.addFilter({type: 'range', field: 'z', start: '0', stop: '10'});
dataset.query().then(function() {
equal(dataset.records.length, 3);
deepEqual(dataset.records.pluck('z'), [3,6,9]);

View File

@@ -8,8 +8,8 @@
<link rel="stylesheet" href="../css/graph.css" type="text/css" media="screen" />
<script type="text/javascript" src="../vendor/jquery/1.7.1/jquery.js"></script>
<script type="text/javascript" src="../vendor/underscore/1.1.6/underscore.js"></script>
<script type="text/javascript" src="../vendor/backbone/0.5.1/backbone.js"></script>
<script type="text/javascript" src="../vendor/underscore/1.4.2/underscore.js"></script>
<script type="text/javascript" src="../vendor/backbone/0.9.2/backbone.js"></script>
<script type="text/javascript" src="../vendor/jquery-ui-1.8.14.custom.min.js"></script>
<script type="text/javascript" src="../vendor/jquery.flot/0.7/jquery.flot.js"></script>
<script type="text/javascript" src="../vendor/jquery.mustache.js"></script>

View File

@@ -1,23 +1,21 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Qunit Tests</title>
<link rel="stylesheet" href="qunit/qunit.css" type="text/css" media="screen" />
<!-- need this stylesheet because flot will complain if canvas does not have a height -->
<link rel="stylesheet" href="../css/graph.css" type="text/css" media="screen" />
<link rel="stylesheet" href="../vendor/timeline/20120520/css/timeline.css" type="text/css" media="screen" />
<link rel="stylesheet" href="../vendor/leaflet/0.3.1/leaflet.css">
<link rel="stylesheet" href="../vendor/leaflet/0.4.4/leaflet.css">
<link rel="stylesheet" href="../css/map.css">
<script type="text/javascript" src="../vendor/jquery/1.7.1/jquery.js"></script>
<script type="text/javascript" src="../vendor/underscore/1.1.6/underscore.js"></script>
<script type="text/javascript" src="../vendor/backbone/0.5.1/backbone.js"></script>
<script type="text/javascript" src="../vendor/underscore/1.4.2/underscore.js"></script>
<script type="text/javascript" src="../vendor/backbone/0.9.2/backbone.js"></script>
<script type="text/javascript" src="../vendor/moment/1.6.2/moment.js"></script>
<script type="text/javascript" src="../vendor/jquery.flot/0.7/jquery.flot.js"></script>
<script type="text/javascript" src="../vendor/mustache/0.5.0-dev/mustache.js"></script>
<script type="text/javascript" src="../vendor/bootstrap/2.0.2/bootstrap.js"></script>
<script type="text/javascript" src="../vendor/leaflet/0.3.1/leaflet.js"></script>
<script type="text/javascript" src="../vendor/leaflet/0.4.4/leaflet-src.js"></script>
<script type="text/javascript" src="../vendor/leaflet.markercluster/leaflet.markercluster.js"></script>
<script type="text/javascript" src="../vendor/slickgrid/2.0.1/jquery-ui-1.8.16.custom.min.js"></script>
<script type="text/javascript" src="../vendor/slickgrid/2.0.1/jquery.event.drag-2.0.min.js"></script>
<script type="text/javascript" src="../vendor/slickgrid/2.0.1/slick.grid.min.js"></script>

View File

@@ -38,6 +38,28 @@ test('Field: basics', function () {
equal('XX', out[0].label);
});
test('Field: type mapping', function () {
var tests = [
{ input: 'text', exp: 'string'},
{ input: 'int', exp: 'integer'},
{ input: 'float', exp: 'number'},
{ input: 'double', exp: 'number'},
{ input: 'datetime', exp: 'date-time'},
{ input: 'dateTime', exp: 'date-time'},
{ input: 'bool', exp: 'boolean'},
{ input: 'timestamp', exp: 'date-time'},
{ input: 'json', exp: 'object'}
];
_.each(tests, function(data) {
var field = new recline.Model.Field({
id: 'x',
type: data.input
});
equal(field.get('type'), data.exp);
});
});
test('Field: default renderers', function () {
var doc = new recline.Model.Record({
x: 12.3,

View File

@@ -32,9 +32,6 @@ test('basics', function () {
$('.fixtures').append(view.el);
view.render();
//Fire query, otherwise the map won't be initialized
dataset.query();
assertPresent('.editor-field-type', view.elSidebar);
// Check that the Leaflet map was set up
@@ -56,7 +53,8 @@ test('_setupGeometryField', function () {
geomField: null,
lonField: 'lon',
latField: 'lat',
autoZoom: true
autoZoom: true,
cluster: false
};
deepEqual(view.state.toJSON(), exp);
deepEqual(view.menu.state.toJSON(), exp);
@@ -95,9 +93,6 @@ test('GeoJSON geom field', function () {
$('.fixtures').append(view.el);
view.render();
//Fire query, otherwise the map won't be initialized
dataset.query();
// Check that all features were created
equal(_getFeaturesCount(view.features),3);
@@ -135,6 +130,30 @@ test('_getGeometryFromRecord non-GeoJSON', function () {
});
});
test('many markers', function () {
var data = [];
for (var i = 0; i<1000; i++) {
data.push({ id: i, lon: 13+3*i, lat: 52+i/10});
}
var fields = [
{id: 'id'},
{id: 'lat'},
{id: 'lon'}
];
var dataset = new recline.Model.Dataset({records: data, fields: fields});
var view = new recline.View.Map({
model: dataset
});
$('.fixtures').append(view.el);
view.render();
dataset.query();
equal(view.state.get('cluster'), true);
view.remove();
});
test('Popup', function () {
var dataset = GeoJSONFixture.getDataset();
var view = new recline.View.Map({
@@ -143,9 +162,6 @@ test('Popup', function () {
$('.fixtures').append(view.el);
view.render();
//Fire query, otherwise the map won't be initialized
dataset.query();
var marker = view.el.find('.leaflet-marker-icon').first();
assertPresent(marker);
@@ -167,6 +183,30 @@ test('Popup', function () {
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({
@@ -178,7 +218,7 @@ test('MapMenu', function () {
var _getFeaturesCount = function(features){
var cnt = 0;
features._iterateLayers(function(layer){
_.each(features._layers, function(layer) {
cnt++;
});
return cnt;

View File

@@ -29,12 +29,32 @@ test('basics', function () {
equal(dataset.queryState.attributes.filters[0].term, 'UK');
equal(dataset.records.length, 3);
// now set a second range filter ...
view.el.find('.js-add-filter').click();
var $addForm = view.el.find('form.js-add');
$addForm.find('select.fields').val('x');
$addForm.find('select.filterType').val('range');
$addForm.submit();
$editForm = view.el.find('form.js-edit');
$editForm.find('.filter-range input').first().val('2');
$editForm.find('.filter-range input').last().val('4');
$editForm.submit();
equal(dataset.queryState.attributes.filters[1].start, 2);
equal(dataset.records.length, 2);
// now remove filter
$editForm.find('.js-remove-filter').click();
// hmmm, not working yet but works by eye!
// $editForm = view.el.find('form.js-edit');
// equal($editForm.find('.filter-term').length, 0)
// equal(dataset.records.length, 6);
$editForm = view.el.find('form.js-edit');
$editForm.find('.js-remove-filter').last().click();
$editForm = view.el.find('form.js-edit');
equal($editForm.find('.filter').length, 1)
equal(dataset.records.length, 3);
$editForm = view.el.find('form.js-edit');
$editForm.find('.js-remove-filter').last().click();
$editForm = view.el.find('form.js-edit');
equal($editForm.find('.filter').length, 0)
equal(dataset.records.length, 6);
view.remove();
});
@@ -56,7 +76,7 @@ test('geo_distance', function () {
$editForm = view.el.find('form.js-edit');
equal($editForm.find('.filter-geo_distance').length, 1)
deepEqual(_.sortBy(_.keys(dataset.queryState.attributes.filters[0]),_.identity),
["distance", "field", "fieldType", "point", "type", "unit"]);
["distance", "field", "point", "type", "unit"]);
// now set filter value and apply
$editForm.find('input[name="lat"]').val(10);