cartodb-4.42/lib/assets/test/spec/builder/data/query-columns-collection.spec.js
2024-04-06 05:25:13 +00:00

103 lines
3.5 KiB
JavaScript

var Backbone = require('backbone');
var QuerySchemaModel = require('builder/data/query-schema-model');
var QueryColumnModel = require('builder/data/query-column-model');
var QueryColumnsCollection = require('builder/data/query-columns-collection');
describe('data/query-columns-collection', function () {
beforeEach(function () {
this.configModel = new Backbone.Model();
this.querySchemaModel = new QuerySchemaModel({}, {
configModel: this.configModel
});
spyOn(QueryColumnsCollection.prototype, 'fetch');
this.collection = new QueryColumnsCollection([], {
querySchemaModel: this.querySchemaModel,
configModel: this.configModel
});
});
describe('url', function () {
beforeEach(function () {
this.configModel.set({
base_url: ''
});
this.configModel.urlVersion = function () { return 'v1'; };
});
it('should not provide a valid url if tableName is not defined', function () {
this.collection._tableName = '';
expect(this.collection.url()).toBeFalsy();
this.collection._tableName = 'comeon';
expect(this.collection.url()).toBe('/api/v1/tables/comeon/columns');
});
});
describe('binds', function () {
it('should fetch query schema model when new column is added', function () {
this.querySchemaModel.set('status', 'fetched');
spyOn(this.querySchemaModel, 'fetch');
this.collection.add(new Backbone.Model());
expect(this.querySchemaModel.get('status')).toBe('unfetched');
expect(this.querySchemaModel.fetch).toHaveBeenCalled();
});
it('should take query-schema when status changes to fetched', function () {
spyOn(this.collection, 'reset').and.callThrough();
this.querySchemaModel.columnsCollection.reset([
{
type: 'number',
name: 'cartodb_id'
}, {
type: 'number',
name: 'a_number'
}, {
type: 'string',
name: 'texttt'
}
]);
this.querySchemaModel.set('status', 'fetched');
expect(this.collection.reset).toHaveBeenCalled();
expect(this.collection.size()).toBe(3);
});
});
describe('setTableName', function () {
it('should not change tableName when it is renamed but it is not referenced', function () {
this.collection.reset([{ id: 'hola' }]);
expect(this.collection.at(0)._tableName).toBe(undefined);
this.collection.setTableName('two');
expect(this.collection.at(0)._tableName).toBeUndefined();
expect(this.collection._tableName).toBeUndefined();
});
it('should change tableName from itself and its children when it is renamed', function () {
this.collection.reset([{ id: 'hola' }]);
this.collection._tableName = 'one';
expect(this.collection.at(0)._tableName).toBe(undefined);
this.collection.setTableName('two');
expect(this.collection.at(0)._tableName).toBe('two');
expect(this.collection._tableName).toBe('two');
});
});
describe('addColumn', function () {
it('should wait and not parse the new column', function () {
var options = {};
var attributes;
QueryColumnModel.prototype.save = function (attrs, opts) {
attributes = this.attributes;
options = opts;
};
this.collection.addColumn();
expect(attributes.isNew).toBeTruthy();
expect(attributes.type).toBe('string');
expect(attributes.name).toContain('column_');
expect(options.wait).toBeTruthy();
expect(options.parse).toBeFalsy();
});
});
});