Initial commit
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
var _ = require('underscore');
|
||||
var HistogramDataModel = require('../../../../src/dataviews/histogram-dataview/histogram-data-model');
|
||||
|
||||
describe('dataviews/histogram-data-model', function () {
|
||||
var apiKey = 'ac3560ef-78f8-45d8-b043-5544f8a76753';
|
||||
var url = 'https://carto.geo';
|
||||
var defaultBins = 45;
|
||||
|
||||
function buildUrl (params) {
|
||||
var urlParams = _.map(_.keys(params), function (key) {
|
||||
return key + '=' + params[key];
|
||||
});
|
||||
return url + '?no_filters=1&' + urlParams.join('&');
|
||||
}
|
||||
|
||||
beforeEach(function () {
|
||||
this.model = new HistogramDataModel({
|
||||
apiKey: apiKey,
|
||||
url: url
|
||||
});
|
||||
});
|
||||
|
||||
it('defaults', function () {
|
||||
expect(_.isArray(this.model.get('data'))).toBe(true);
|
||||
expect(this.model.get('data').length).toBe(0);
|
||||
expect(this.model.get('localTimezone')).toBe(false);
|
||||
expect(this.model.get('localOffset')).toBe(0);
|
||||
expect(this.model.get('hasBeenFetched')).toBe(false);
|
||||
});
|
||||
|
||||
describe('._initBinds', function () {
|
||||
beforeEach(function () {
|
||||
spyOn(this.model, 'fetch');
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
this.model.set({
|
||||
url: url,
|
||||
aggregation: undefined,
|
||||
bins: defaultBins
|
||||
}, { silent: true });
|
||||
});
|
||||
|
||||
it('should call to fetch when the url changes', function () {
|
||||
this.model.set('url', 'https://carto.geo/aa45');
|
||||
|
||||
expect(this.model.fetch).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should call to fetch when the aggregation changes to a defined value in a date column', function () {
|
||||
this.model.set('column_type', 'date', { silent: true });
|
||||
|
||||
this.model.set('aggregation', 'month');
|
||||
|
||||
expect(this.model.fetch).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should not call to fetch when the aggregation changes to an undefined value in a date column', function () {
|
||||
this.model.set('column_type', 'date', { silent: true });
|
||||
|
||||
this.model.set('aggregation', undefined);
|
||||
|
||||
expect(this.model.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should call to fetch when the bins changes to a defined value in a number column', function () {
|
||||
this.model.set('column_type', 'number', { silent: true });
|
||||
|
||||
this.model.set('bins', defaultBins + 1);
|
||||
|
||||
expect(this.model.fetch).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should call to fetch when localTimezone changes', function () {
|
||||
var originalValue = this.model.get('localTimezone');
|
||||
|
||||
this.model.set('localTimezone', !originalValue);
|
||||
|
||||
expect(this.model.fetch).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should set `hasBeenFetched` to true when a sync event is triggered', function () {
|
||||
this.model.set('hasBeenFetched', false, { silent: true });
|
||||
|
||||
this.model.trigger('sync');
|
||||
|
||||
expect(this.model.get('hasBeenFetched')).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('.url', function () {
|
||||
it('should return no bins param if type is number and bins is undefined', function () {
|
||||
this.model.set({ column_type: 'number' });
|
||||
|
||||
var url = this.model.url();
|
||||
|
||||
expect(url).toEqual(buildUrl({ api_key: apiKey }));
|
||||
});
|
||||
|
||||
it('should return bins param if type is number and bins is defined', function () {
|
||||
this.model.set({
|
||||
column_type: 'number',
|
||||
bins: 48
|
||||
});
|
||||
|
||||
var url = this.model.url();
|
||||
|
||||
expect(url).toEqual(buildUrl({
|
||||
bins: 48,
|
||||
api_key: apiKey
|
||||
}));
|
||||
});
|
||||
|
||||
it('should return aggregation auto if type is date and aggregation is undefined', function () {
|
||||
this.model.set({
|
||||
column_type: 'date',
|
||||
aggregation: undefined
|
||||
});
|
||||
|
||||
var url = this.model.url();
|
||||
|
||||
expect(url).toEqual(buildUrl({
|
||||
aggregation: 'auto',
|
||||
api_key: apiKey
|
||||
}));
|
||||
});
|
||||
|
||||
it('should return aggregation if type is date and aggregation is defined', function () {
|
||||
this.model.set({
|
||||
column_type: 'date',
|
||||
aggregation: 'minute'
|
||||
});
|
||||
|
||||
var url = this.model.url();
|
||||
|
||||
expect(url).toEqual(buildUrl({
|
||||
aggregation: 'minute',
|
||||
api_key: apiKey
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
describe('._getCurrentOffset', function () {
|
||||
beforeEach(function () {
|
||||
this.model.set({
|
||||
offset: 7200,
|
||||
localOffset: 43200
|
||||
}, { silent: true });
|
||||
});
|
||||
|
||||
it('should return offset if `localTimezone` is not set', function () {
|
||||
this.model.set('localTimezone', false, { silent: true });
|
||||
|
||||
var offset = this.model._getCurrentOffset();
|
||||
|
||||
expect(offset).toBe(7200);
|
||||
});
|
||||
|
||||
it('should return local offset if `localTimezone` is set', function () {
|
||||
this.model.set('localTimezone', true, { silent: true });
|
||||
|
||||
var offset = this.model._getCurrentOffset();
|
||||
|
||||
expect(offset).toBe(43200);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user