Initial commit
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
var Backbone = require('backbone');
|
||||
var FormulaDataviewModel = require('../../../src/dataviews/formula-dataview-model.js');
|
||||
var MockFactory = require('../../helpers/mockFactory');
|
||||
var WindshaftFiltersBoundingBox = require('../../../src/windshaft/filters/bounding-box');
|
||||
var WindshaftFiltersCircle = require('../../../src/windshaft/filters/circle');
|
||||
var WindshaftFiltersPolygon = require('../../../src/windshaft/filters/polygon');
|
||||
var MapModelBoundingBoxAdapter = require('../../../src/geo/adapters/map-model-bounding-box-adapter');
|
||||
var createEngine = require('../fixtures/engine.fixture.js');
|
||||
|
||||
describe('dataviews/formula-dataview-model', function () {
|
||||
var engineMock;
|
||||
var apiKey = 'API_KEY';
|
||||
var apiKeyQueryParam = 'api_key=' + apiKey;
|
||||
|
||||
beforeEach(function () {
|
||||
this.map = new Backbone.Model();
|
||||
this.map.getViewBounds = jasmine.createSpy();
|
||||
engineMock = createEngine({ apiKey: apiKey });
|
||||
this.map.getViewBounds.and.returnValue([[1, 2], [3, 4]]);
|
||||
|
||||
this.layer = new Backbone.Model();
|
||||
|
||||
this.source = MockFactory.createAnalysisModel({ id: 'a0' });
|
||||
|
||||
this.model = new FormulaDataviewModel({
|
||||
source: this.source,
|
||||
operation: 'min'
|
||||
}, {
|
||||
map: this.map,
|
||||
engine: engineMock,
|
||||
layer: this.layer,
|
||||
bboxFilter: new WindshaftFiltersBoundingBox(new MapModelBoundingBoxAdapter(this.map))
|
||||
});
|
||||
});
|
||||
|
||||
it('should reload map and force fetch on operation change', function () {
|
||||
engineMock.reload.calls.reset();
|
||||
this.model.set('operation', 'avg');
|
||||
expect(engineMock.reload).toHaveBeenCalledWith({ forceFetch: true, sourceId: 'a0' });
|
||||
});
|
||||
|
||||
it('should reload map and force fetch on column change', function () {
|
||||
engineMock.reload.calls.reset();
|
||||
this.model.set('column', 'other_col');
|
||||
expect(engineMock.reload).toHaveBeenCalledWith({ forceFetch: true, sourceId: 'a0' });
|
||||
});
|
||||
|
||||
describe('.url', function () {
|
||||
it('should include the bbox parameter', function () {
|
||||
expect(this.model.set('url', 'http://example.com'));
|
||||
expect(this.model.url()).toEqual('http://example.com?bbox=2,1,4,3&' + apiKeyQueryParam);
|
||||
});
|
||||
|
||||
it('should include circle filter', function () {
|
||||
var filter = new WindshaftFiltersCircle();
|
||||
var circle = {lat: 1, lng: 2, radius: 3};
|
||||
filter.setCircle(circle);
|
||||
|
||||
this.model = new FormulaDataviewModel({
|
||||
source: this.source
|
||||
}, {
|
||||
engine: engineMock,
|
||||
circleFilter: filter
|
||||
});
|
||||
// DataviewModel defaults set this prop to true, even for cases like this not requiring passing a bbox filter
|
||||
this.model.set('sync_on_bbox_change', false);
|
||||
|
||||
var circleEncoded = encodeURIComponent(JSON.stringify(circle));
|
||||
expect(this.model.set('url', 'http://example.com'));
|
||||
expect(this.model.url()).toEqual('http://example.com?circle=' + circleEncoded + '&' + apiKeyQueryParam);
|
||||
});
|
||||
|
||||
it('should update circle filter', function () {
|
||||
var filter = new WindshaftFiltersCircle();
|
||||
var circle = {lat: 1, lng: 2, radius: 3};
|
||||
filter.setCircle(circle);
|
||||
|
||||
this.model = new FormulaDataviewModel({
|
||||
source: this.source
|
||||
}, {
|
||||
engine: engineMock,
|
||||
circleFilter: filter
|
||||
});
|
||||
// DataviewModel defaults set this prop to true, even for cases like this not requiring passing a bbox filter
|
||||
this.model.set('sync_on_bbox_change', false);
|
||||
|
||||
// updated!
|
||||
var updatedCircle = {lat: 10, lng: 20, radius: 30};
|
||||
filter.setCircle(updatedCircle);
|
||||
|
||||
var updatedCircleEncoded = encodeURIComponent(JSON.stringify(updatedCircle));
|
||||
expect(this.model.set('url', 'http://example.com'));
|
||||
expect(this.model.url()).toEqual('http://example.com?circle=' + updatedCircleEncoded + '&' + apiKeyQueryParam);
|
||||
});
|
||||
|
||||
it('should include polygon filter, plus other required params', function () {
|
||||
var filter = new WindshaftFiltersPolygon();
|
||||
var polygon = { type: 'Polygon', coordinates: [[1, 2], [3, 4], [5, 6], [1, 2]] };
|
||||
filter.setPolygon(polygon);
|
||||
|
||||
this.model = new FormulaDataviewModel({
|
||||
source: this.source
|
||||
}, {
|
||||
engine: engineMock,
|
||||
polygonFilter: filter
|
||||
});
|
||||
|
||||
// DataviewModel defaults set this prop to true, even for cases like this not requiring passing a bbox filter
|
||||
this.model.set('sync_on_bbox_change', false);
|
||||
|
||||
var polygonEncoded = encodeURIComponent(JSON.stringify(polygon));
|
||||
expect(this.model.set('url', 'http://example.com'));
|
||||
expect(this.model.url()).toEqual('http://example.com?polygon=' + polygonEncoded + '&' + apiKeyQueryParam);
|
||||
});
|
||||
|
||||
it('should update polygon filter', function () {
|
||||
var filter = new WindshaftFiltersPolygon();
|
||||
var polygon = { type: 'Polygon', coordinates: [[1, 2], [3, 4], [5, 6], [1, 2]] };
|
||||
filter.setPolygon(polygon);
|
||||
|
||||
this.model = new FormulaDataviewModel({
|
||||
source: this.source
|
||||
}, {
|
||||
engine: engineMock,
|
||||
polygonFilter: filter
|
||||
});
|
||||
// DataviewModel defaults set this prop to true, even for cases like this not requiring passing a bbox filter
|
||||
this.model.set('sync_on_bbox_change', false);
|
||||
|
||||
// updated!
|
||||
var updatedPolygon = { type: 'Polygon', coordinates: [[10, 20], [30, 40], [50, 60], [10, 20]] };
|
||||
|
||||
filter.setPolygon(updatedPolygon);
|
||||
|
||||
var updatedPolygonEncoded = encodeURIComponent(JSON.stringify(updatedPolygon));
|
||||
expect(this.model.set('url', 'http://example.com'));
|
||||
expect(this.model.url()).toEqual('http://example.com?polygon=' + updatedPolygonEncoded + '&' + apiKeyQueryParam);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user