|
|
|
@ -18,6 +18,7 @@ describe('editor/layers/layers-content-view/data/data-content-view', function ()
|
|
|
|
|
var normalizeTSColumnSpy;
|
|
|
|
|
var renderSpy;
|
|
|
|
|
var isErroredSpy;
|
|
|
|
|
var widgetDefinitionsCollection;
|
|
|
|
|
|
|
|
|
|
var createViewFn = function (options) {
|
|
|
|
|
var configModel = new ConfigModel({
|
|
|
|
@ -52,7 +53,7 @@ describe('editor/layers/layers-content-view/data/data-content-view', function ()
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var analysisDefinitionNodeModel = new Backbone.Model();
|
|
|
|
|
var analysisDefinitionNodeModel = new Backbone.Model({});
|
|
|
|
|
analysisDefinitionNodeModel.querySchemaModel = querySchemaModel;
|
|
|
|
|
analysisDefinitionNodeModel.queryGeometryModel = queryGeometryModel;
|
|
|
|
|
|
|
|
|
@ -61,13 +62,14 @@ describe('editor/layers/layers-content-view/data/data-content-view', function ()
|
|
|
|
|
return analysisDefinitionNodeModel;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var widgetDefinitionsCollection = new Backbone.Collection([
|
|
|
|
|
{
|
|
|
|
|
type: 'category',
|
|
|
|
|
source: 'a0',
|
|
|
|
|
column: 'city'
|
|
|
|
|
widgetDefinitionsCollection = new Backbone.Collection([{
|
|
|
|
|
type: 'category',
|
|
|
|
|
source: 'a0',
|
|
|
|
|
column: 'city',
|
|
|
|
|
analysisDefinitionNodeModel: function () {
|
|
|
|
|
return new Backbone.Model({id: 'a0'});
|
|
|
|
|
}
|
|
|
|
|
]);
|
|
|
|
|
}]);
|
|
|
|
|
|
|
|
|
|
var columnModel = new Backbone.Model({
|
|
|
|
|
columns: 3
|
|
|
|
@ -112,7 +114,10 @@ describe('editor/layers/layers-content-view/data/data-content-view', function ()
|
|
|
|
|
|
|
|
|
|
var userActions = {
|
|
|
|
|
saveWidgetOption: function () {
|
|
|
|
|
return {id: 'w1'};
|
|
|
|
|
return Promise.resolve({id: 'w1'});
|
|
|
|
|
},
|
|
|
|
|
updateWidgetsOrder: function () {
|
|
|
|
|
return Promise.resolve({});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -290,23 +295,179 @@ describe('editor/layers/layers-content-view/data/data-content-view', function ()
|
|
|
|
|
expect(view.$('.js-apply').hasClass('.CDB-Size-small')).toBeFalsy();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should manage time-series properly', function () {
|
|
|
|
|
renderSpy.and.callThrough();
|
|
|
|
|
handleWidgetSpy.and.callThrough();
|
|
|
|
|
normalizeTSColumnSpy.and.callThrough();
|
|
|
|
|
describe('._handleWidget', function () {
|
|
|
|
|
var saveWidgetOptionSpy;
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
beforeEach(function () {
|
|
|
|
|
renderSpy.and.callThrough();
|
|
|
|
|
handleWidgetSpy.and.callThrough();
|
|
|
|
|
saveWidgetOptionSpy = spyOn(view._userActions, 'saveWidgetOption')
|
|
|
|
|
.and.returnValue(Promise.resolve(view._columnsCollection.at(1)));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should be called when a widget selected state is changed', function () {
|
|
|
|
|
view.render();
|
|
|
|
|
|
|
|
|
|
view._columnsCollection.at(1).set({ selected: true });
|
|
|
|
|
|
|
|
|
|
view._columnsModel.set({ render: true });
|
|
|
|
|
expect(view._renderStats).toHaveBeenCalled();
|
|
|
|
|
expect(view._handleWidget).toHaveBeenCalled();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should call add a new widget if the model is selected', function () {
|
|
|
|
|
spyOn(view, '_addWidget');
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
|
|
|
|
|
view._columnsCollection.at(1).set({ selected: true });
|
|
|
|
|
expect(view._handleWidget).toHaveBeenCalled();
|
|
|
|
|
view._columnsCollection.at(1).set({ selected: true });
|
|
|
|
|
view._handleWidget(view._columnsCollection.at(1));
|
|
|
|
|
|
|
|
|
|
view._columnsCollection.at(2).set({ selected: true });
|
|
|
|
|
expect(view._columnsCollection.at(2).get('widget')).toBeTruthy();
|
|
|
|
|
expect(view._normalizeTimeSeriesColumn).toHaveBeenCalled();
|
|
|
|
|
expect(view._columnsCollection.at(1).get('selected')).toBe(false);
|
|
|
|
|
expect(view._columnsCollection.at(1).get('widget')).toBeFalsy();
|
|
|
|
|
expect(view._addWidget).toHaveBeenCalledWith(view._columnsCollection.at(1));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should destroy the widget if the model is selected', function () {
|
|
|
|
|
spyOn(view, '_destroyWidget');
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
|
|
|
|
|
view._handleWidget(view._columnsCollection.at(1));
|
|
|
|
|
|
|
|
|
|
expect(view._handleWidget).toHaveBeenCalled();
|
|
|
|
|
expect(view._destroyWidget).toHaveBeenCalledWith(view._columnsCollection.at(1));
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('._addWidget', function () {
|
|
|
|
|
var saveWidgetOptionSpy;
|
|
|
|
|
|
|
|
|
|
beforeEach(function () {
|
|
|
|
|
renderSpy.and.callThrough();
|
|
|
|
|
handleWidgetSpy.and.callThrough();
|
|
|
|
|
saveWidgetOptionSpy = spyOn(view._userActions, 'saveWidgetOption')
|
|
|
|
|
.and
|
|
|
|
|
.returnValue(Promise.resolve(view._columnsCollection.at(0)));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should set the widget if the model exists', function () {
|
|
|
|
|
var existingModel = widgetDefinitionsCollection.at(0);
|
|
|
|
|
var model = view._columnsCollection.at(0);
|
|
|
|
|
spyOn(view._columnsModel, 'findWidget').and.returnValue(existingModel);
|
|
|
|
|
spyOn(model, 'set').and.callThrough();
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
|
|
|
|
|
view._addWidget(model);
|
|
|
|
|
expect(model.set).toHaveBeenCalled();
|
|
|
|
|
expect(model.get('widget')).toEqual(existingModel);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should call saveWidget if the model does not exist', function () {
|
|
|
|
|
var newModel = new Backbone.Model();
|
|
|
|
|
spyOn(view, '_saveWidget');
|
|
|
|
|
view.render();
|
|
|
|
|
view._columnsModel.set({ render: true });
|
|
|
|
|
|
|
|
|
|
view._saveWidget(newModel);
|
|
|
|
|
expect(view._saveWidget).toHaveBeenCalledWith(newModel);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('._saveWidget', function () {
|
|
|
|
|
var newModel;
|
|
|
|
|
|
|
|
|
|
beforeEach(function () {
|
|
|
|
|
newModel = new Backbone.Model({});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should call saveWidgetOption', function (done) {
|
|
|
|
|
spyOn(view._userActions, 'saveWidgetOption')
|
|
|
|
|
.and
|
|
|
|
|
.returnValue(Promise.resolve(view._columnsCollection.at(0)));
|
|
|
|
|
|
|
|
|
|
spyOn(newModel, 'set');
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
view._saveWidget(newModel);
|
|
|
|
|
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
expect(view._userActions.saveWidgetOption).toHaveBeenCalledWith(newModel);
|
|
|
|
|
expect(newModel.set).toHaveBeenCalled();
|
|
|
|
|
done();
|
|
|
|
|
}, 200);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should call updateWidgetsOrder if the new widget model is created', function (done) {
|
|
|
|
|
var newModel = new Backbone.Model({});
|
|
|
|
|
spyOn(view._userActions, 'saveWidgetOption')
|
|
|
|
|
.and
|
|
|
|
|
.returnValue(Promise.resolve(newModel));
|
|
|
|
|
|
|
|
|
|
spyOn(view._userActions, 'updateWidgetsOrder');
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
view._saveWidget(newModel);
|
|
|
|
|
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
expect(view._userActions.updateWidgetsOrder).toHaveBeenCalled();
|
|
|
|
|
done();
|
|
|
|
|
}, 200);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should render again if both the creation and the update work', function (done) {
|
|
|
|
|
spyOn(view._userActions, 'saveWidgetOption')
|
|
|
|
|
.and
|
|
|
|
|
.returnValue(Promise.resolve(newModel));
|
|
|
|
|
|
|
|
|
|
spyOn(view._userActions, 'updateWidgetsOrder')
|
|
|
|
|
.and
|
|
|
|
|
.returnValue(Promise.resolve({}));
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
view._saveWidget(newModel);
|
|
|
|
|
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
expect(view.render).toHaveBeenCalledTimes(2);
|
|
|
|
|
done();
|
|
|
|
|
}, 200);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should manage time-series properly', function (done) {
|
|
|
|
|
spyOn(view._userActions, 'saveWidgetOption')
|
|
|
|
|
.and
|
|
|
|
|
.returnValue(Promise.resolve(view._columnsCollection.at(2)));
|
|
|
|
|
|
|
|
|
|
renderSpy.and.callThrough();
|
|
|
|
|
handleWidgetSpy.and.callThrough();
|
|
|
|
|
normalizeTSColumnSpy.and.callThrough();
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
|
|
|
|
|
view._columnsModel.set({ render: true });
|
|
|
|
|
expect(view._renderStats).toHaveBeenCalled();
|
|
|
|
|
|
|
|
|
|
view._columnsCollection.at(2).set({ selected: true });
|
|
|
|
|
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
expect(view._columnsCollection.at(2).get('widget')).toBeTruthy();
|
|
|
|
|
expect(view._normalizeTimeSeriesColumn).toHaveBeenCalled();
|
|
|
|
|
expect(view._columnsCollection.at(1).get('selected')).toBe(false);
|
|
|
|
|
expect(view._columnsCollection.at(1).get('widget')).toBeFalsy();
|
|
|
|
|
done();
|
|
|
|
|
}, 200);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('._destroyWidget', function () {
|
|
|
|
|
it('should call the destroy function if the model exists', function () {
|
|
|
|
|
var widgetModel = widgetDefinitionsCollection.at(0);
|
|
|
|
|
var model = new Backbone.Model({
|
|
|
|
|
widget: widgetModel
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
spyOn(widgetModel, 'destroy');
|
|
|
|
|
|
|
|
|
|
view.render();
|
|
|
|
|
view._destroyWidget(model);
|
|
|
|
|
expect(widgetModel.destroy).toHaveBeenCalled();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|