86 lines
3.0 KiB
JavaScript
86 lines
3.0 KiB
JavaScript
var _ = require('underscore');
|
|
var Backbone = require('backbone');
|
|
var DataviewsFactory = require('../../../src/dataviews/dataviews-factory');
|
|
var MockFactory = require('../../helpers/mockFactory');
|
|
var createEngine = require('../fixtures/engine.fixture.js');
|
|
|
|
var source = MockFactory.createAnalysisModel({ id: 'a0' });
|
|
|
|
var generateFakeAttributes = function (attrNames) {
|
|
return _.reduce(attrNames, function (object, attributeName) {
|
|
object[attributeName] = attributeName === 'source'
|
|
? source
|
|
: 'something';
|
|
return object;
|
|
}, {});
|
|
};
|
|
|
|
var createMapMock = function () {
|
|
var map = jasmine.createSpyObj('map', ['getViewBounds', 'on']);
|
|
map.getViewBounds.and.returnValue([[40.6, -3.5], [40.3, -3.8]]);
|
|
|
|
return map;
|
|
};
|
|
|
|
describe('dataviews/dataviews-factory', function () {
|
|
beforeEach(function () {
|
|
this.dataviewsCollection = new Backbone.Collection();
|
|
this.factory = new DataviewsFactory(null, {
|
|
map: createMapMock(),
|
|
engine: createEngine(),
|
|
dataviewsCollection: this.dataviewsCollection
|
|
});
|
|
});
|
|
|
|
it('should create the factory as expected', function () {
|
|
expect(this.factory).toBeDefined();
|
|
expect(this.factory.createCategoryModel).toEqual(jasmine.any(Function));
|
|
expect(this.factory.createFormulaModel).toEqual(jasmine.any(Function));
|
|
expect(this.factory.createHistogramModel).toEqual(jasmine.any(Function));
|
|
});
|
|
|
|
var FACTORY_METHODS_AND_REQUIRED_ATTRIBUTES = [
|
|
['createCategoryModel', ['source', 'column']],
|
|
['createFormulaModel', ['source', 'column', 'operation']],
|
|
['createHistogramModel', ['source', 'column']]
|
|
];
|
|
|
|
_.each(FACTORY_METHODS_AND_REQUIRED_ATTRIBUTES, function (element) {
|
|
var factoryMethod = element[0];
|
|
var requiredAttributes = element[1];
|
|
|
|
it(factoryMethod + ' should throw an error if required attributes are not set', function () {
|
|
expect(function () {
|
|
this.factory[factoryMethod]({});
|
|
}.bind(this)).toThrowError(requiredAttributes[0] + ' is required');
|
|
});
|
|
|
|
it(factoryMethod + ' should set the engine to get the apiKey attribute on the dataview', function () {
|
|
this.factory = new DataviewsFactory({}, {
|
|
map: createMapMock(),
|
|
engine: createEngine(),
|
|
dataviewsCollection: this.dataviewsCollection
|
|
});
|
|
|
|
var attributes = generateFakeAttributes(requiredAttributes);
|
|
var model = this.factory[factoryMethod](attributes);
|
|
|
|
expect(model._engine.getApiKey()).toEqual('API_KEY');
|
|
});
|
|
|
|
it(factoryMethod + ' should set the engine to get the authToken attribute on the dataview', function () {
|
|
var engine = createEngine({ apiKey: null });
|
|
this.factory = new DataviewsFactory({}, {
|
|
map: createMapMock(),
|
|
engine: engine,
|
|
dataviewsCollection: this.dataviewsCollection
|
|
});
|
|
|
|
var attributes = generateFakeAttributes(requiredAttributes);
|
|
var model = this.factory[factoryMethod](attributes);
|
|
|
|
expect(model._engine.getAuthToken()).toEqual(engine.getAuthToken());
|
|
});
|
|
}, this);
|
|
});
|