Initial commit
This commit is contained in:
@@ -0,0 +1,226 @@
|
||||
var Backbone = require('backbone');
|
||||
var CreateModel = require('builder/components/modals/add-layer/add-layer-model');
|
||||
var VisualizationsFetchModel = require('builder/data/visualizations-fetch-model');
|
||||
var TablesCollection = require('builder/data/tables-collection');
|
||||
var UserModel = require('builder/data/user-model');
|
||||
var ConfigModel = require('builder/data/config-model');
|
||||
var NavigationView = require('builder/components/modals/add-layer/content/navigation-view');
|
||||
var _ = require('underscore');
|
||||
|
||||
describe('components/modals/add-layer/navigation-view', function () {
|
||||
beforeEach(function () {
|
||||
jasmine.Ajax.install();
|
||||
jasmine.Ajax.stubRequest(new RegExp('^http(s)?.*/viz\?.*'))
|
||||
.andReturn({ status: 200 });
|
||||
|
||||
this.configModel = new ConfigModel({
|
||||
base_url: '/u/pepe'
|
||||
});
|
||||
|
||||
this.userModel = new UserModel({
|
||||
username: 'pepe',
|
||||
remaining_byte_quota: 10
|
||||
}, {
|
||||
configModel: this.configModel
|
||||
});
|
||||
|
||||
this.createModel = new CreateModel(
|
||||
{},
|
||||
{
|
||||
configModel: this.configModel,
|
||||
userModel: this.userModel,
|
||||
userActions: {},
|
||||
pollingModel: new Backbone.Model()
|
||||
}
|
||||
);
|
||||
|
||||
this.visFetchModel = new VisualizationsFetchModel({
|
||||
content_type: 'datasets'
|
||||
});
|
||||
|
||||
this.tablesCollection = new TablesCollection([], {
|
||||
configModel: this.configModel
|
||||
});
|
||||
|
||||
this.createView = function () {
|
||||
this.view = new NavigationView({
|
||||
configModel: this.configModel,
|
||||
userModel: this.userModel,
|
||||
routerModel: this.visFetchModel,
|
||||
createModel: this.createModel,
|
||||
tablesCollection: this.tablesCollection
|
||||
});
|
||||
};
|
||||
this.createView();
|
||||
|
||||
this.createModel.set('type', 'dataset');
|
||||
|
||||
spyOn(this.createModel, 'bind').and.callThrough();
|
||||
spyOn(this.visFetchModel, 'bind').and.callThrough();
|
||||
spyOn(this.tablesCollection, 'bind').and.callThrough();
|
||||
|
||||
this.view.render();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
jasmine.Ajax.uninstall();
|
||||
this.view.remove();
|
||||
});
|
||||
|
||||
it('should render correctly', function () {
|
||||
expect(this.view.$('.Filters-searchLink').length).toBe(1);
|
||||
expect(this.view.$('.js-typeItem').length).toBe(3);
|
||||
});
|
||||
|
||||
// TBD: create dataset dialog still not implemented
|
||||
// it('should not render several links when create dialog type is dataset', function () {
|
||||
// this.createModel = new CreateDatasetModel({},
|
||||
// {js-typeItem
|
||||
// visMap: {},
|
||||
// configModel: this.configModel,
|
||||
// userModel: this.userModel
|
||||
// });
|
||||
// this.createView();
|
||||
// this.view.render();
|
||||
// expect(this.view.$('.Filters-searchLink').length).toBe(1);
|
||||
// expect(this.view.$('.Filters-typeLink').length).toBe(3);
|
||||
// });
|
||||
|
||||
describe('when data library is enabled', function () {
|
||||
describe('.render', function () {
|
||||
it('should render correctly', function () {
|
||||
spyOn(this.view._configModel, 'dataLibraryEnabled').and.returnValue(true);
|
||||
this.view.render();
|
||||
|
||||
expect(this.view.$('.js-typeItem').length).toBe(4);
|
||||
expect(this.innerHTML()).toContain('components.modals.add-layer.navigation.data-library');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('.initBinds', function () {
|
||||
it('should render when listing state changes', function () {
|
||||
spyOn(this.view, 'render');
|
||||
this.view._initBinds();
|
||||
|
||||
this.createModel.trigger('change:listing');
|
||||
expect(this.view.render).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should render when router model changes', function () {
|
||||
spyOn(this.view, 'render');
|
||||
this.view._initBinds();
|
||||
|
||||
this.visFetchModel.trigger('change');
|
||||
expect(this.view.render).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should render when collection changes', function () {
|
||||
spyOn(this.view, 'render');
|
||||
this.view._initBinds();
|
||||
|
||||
this.tablesCollection.trigger('sync');
|
||||
expect(this.view.render).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should call _onChangeIsSearchEnabled when model isSearchEnabled changes', function () {
|
||||
spyOn(this.view, '_onChangeIsSearchEnabled');
|
||||
this.view._initBinds();
|
||||
|
||||
this.view.model.trigger('change:isSearchEnabled');
|
||||
expect(this.view._onChangeIsSearchEnabled).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it('should create from scratch when create empty button is clicked', function () {
|
||||
spyOn(this.createModel, 'createFromScratch');
|
||||
this.userModel.set('account_type', 'ACCOUNT');
|
||||
this.view.render();
|
||||
this.view.$('.js-create-empty').click();
|
||||
expect(this.createModel.createFromScratch).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should disable connect-dataset option when user is out of bytes quota', function () {
|
||||
this.createModel.set('listing', 'datasets');
|
||||
this.userModel.set('remaining_byte_quota', 0);
|
||||
this.view.render();
|
||||
expect(this.view.$('.js-connect').hasClass('is-disabled')).toBeTruthy();
|
||||
this.view.$('.js-connect').click();
|
||||
expect(this.createModel.get('listing')).not.toBe('import');
|
||||
});
|
||||
|
||||
it('should disable connect-dataset option when user Individual and is out of datasets quota', function () {
|
||||
this.createModel.set('listing', 'datasets');
|
||||
this.userModel.set('account_type', 'Individual');
|
||||
this.userModel.set('table_quota', 40);
|
||||
this.userModel.set('table_count', 40);
|
||||
this.view.render();
|
||||
expect(this.view.$('.js-connect').hasClass('is-disabled')).toBeTruthy();
|
||||
this.view.$('.js-connect').click();
|
||||
expect(this.createModel.get('listing')).not.toBe('import');
|
||||
});
|
||||
|
||||
it('should disable create empty dataset option when user is out of bytes quota', function () {
|
||||
spyOn(this.createModel, 'createFromScratch');
|
||||
this.createModel.set('listing', 'datasets');
|
||||
this.userModel.set('remaining_byte_quota', 0);
|
||||
this.view.render();
|
||||
expect(this.view.$('.js-create-empty').hasClass('is-disabled')).toBeTruthy();
|
||||
this.view.$('.js-create-empty').click();
|
||||
expect(this.createModel.createFromScratch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should disable create empty dataset option when user Individual and is out of datasets quota', function () {
|
||||
spyOn(this.createModel, 'createFromScratch');
|
||||
this.createModel.set('listing', 'datasets');
|
||||
this.userModel.set('account_type', 'Individual');
|
||||
this.userModel.set('table_quota', 40);
|
||||
this.userModel.set('table_count', 40);
|
||||
this.view.render();
|
||||
expect(this.view.$('.js-create-empty').hasClass('is-disabled')).toBeTruthy();
|
||||
this.view.$('.js-create-empty').click();
|
||||
expect(this.createModel.createFromScratch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should search starting for the first page', function () {
|
||||
this.visFetchModel.set('page', 2);
|
||||
this.view.$('.js-search-input').val('test');
|
||||
this.view.$('.js-search-form').submit();
|
||||
expect(this.visFetchModel.get('page')).toBe(1);
|
||||
});
|
||||
|
||||
it('should change router model and listing model when a link is clicked', function () {
|
||||
spyOn(this.view._configModel, 'dataLibraryEnabled').and.returnValue(true);
|
||||
this.view.render();
|
||||
var routerChanged = false;
|
||||
var stateChanged = false;
|
||||
|
||||
function resetFlags () {
|
||||
routerChanged = false;
|
||||
stateChanged = false;
|
||||
}
|
||||
|
||||
this.visFetchModel.bind('change', function (m, c) {
|
||||
if (!_.isEmpty(m.changed)) routerChanged = true;
|
||||
});
|
||||
this.createModel.bind('change', function (m, c) {
|
||||
if (!_.isEmpty(m.changed)) stateChanged = true;
|
||||
});
|
||||
|
||||
resetFlags();
|
||||
|
||||
this.view.$('.js-connect').click();
|
||||
expect(routerChanged).toBeFalsy();
|
||||
expect(stateChanged).toBeTruthy();
|
||||
|
||||
resetFlags();
|
||||
|
||||
this.view.$('.js-library').click();
|
||||
expect(routerChanged).toBeTruthy();
|
||||
expect(stateChanged).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have no leaks', function () {
|
||||
expect(this.view).toHaveNoLeaks();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user