134 lines
6.1 KiB
JavaScript
134 lines
6.1 KiB
JavaScript
var Backbone = require('backbone');
|
|
var Dashboard = require('../../../../javascripts/deep-insights/api/dashboard');
|
|
var DashboardView = require('../../../../javascripts/deep-insights/dashboard-view');
|
|
var URLHelper = require('../../../../javascripts/deep-insights/api/url-helper');
|
|
var cdb = require('internal-carto.js');
|
|
|
|
describe('api/dashboard', function () {
|
|
beforeEach(function () {
|
|
spyOn(Dashboard.prototype, 'onDataviewsFetched').and.callThrough();
|
|
var widgetsCollection = new Backbone.Collection();
|
|
widgetsCollection.hasInitialState = function () {};
|
|
widgetsCollection.initialState = function () {};
|
|
var widgets = {
|
|
_widgetsCollection: widgetsCollection
|
|
};
|
|
var dashboardParameter = new Backbone.Model();
|
|
dashboardParameter.widgets = widgets;
|
|
dashboardParameter.vis = new Backbone.Model();
|
|
dashboardParameter.vis.map = new Backbone.Model({
|
|
zoom: 5,
|
|
center: [24.4, 43.7]
|
|
});
|
|
dashboardParameter.areWidgetsInitialised = function () {};
|
|
|
|
this.dashboard = new Dashboard(dashboardParameter);
|
|
});
|
|
|
|
it('should add bind when dataviews are fetched', function () {
|
|
expect(Dashboard.prototype.onDataviewsFetched).toHaveBeenCalled();
|
|
});
|
|
|
|
describe('onDataviewsFetched', function () {
|
|
it('should trigger the callback if widgets are initialized', function () {
|
|
spyOn(this.dashboard._dashboard, 'areWidgetsInitialised').and.returnValue(true);
|
|
var callback = jasmine.createSpy('callback');
|
|
this.dashboard.onDataviewsFetched(callback);
|
|
expect(callback).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should trigger the callback when dataviews are fetched if widgets are not initialized yet', function () {
|
|
spyOn(this.dashboard._dashboard, 'areWidgetsInitialised').and.returnValue(false);
|
|
var callback = jasmine.createSpy('callback');
|
|
this.dashboard.onDataviewsFetched(callback);
|
|
expect(callback).not.toHaveBeenCalled();
|
|
this.dashboard._dashboard.vis.trigger('dataviewsFetched');
|
|
expect(callback).toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('onStateChanged', function () {
|
|
it('should call onDataviewsFetched function with the proper callback', function () {
|
|
var callback = jasmine.createSpy('callback');
|
|
this.dashboard.onStateChanged(callback);
|
|
expect(this.dashboard.onDataviewsFetched).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should call _bindChange function with all dataviews are fetched', function () {
|
|
spyOn(this.dashboard, '_bindChange');
|
|
Dashboard.prototype.onDataviewsFetched.and.callFake(function (callback) {
|
|
callback();
|
|
});
|
|
var callback = jasmine.createSpy('callback');
|
|
this.dashboard.onStateChanged(callback);
|
|
expect(this.dashboard._bindChange).toHaveBeenCalledWith(callback);
|
|
});
|
|
});
|
|
|
|
it('should not return state query if there aren\'t new states', function () {
|
|
spyOn(this.dashboard, 'getState').and.returnValue({});
|
|
spyOn(URLHelper, 'getLocalURL').and.returnValue('https://manolo.com/');
|
|
expect(this.dashboard.getDashboardURL()).toEqual('https://manolo.com/');
|
|
});
|
|
|
|
it('should return state query if there are states', function () {
|
|
spyOn(this.dashboard, 'getState').and.returnValue({1: {pinned: true}});
|
|
spyOn(URLHelper, 'getLocalURL').and.returnValue('https://manolo.com/');
|
|
expect(this.dashboard.getDashboardURL().indexOf('https://manolo.com/')).not.toBeLessThan(0);
|
|
});
|
|
|
|
it('url should resolve to correct state', function () {
|
|
var url = 'http://localhost:9002/examples/populated-places-vector.html?state=%257B%25221%2522%253A%257B%2522collapsed%2522%253Atrue%257D%252C%25223%2522%253A%257B%2522collapsed%2522%253Atrue%257D%252C%25225%2522%253A%257B%2522autoStyle%2522%253Atrue%257D%257D';
|
|
spyOn(URLHelper, 'getLocalURL').and.returnValue(url);
|
|
var correctState = { 1: { collapsed: true }, 3: { collapsed: true }, 5: { autoStyle: true } };
|
|
expect(URLHelper.getStateFromCurrentURL()).toEqual(correctState);
|
|
});
|
|
|
|
it('url should resolve to empty state if state query is empty', function () {
|
|
var url = 'http://localhost:9002/examples/populated-places-vector.html?state=';
|
|
spyOn(URLHelper, 'getLocalURL').and.returnValue(url);
|
|
expect(URLHelper.getStateFromCurrentURL()).toEqual({});
|
|
});
|
|
|
|
it('url should resolve to empty state if state query is null', function () {
|
|
var url = 'http://localhost:9002/examples/populated-places-vector.html?state';
|
|
spyOn(URLHelper, 'getLocalURL').and.returnValue(url);
|
|
expect(URLHelper.getStateFromCurrentURL()).toEqual({});
|
|
});
|
|
|
|
it('url should work with bounding box', function () {
|
|
var url = 'http://localhost:9002/examples/populated-places-vector.html?state=%7B%22map%22%3A%7B%22ne%22%3A%5B-22.91792293614603%2C-205.83984375%5D%2C%22sw%22%3A%5B77.8418477505252%2C10.8984375%5D%7D%2C%22widgets%22%3A%7B%22a7b718f0-23db-4b4c-a52f-d38aeab268c0%22%3A%7B%22acceptedCategories%22%3A%5B%22Populated+place%22%5D%7D%2C%22060ba59d-2e0e-46f9-9735-b9c107930f99%22%3A%7B%22normalized%22%3Atrue%2C%22min%22%3A1189104.3%2C%22max%22%3A5945917.5%7D%7D%7D';
|
|
spyOn(URLHelper, 'getLocalURL').and.returnValue(url);
|
|
expect(URLHelper.getStateFromURL(url).map).toEqual({
|
|
ne: [-22.91792293614603, -205.83984375],
|
|
sw: [77.8418477505252, 10.8984375]
|
|
});
|
|
});
|
|
|
|
it('should return dashboard view', function () {
|
|
var view = new DashboardView({
|
|
widgets: new Backbone.Collection(),
|
|
model: new cdb.core.Model({
|
|
renderMenu: true
|
|
})
|
|
});
|
|
spyOn(this.dashboard, 'getView').and.returnValue(view);
|
|
expect(this.dashboard.getView().render().el).toBeDefined();
|
|
expect(this.dashboard.getView().render().$('.js-map-wrapper').length).toBe(1);
|
|
});
|
|
|
|
it('state should return zoom and center', function () {
|
|
this.dashboard._dashboard.vis.map.getViewBounds = function () {
|
|
return [[-22.91792293614603, -205.83984375], [77.8418477505252, 10.8984375]];
|
|
};
|
|
|
|
var state = this.dashboard.getMapState();
|
|
expect(state.zoom).toBeDefined();
|
|
expect(state.center).toBeDefined();
|
|
expect(state.ne).toBeDefined();
|
|
expect(state.sw).toBeDefined();
|
|
expect(state.zoom).toBe(5);
|
|
expect(state.center).toEqual([24.4, 43.7]);
|
|
});
|
|
});
|