Files
cartodb/lib/assets/test/spec/dashboard/views/data-library/header/header-view.spec.js
2020-06-15 10:58:47 +08:00

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 });
});
});
});