[#111,filter/geo][m]: geo filter support - filter editor working though not sure actual query is working (!).

* Extensive refactoring of Model.Query and View.FilterEditor to do this cleanly (geo_distance and term treated similarly now)
This commit is contained in:
Rufus Pollock
2012-06-15 10:51:13 +01:00
parent 952c85a912
commit 8fe04ddd4f
5 changed files with 160 additions and 35 deletions

View File

@@ -150,6 +150,33 @@ test('Query', function () {
});
test('Query.addFilter', function () {
var query = new recline.Model.Query();
query.addFilter('term', 'xyz');
var exp = {
term: {
xyz: '',
_field: 'xyz',
_type: 'term'
}
};
deepEqual(exp, query.get('filters')[0]);
query.addFilter('geo_distance', 'xyz');
var exp = {
geo_distance: {
distance: '10km',
xyz: {
lon: 0,
lat: 0
},
_field: 'xyz',
_type: 'geo_distance'
}
};
deepEqual(exp, query.get('filters')[1]);
});
test('Query.addTermFilter', function () {
var query = new recline.Model.Query();
query.addTermFilter('xyz', 'this-value');
deepEqual({term: {xyz: 'this-value'}}, query.get('filters')[0]);

View File

@@ -39,3 +39,28 @@ test('basics', function () {
view.remove();
});
test('geo_distance', function () {
var dataset = Fixture.getDataset();
var view = new recline.View.FilterEditor({
model: dataset
});
$('.fixtures').append(view.el);
var $addForm = view.el.find('form.js-add');
// submit the form
$addForm.find('select.filterType').val('geo_distance');
$addForm.find('select.fields').val('lon');
$addForm.submit();
// now check we have new filter
$editForm = view.el.find('form.js-edit');
equal($editForm.find('.filter-geo_distance').length, 1)
deepEqual(_.keys(dataset.queryState.attributes.filters[0].geo_distance), ['distance', 'lon', '_type', '_field']);
// now set filter value and apply
$editForm.find('input[name="lat"]').val(10);
$editForm.submit();
equal(dataset.queryState.attributes.filters[0].geo_distance.lon.lat, 10);
view.remove();
});