103 lines
2.7 KiB
JavaScript
103 lines
2.7 KiB
JavaScript
const Backbone = require('backbone');
|
|
const L = require('leaflet');
|
|
const $ = require('jquery');
|
|
const HeaderView = require('dashboard/views/data-library/header/header-view');
|
|
|
|
const configModel = require('fixtures/dashboard/config-model.fixture');
|
|
|
|
describe('dashboard/views/data-library/header/header-view', function () {
|
|
let view, collection, model;
|
|
|
|
const createViewFn = function (options) {
|
|
collection = new Backbone.Collection({});
|
|
collection.options = new Backbone.Model({
|
|
page: 5,
|
|
tags: ['rick', 'morty'],
|
|
q: '',
|
|
type: 'map'
|
|
});
|
|
|
|
model = new Backbone.Model({
|
|
show_countries: false
|
|
});
|
|
|
|
spyOn(L, 'geoJson').and.callThrough();
|
|
|
|
const viewOptions = Object.assign({}, { collection, model, configModel }, options);
|
|
const view = new HeaderView(viewOptions);
|
|
|
|
return view;
|
|
};
|
|
|
|
afterEach(function () {
|
|
view && view.clean();
|
|
});
|
|
|
|
it('throws an error when configModel is missing', function () {
|
|
const viewFactory = function () {
|
|
return createViewFn({
|
|
configModel: undefined
|
|
});
|
|
};
|
|
|
|
expect(viewFactory).toThrowError('configModel is required');
|
|
});
|
|
|
|
describe('.load', function () {
|
|
let responseData = { type: 'FeatureCollection', features: [] };
|
|
|
|
beforeEach(function () {
|
|
view = createViewFn();
|
|
view.render();
|
|
|
|
const done = callback => callback(responseData);
|
|
spyOn(view, '_addGeojsonData');
|
|
spyOn($, 'getJSON').and.returnValue({ done });
|
|
|
|
view.load();
|
|
});
|
|
|
|
it('should create a leaflet map', function () {
|
|
expect(view.map).toBeDefined();
|
|
expect(view.map.options.zoomControl).toBe(false);
|
|
expect(view.map.options.attributionControl).toBe(false);
|
|
expect(view.map.getZoom()).toBe(3);
|
|
expect(view.map.getCenter().lat).toBe(44);
|
|
expect(view.map.getCenter().lng).toBe(-31);
|
|
});
|
|
|
|
it('should get a geojson', function () {
|
|
const url = 'http://rick.wadus.com/api/v2/sql?q=select%20*%20from%20world_borders&format=geojson&filename=world_borders';
|
|
|
|
expect($.getJSON).toHaveBeenCalledWith(url);
|
|
});
|
|
|
|
it('should call _addGeojsonData', function () {
|
|
expect(view._addGeojsonData).toHaveBeenCalledWith(responseData);
|
|
});
|
|
});
|
|
|
|
describe('._addGeojsonData', function () {
|
|
beforeEach(function () {
|
|
view = createViewFn();
|
|
view.render();
|
|
view.load();
|
|
});
|
|
|
|
it('should set the geoJson in leaflet', function () {
|
|
const data = { type: 'FeatureCollection', features: [] };
|
|
const style = {
|
|
color: '#2E3C43',
|
|
weight: 1,
|
|
opacity: 1,
|
|
fillColor: '#242D32',
|
|
fillOpacity: 1
|
|
};
|
|
|
|
view._addGeojsonData(data);
|
|
|
|
expect(L.geoJson).toHaveBeenCalledWith(data, { style });
|
|
});
|
|
});
|
|
});
|