100 lines
4.5 KiB
JavaScript
100 lines
4.5 KiB
JavaScript
define(["jquery", "underscore", "js/views/baseview", "js/utils/handle_iframe_binding", "sinon"],
|
|
function ($, _, BaseView, IframeBinding, sinon) {
|
|
|
|
describe("BaseView", function() {
|
|
var baseViewPrototype;
|
|
|
|
describe("BaseView rendering", function () {
|
|
var iframeBinding_spy;
|
|
|
|
beforeEach(function () {
|
|
baseViewPrototype = BaseView.prototype;
|
|
iframeBinding_spy = sinon.spy(IframeBinding, "iframeBinding");
|
|
|
|
spyOn(baseViewPrototype, 'initialize');
|
|
spyOn(baseViewPrototype, 'beforeRender');
|
|
spyOn(baseViewPrototype, 'render').andCallThrough();
|
|
spyOn(baseViewPrototype, 'afterRender').andCallThrough();
|
|
});
|
|
|
|
afterEach(function () {
|
|
iframeBinding_spy.restore();
|
|
});
|
|
|
|
it('calls before and after render functions when render of baseview is called', function () {
|
|
var baseView = new BaseView();
|
|
baseView.render();
|
|
|
|
expect(baseViewPrototype.initialize).toHaveBeenCalled();
|
|
expect(baseViewPrototype.beforeRender).toHaveBeenCalled();
|
|
expect(baseViewPrototype.render).toHaveBeenCalled();
|
|
expect(baseViewPrototype.afterRender).toHaveBeenCalled();
|
|
});
|
|
|
|
it('calls iframeBinding function when afterRender of baseview is called', function () {
|
|
var baseView = new BaseView();
|
|
baseView.render();
|
|
expect(baseViewPrototype.afterRender).toHaveBeenCalled();
|
|
expect(iframeBinding_spy.called).toEqual(true);
|
|
|
|
//check calls count of iframeBinding function
|
|
expect(iframeBinding_spy.callCount).toBe(1);
|
|
IframeBinding.iframeBinding();
|
|
expect(iframeBinding_spy.callCount).toBe(2);
|
|
});
|
|
});
|
|
|
|
describe("Expand/Collapse", function () {
|
|
var view, MockCollapsibleViewClass;
|
|
|
|
MockCollapsibleViewClass = BaseView.extend({
|
|
initialize: function() {
|
|
this.viewHtml = readFixtures('mock/mock-collapsible-view.underscore');
|
|
},
|
|
|
|
render: function() {
|
|
this.$el.html(this.viewHtml);
|
|
}
|
|
});
|
|
|
|
it('hides a collapsible node when clicking on the toggle link', function () {
|
|
view = new MockCollapsibleViewClass();
|
|
view.render();
|
|
view.$('.ui-toggle-expansion').click();
|
|
expect(view.$('.expand-collapse')).toHaveClass('expand');
|
|
expect(view.$('.expand-collapse')).not.toHaveClass('collapse');
|
|
expect(view.$('.is-collapsible')).toHaveClass('collapsed');
|
|
});
|
|
|
|
it('expands a collapsible node when clicking twice on the toggle link', function () {
|
|
view = new MockCollapsibleViewClass();
|
|
view.render();
|
|
view.$('.ui-toggle-expansion').click();
|
|
view.$('.ui-toggle-expansion').click();
|
|
expect(view.$('.expand-collapse')).toHaveClass('collapse');
|
|
expect(view.$('.expand-collapse')).not.toHaveClass('expand');
|
|
expect(view.$('.is-collapsible')).not.toHaveClass('collapsed');
|
|
});
|
|
});
|
|
|
|
describe("disabled element while running", function() {
|
|
it("adds 'is-disabled' class to element while action is running and removes it after", function() {
|
|
var viewWithLink,
|
|
link,
|
|
deferred = new $.Deferred(),
|
|
promise = deferred.promise(),
|
|
view = new BaseView();
|
|
|
|
setFixtures("<a href='#' id='link'>ripe apples drop about my head</a>");
|
|
|
|
link = $("#link");
|
|
expect(link).not.toHaveClass("is-disabled");
|
|
view.disableElementWhileRunning(link, function(){return promise});
|
|
expect(link).toHaveClass("is-disabled");
|
|
deferred.resolve();
|
|
expect(link).not.toHaveClass("is-disabled");
|
|
});
|
|
});
|
|
});
|
|
});
|