Fix and add tests

leapfrog-di-typescript
rubenmoya 7 years ago
parent 244af38f1d
commit 2ec48c7291

@ -10,11 +10,19 @@ describe('cartodb3/data/widget-definition-model', 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',
@ -33,11 +41,6 @@ describe('cartodb3/data/widget-definition-model', function () {
mapId: 'm-123',
collection: this.collection
});
this.analysisDefinitionNodesCollection = new AnalysisDefinitionNodesCollection(null, {
configModel: {},
userModel: {}
});
});
it('should have a url pointing to layers API endpoint', function () {

@ -0,0 +1,179 @@
var Backbone = require('backbone');
var ConfigModel = require('../../../../../../../javascripts/cartodb3/data/config-model');
var QuerySchemaModel = require('../../../../../../../javascripts/cartodb3/data/query-schema-model');
var WidgetsFormColumnOptionsFactory = require('../../../../../../../javascripts/cartodb3/editor/widgets/widgets-form/widgets-form-column-options-factory');
var WidgetsFormTimeSeriesSchemaModel = require('../../../../../../../javascripts/cartodb3/editor/widgets/widgets-form/schema/widgets-form-time-series-schema-model');
var FactoryModals = require('../../../../factories/modals');
describe('editor/widgets/widgets-form/schema/widgets-form-time-series-schema-model', function () {
beforeEach(function () {
var userModel = {
featureEnabled: function () {
return true;
}
};
var configModel = new ConfigModel({
user_name: 'pepe'
});
this.querySchemaModel = new QuerySchemaModel({
query: 'SELECT * FROM foobar',
status: 'fetched'
}, {
configModel: configModel
});
this.querySchemaModel.columnsCollection.reset([
{ name: 'cartodb_id', type: 'number' },
{ name: 'created_at', type: 'date' }
]);
this.widgetsFormColumnOptionsFactory = new WidgetsFormColumnOptionsFactory(this.querySchemaModel);
spyOn(this.widgetsFormColumnOptionsFactory, 'create').and.returnValue([{
val: 'col',
label: 'col',
type: 'number'
}, {
val: 'col2',
label: 'col2',
type: 'string'
}]);
this.modals = FactoryModals.createModalService();
this.model = new WidgetsFormTimeSeriesSchemaModel({
type: 'time-series',
column: 'cartodb_id'
}, {
columnOptionsFactory: this.widgetsFormColumnOptionsFactory,
querySchemaModel: this.querySchemaModel,
userModel: userModel,
configModel: configModel,
modals: this.modals
});
});
it('should call ._onColumnChanged when column changes', function () {
spyOn(this.model, 'updateSchema');
this.model._initBinds();
this.model._timeSeriesQueryModel.trigger('change:buckets');
expect(this.model.updateSchema).toHaveBeenCalled();
});
it('should call .updateSchema when _timeSeriesQueryModel buckets change', function () {
spyOn(this.model, '_onColumnChanged');
this.model._initBinds();
});
describe('.updateSchema', function () {
beforeEach(function () {
spyOn(this.model._querySchemaModel, 'isFetched').and.returnValue(true);
});
it('always have column and widget_style_definition', function () {
this.model.updateSchema();
expect(this.model.schema.column).toBeDefined();
expect(this.model.schema.widget_style_definition).toBeDefined();
});
it('should have aggregation if column is type date', function () {
spyOn(this.model, '_getColumnType').and.returnValue('date');
this.model.updateSchema();
expect(this.model.schema.aggregation).toBeDefined();
expect(this.model.schema.bins).not.toBeDefined();
});
it('should have bins if column is not type date', function () {
this.model.updateSchema();
expect(this.model.schema.bins).toBeDefined();
expect(this.model.schema.aggregation).not.toBeDefined();
});
});
describe('.getFields', function () {
it('should return column', function () {
var fields = this.model.getFields();
expect(fields.data).toContain('column');
});
it('should return aggregation if column type is date', function () {
spyOn(this.model, '_getColumnType').and.returnValue('date');
var fields = this.model.getFields();
expect(fields.data).toContain('aggregation');
expect(fields.data).not.toContain('bins');
});
it('should return aggregation if column type is date', function () {
var fields = this.model.getFields();
expect(fields.data).toContain('bins');
expect(fields.data).not.toContain('aggregation');
});
it('should return sync_on_bbox_change', function () {
var fields = this.model.getFields();
expect(fields.style).toContain('sync_on_bbox_change');
});
it('should return widget_style_definition', function () {
var fields = this.model.getFields();
expect(fields.style).toContain('widget_style_definition');
});
});
describe('._isDateType', function () {
it('should return true if type is date', function () {
var model = new Backbone.Model({ type: 'number' });
expect(this.model._isDateType(model)).toBe(false);
model.set('type', 'date');
expect(this.model._isDateType(model)).toBe(true);
});
});
describe('._isNumberType', function () {
it('should return true if type is number', function () {
var model = new Backbone.Model({ type: 'date' });
expect(this.model._isNumberType(model)).toBe(false);
model.set('type', 'number');
expect(this.model._isNumberType(model)).toBe(true);
});
});
describe('._isNumberOrDateType', function () {
it('should return true if type is number', function () {
var model = new Backbone.Model({ type: 'string' });
expect(this.model._isNumberOrDateType(model)).toBe(false);
model.set('type', 'number');
expect(this.model._isNumberOrDateType(model)).toBe(true);
model.set('type', 'date');
expect(this.model._isNumberOrDateType(model)).toBe(true);
});
});
describe('._filterAttributesForWidgetDefinition', function () {
it('should set bins to undefined if column type is date', function () {
spyOn(this.model, '_getColumnType').and.returnValue('date');
this.model.set('bins', 100);
var attrs = this.model._filterAttributesForWidgetDefinition();
expect(attrs.bins).toBeUndefined();
});
it('should set aggregation to undefined if column type is not date', function () {
spyOn(this.model, '_getColumnType').and.returnValue('number');
this.model.set('aggregation', 'month');
var attrs = this.model._filterAttributesForWidgetDefinition();
expect(attrs.aggregation).toBeUndefined();
});
});
describe('._getColumnType', function () {
it('should return the column type', function () {
this.model.set('column', 'cartodb_id');
expect(this.model._getColumnType()).toEqual('number');
});
});
});

@ -14,7 +14,8 @@ describe('editor/widgets/widgets-form/widgets-form-factory', function () {
beforeEach(function () {
this.configModel = new ConfigModel({
base_url: '/u/pepe'
base_url: '/u/pepe',
user_name: 'pepe'
});
this.querySchemaModel = new QuerySchemaModel({
query: 'SELECT * FROM foobar'

@ -36,6 +36,9 @@ describe('editor/widgets/widgets-form/widgets-form-fields-view', function () {
userModel: {},
modals: {}
});
spyOn(this.view, 'render').and.callThrough();
this.view.render();
});
@ -48,4 +51,15 @@ describe('editor/widgets/widgets-form/widgets-form-fields-view', function () {
expect(this.view._widgetFormView.validate).toHaveBeenCalled();
});
});
it('should call .render if _widgetFormModel change:column, change:aggregation or changeSchema is triggered', function () {
this.view._widgetFormModel.trigger('change:column');
expect(this.view.render).toHaveBeenCalled();
this.view._widgetFormModel.trigger('change:aggregation');
expect(this.view.render).toHaveBeenCalled();
this.view._widgetFormModel.trigger('changeSchema');
expect(this.view.render).toHaveBeenCalled();
});
});

Loading…
Cancel
Save