290 lines
11 KiB
JavaScript
290 lines
11 KiB
JavaScript
|
var _ = require('underscore');
|
||
|
var LayerContentModel = require('builder/data/layer-content-model');
|
||
|
|
||
|
var getQueryGeometryModelFixture = require('fixtures/builder/query-geometry-model.fixture.js');
|
||
|
var getQuerySchemaModelFixture = require('fixtures/builder/query-schema-model.fixture.js');
|
||
|
var getQueryRowsCollectionModelFixture = require('fixtures/builder/query-rows-collection.fixture.js');
|
||
|
|
||
|
var STATES = require('builder/data/query-base-status');
|
||
|
|
||
|
var CONTEXTS = {
|
||
|
map: 'map',
|
||
|
table: 'table'
|
||
|
};
|
||
|
|
||
|
describe('data/layer-content-model', function () {
|
||
|
var model;
|
||
|
var defaultOptions;
|
||
|
var querySchemaModel;
|
||
|
var queryGeometryModel;
|
||
|
var queryRowsCollection;
|
||
|
|
||
|
var createModelFn = function (options) {
|
||
|
querySchemaModel = getQuerySchemaModelFixture({
|
||
|
query: ''
|
||
|
});
|
||
|
|
||
|
queryGeometryModel = getQueryGeometryModelFixture();
|
||
|
|
||
|
queryRowsCollection = getQueryRowsCollectionModelFixture({
|
||
|
querySchemaModel: querySchemaModel
|
||
|
});
|
||
|
|
||
|
defaultOptions = {
|
||
|
querySchemaModel: querySchemaModel,
|
||
|
queryGeometryModel: queryGeometryModel,
|
||
|
queryRowsCollection: queryRowsCollection
|
||
|
};
|
||
|
|
||
|
return new LayerContentModel({}, _.extend(defaultOptions, options));
|
||
|
};
|
||
|
|
||
|
beforeEach(function () {
|
||
|
model = createModelFn();
|
||
|
});
|
||
|
|
||
|
describe('.initialize', function () {
|
||
|
it('should have initial state by default', function () {
|
||
|
expect(model.get('state')).toEqual(STATES.initial);
|
||
|
});
|
||
|
|
||
|
it('should have map context by default', function () {
|
||
|
expect(model.get('context')).toEqual(CONTEXTS.map);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('._initBinds', function () {
|
||
|
it('should call to _setState when _querySchemaModel:status changes', function () {
|
||
|
spyOn(model, '_setState');
|
||
|
|
||
|
model._initBinds();
|
||
|
model._querySchemaModel.trigger('change:status');
|
||
|
expect(model._setState).toHaveBeenCalled();
|
||
|
});
|
||
|
|
||
|
it('should call to _setState when _queryGeometryModel:status changes', function () {
|
||
|
spyOn(model, '_setState');
|
||
|
|
||
|
model._initBinds();
|
||
|
model._queryGeometryModel.trigger('change:status');
|
||
|
expect(model._setState).toHaveBeenCalled();
|
||
|
});
|
||
|
|
||
|
it('should call to _setState when _queryRowsCollection.statusModel:status changes', function () {
|
||
|
spyOn(model, '_setState');
|
||
|
|
||
|
model._initBinds();
|
||
|
model._queryRowsCollection.statusModel.trigger('change:status');
|
||
|
expect(model._setState).toHaveBeenCalled();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('_.getState', function () {
|
||
|
it('should return initial state if it is the initial state', function () {
|
||
|
spyOn(model, 'isErrored').and.returnValue(false);
|
||
|
spyOn(model, 'isFetched').and.returnValue(false);
|
||
|
spyOn(model, 'isFetching').and.returnValue(false);
|
||
|
|
||
|
expect(model._getState()).toEqual(STATES.initial);
|
||
|
});
|
||
|
|
||
|
it('should return undefined state by default', function () {
|
||
|
spyOn(model, 'isErrored').and.returnValue(false);
|
||
|
spyOn(model, 'isFetched').and.returnValue(false);
|
||
|
spyOn(model, 'isFetching').and.returnValue(false);
|
||
|
spyOn(model, 'isInitial').and.returnValue(false);
|
||
|
|
||
|
expect(model._getState()).toEqual(STATES.unavailable);
|
||
|
});
|
||
|
|
||
|
it('should return errored if it has errors', function () {
|
||
|
spyOn(model, 'isErrored').and.returnValue(true);
|
||
|
|
||
|
expect(model._getState()).toEqual(STATES.errored);
|
||
|
});
|
||
|
|
||
|
it('should return fetched if it is fetched', function () {
|
||
|
spyOn(model, 'isErrored').and.returnValue(false);
|
||
|
spyOn(model, 'isFetched').and.returnValue(true);
|
||
|
|
||
|
expect(model._getState()).toEqual(STATES.fetched);
|
||
|
});
|
||
|
|
||
|
it('should return fetching if it is fetching', function () {
|
||
|
spyOn(model, 'isErrored').and.returnValue(false);
|
||
|
spyOn(model, 'isFetched').and.returnValue(false);
|
||
|
spyOn(model, 'isFetching').and.returnValue(true);
|
||
|
|
||
|
expect(model._getState()).toEqual(STATES.fetching);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('_.setState', function () {
|
||
|
it('should updated the given state by getState', function () {
|
||
|
spyOn(model, '_getState').and.returnValue('final-state');
|
||
|
|
||
|
model.set('state', 'initial-state');
|
||
|
model._setState();
|
||
|
|
||
|
expect(model.get('state')).toEqual('final-state');
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('.isErrored', function () {
|
||
|
it('should be true if querySchemaModel has repeated errors', function () {
|
||
|
spyOn(model._querySchemaModel, 'hasRepeatedErrors').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
|
||
|
expect(model.isErrored()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be true if _queryGeometryModel has repeated errors', function () {
|
||
|
spyOn(model._querySchemaModel, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'hasRepeatedErrors').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
|
||
|
expect(model.isErrored()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be true if _queryRowsCollection has repeated errors', function () {
|
||
|
spyOn(model._querySchemaModel, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'hasRepeatedErrors').and.returnValue(true);
|
||
|
|
||
|
expect(model.isErrored()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be false if any query model have errors', function () {
|
||
|
spyOn(model._querySchemaModel, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'hasRepeatedErrors').and.returnValue(false);
|
||
|
|
||
|
expect(model.isErrored()).toEqual(false);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('.isFetching', function () {
|
||
|
it('should be true if querySchemaModel is fetching', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetching').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'isFetching').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'isFetching').and.returnValue(false);
|
||
|
|
||
|
expect(model.isFetching()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be true if _queryGeometryModel is fetching', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetching').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'isFetching').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'isFetching').and.returnValue(false);
|
||
|
|
||
|
expect(model.isFetching()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be true if _queryRowsCollection is fetching', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetching').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'isFetching').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'isFetching').and.returnValue(true);
|
||
|
|
||
|
expect(model.isFetching()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be false if any query model is fetching', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetching').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'isFetching').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'isFetching').and.returnValue(false);
|
||
|
|
||
|
expect(model.isFetching()).toEqual(false);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('.isFetched', function () {
|
||
|
it('should be false if querySchemaModel is not fetched', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetched').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'isFetched').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'isFetched').and.returnValue(true);
|
||
|
|
||
|
expect(model.isFetched()).toEqual(false);
|
||
|
});
|
||
|
|
||
|
it('should be false if _queryGeometryModel is not fetched', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetched').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'isFetched').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'isFetched').and.returnValue(true);
|
||
|
|
||
|
expect(model.isFetched()).toEqual(false);
|
||
|
});
|
||
|
|
||
|
it('should be false if _queryRowsCollection is not fetched', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetched').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'isFetched').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'isFetched').and.returnValue(false);
|
||
|
|
||
|
expect(model.isFetched()).toEqual(false);
|
||
|
});
|
||
|
|
||
|
it('should be true if all query models are fetched', function () {
|
||
|
spyOn(model._querySchemaModel, 'isFetched').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'isFetched').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'isFetched').and.returnValue(true);
|
||
|
|
||
|
expect(model.isFetched()).toEqual(true);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('.isInFinalStatus', function () {
|
||
|
it('should be false if querySchemaModel is not in final status', function () {
|
||
|
spyOn(model._querySchemaModel, 'isInFinalStatus').and.returnValue(false);
|
||
|
spyOn(model._queryGeometryModel, 'isInFinalStatus').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'isInFinalStatus').and.returnValue(true);
|
||
|
|
||
|
expect(model.isInFinalStatus()).toEqual(false);
|
||
|
});
|
||
|
|
||
|
it('should be false if _queryGeometryModel is not in final status', function () {
|
||
|
spyOn(model._querySchemaModel, 'isInFinalStatus').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'isInFinalStatus').and.returnValue(false);
|
||
|
spyOn(model._queryRowsCollection, 'isInFinalStatus').and.returnValue(true);
|
||
|
|
||
|
expect(model.isInFinalStatus()).toEqual(false);
|
||
|
});
|
||
|
|
||
|
it('should be false if _queryRowsCollection is not in final status', function () {
|
||
|
spyOn(model._querySchemaModel, 'isInFinalStatus').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'isInFinalStatus').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'isInFinalStatus').and.returnValue(false);
|
||
|
|
||
|
expect(model.isInFinalStatus()).toEqual(false);
|
||
|
});
|
||
|
|
||
|
it('should be true if all query models are in final status', function () {
|
||
|
spyOn(model._querySchemaModel, 'isInFinalStatus').and.returnValue(true);
|
||
|
spyOn(model._queryGeometryModel, 'isInFinalStatus').and.returnValue(true);
|
||
|
spyOn(model._queryRowsCollection, 'isInFinalStatus').and.returnValue(true);
|
||
|
|
||
|
expect(model.isInFinalStatus()).toEqual(true);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('.isDone', function () {
|
||
|
it('should be true if it is fetched', function () {
|
||
|
spyOn(model, 'isFetched').and.returnValue(true);
|
||
|
|
||
|
expect(model.isDone()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be true if it is errored', function () {
|
||
|
spyOn(model, 'isErrored').and.returnValue(true);
|
||
|
|
||
|
expect(model.isDone()).toEqual(true);
|
||
|
});
|
||
|
|
||
|
it('should be false it is not fetched nor errored', function () {
|
||
|
spyOn(model, 'isFetched').and.returnValue(false);
|
||
|
spyOn(model, 'isErrored').and.returnValue(false);
|
||
|
|
||
|
expect(model.isDone()).toEqual(false);
|
||
|
});
|
||
|
});
|
||
|
});
|