Initial commit
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
var Backbone = require('backbone');
|
||||
var ConfigModel = require('builder/data/config-model');
|
||||
var AnalysisDefinitionNodesCollection = require('builder/data/analysis-definition-nodes-collection');
|
||||
var WidgetDefinitionModel = require('builder/data/widget-definition-model');
|
||||
var WidgetDefinitionsCollection = require('builder/data/widget-definitions-collection');
|
||||
var configModel;
|
||||
|
||||
describe('builder/data/widget-definition-model', function () {
|
||||
beforeEach(function () {
|
||||
configModel = new ConfigModel({
|
||||
base_url: '/u/pepe'
|
||||
});
|
||||
|
||||
this.analysisDefinitionNodesCollection = new AnalysisDefinitionNodesCollection(null, {
|
||||
configModel: {},
|
||||
userModel: {}
|
||||
});
|
||||
|
||||
this.collection = new WidgetDefinitionsCollection(null, {
|
||||
configModel: configModel,
|
||||
mapId: 'm-123',
|
||||
analysisDefinitionNodesCollection: this.analysisDefinitionNodesCollection,
|
||||
layerDefinitionsCollection: new Backbone.Collection()
|
||||
});
|
||||
|
||||
this.widgetDefModel = new WidgetDefinitionModel({
|
||||
id: 'w-456',
|
||||
title: 'some title',
|
||||
type: 'formula',
|
||||
layer_id: 'l-1',
|
||||
source: {
|
||||
id: 'a0'
|
||||
},
|
||||
options: {
|
||||
column: 'hello',
|
||||
operation: 'avg'
|
||||
}
|
||||
}, {
|
||||
parse: true,
|
||||
configModel: configModel,
|
||||
mapId: 'm-123',
|
||||
collection: this.collection
|
||||
});
|
||||
});
|
||||
|
||||
it('should have a url pointing to layers API endpoint', function () {
|
||||
expect(this.widgetDefModel.url()).toEqual('/u/pepe/api/v3/maps/m-123/layers/l-1/widgets/w-456');
|
||||
|
||||
// when no id:
|
||||
this.widgetDefModel.set('id', null);
|
||||
expect(this.widgetDefModel.url()).toEqual('/u/pepe/api/v3/maps/m-123/layers/l-1/widgets');
|
||||
});
|
||||
|
||||
it('should flatten the structure on parse', function () {
|
||||
expect(this.widgetDefModel.attributes).toEqual(
|
||||
jasmine.objectContaining({
|
||||
id: 'w-456',
|
||||
title: 'some title',
|
||||
type: 'formula',
|
||||
layer_id: 'l-1',
|
||||
source: 'a0',
|
||||
column: 'hello',
|
||||
operation: 'avg',
|
||||
widget_style_definition: {
|
||||
color: {
|
||||
fixed: '#9DE0AD',
|
||||
opacity: 1
|
||||
}
|
||||
},
|
||||
widget_color_changed: false
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
it('should set some defaults in addition to the provided data', function () {
|
||||
expect(this.widgetDefModel.attributes).toEqual(
|
||||
jasmine.objectContaining({
|
||||
sync_on_bbox_change: true,
|
||||
auto_style_allowed: true
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
describe('.toJSON', function () {
|
||||
beforeEach(function () {
|
||||
this.d = this.widgetDefModel.toJSON();
|
||||
});
|
||||
|
||||
it('should include expected attrs', function () {
|
||||
expect(this.d).toEqual({
|
||||
id: 'w-456',
|
||||
type: 'formula',
|
||||
title: 'some title',
|
||||
layer_id: 'l-1',
|
||||
source: {
|
||||
id: 'a0'
|
||||
},
|
||||
style: {
|
||||
widget_style: {
|
||||
definition: {
|
||||
color: {
|
||||
fixed: '#9DE0AD',
|
||||
opacity: 1
|
||||
}
|
||||
},
|
||||
widget_color_changed: false
|
||||
},
|
||||
auto_style: {
|
||||
custom: false,
|
||||
allowed: true
|
||||
}
|
||||
},
|
||||
options: {
|
||||
column: 'hello',
|
||||
operation: 'avg',
|
||||
sync_on_bbox_change: true
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('.changeType', function () {
|
||||
beforeEach(function () {
|
||||
this.widgetDefModel.changeType('category');
|
||||
});
|
||||
|
||||
it('should keep some attrs', function () {
|
||||
expect(this.widgetDefModel.id).toEqual('w-456');
|
||||
expect(this.widgetDefModel.get('id')).toEqual('w-456');
|
||||
expect(this.widgetDefModel.get('layer_id')).toEqual('l-1');
|
||||
expect(this.widgetDefModel.get('sync_on_bbox_change')).toBe(true);
|
||||
expect(this.widgetDefModel.get('auto_style_allowed')).toBe(true);
|
||||
expect(this.widgetDefModel.get('title')).toEqual('some title');
|
||||
expect(this.widgetDefModel.get('widget_style_definition')).toEqual({
|
||||
color: {
|
||||
fixed: '#9DE0AD',
|
||||
opacity: 1
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should have new relevant attrs', function () {
|
||||
expect(this.widgetDefModel.get('type')).toEqual('category');
|
||||
expect(this.widgetDefModel.get('column')).toEqual('hello');
|
||||
expect(this.widgetDefModel.get('aggregation')).toEqual('count');
|
||||
expect(this.widgetDefModel.get('aggregation_column')).toEqual('hello');
|
||||
});
|
||||
|
||||
it('should remove attrs of no interest anymore', function () {
|
||||
expect(this.widgetDefModel.get('operation')).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('.containsNode', function () {
|
||||
beforeEach(function () {
|
||||
this.analysisDefinitionNodesCollection.add([
|
||||
{
|
||||
id: 'a1',
|
||||
type: 'buffer',
|
||||
params: {
|
||||
radius: 100,
|
||||
source: {
|
||||
id: 'a0',
|
||||
type: 'source',
|
||||
params: {
|
||||
query: 'SELECT * FROM something'
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
id: 'b0',
|
||||
type: 'source',
|
||||
params: {
|
||||
query: 'SELECT * FROM other'
|
||||
}
|
||||
}
|
||||
]);
|
||||
this.a1 = this.analysisDefinitionNodesCollection.get('a1');
|
||||
this.a0 = this.analysisDefinitionNodesCollection.get('a0');
|
||||
this.widgetDefModel.set('source', 'a1');
|
||||
});
|
||||
|
||||
it('should return true if widget depends on given node', function () {
|
||||
expect(this.widgetDefModel.containsNode(this.a1)).toBe(true);
|
||||
expect(this.widgetDefModel.containsNode(this.a0)).toBe(true);
|
||||
|
||||
expect(this.widgetDefModel.containsNode(this.b0)).toBe(false);
|
||||
expect(this.widgetDefModel.containsNode()).toBe(false);
|
||||
expect(this.widgetDefModel.containsNode(false)).toBe(false);
|
||||
});
|
||||
|
||||
it('should return false if widget source does not exist', function () {
|
||||
this.widgetDefModel.set('source', 'y404');
|
||||
expect(this.widgetDefModel.containsNode(this.a1)).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user