blob: 28faab76e3403c723973f77eff62361da05e4617 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014-2015 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
/* global FormSpecHelper, MenuSpecHelper */
describe("ValueField", function() {
var session, helper, menuHelper;
beforeEach(function() {
setFixtures(sandbox());
session = sandboxSession();
helper = new FormSpecHelper(session);
menuHelper = new MenuSpecHelper(session);
jasmine.Ajax.install();
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
jasmine.Ajax.uninstall();
});
describe("property status visible", function() {
var formField, model;
beforeEach(function() {
model = helper.createFieldModel();
formField = new scout.ValueField();
formField._render = function($parent) {
this.addContainer($parent, 'form-field');
this.addField($('<div>'));
this.addStatus();
};
formField.init(model);
});
it("shows a status even though status visible is false but there are visible menus", function() {
formField.statusVisible = false;
var menu0 = menuHelper.createMenu(menuHelper.createModel());
formField.menus = [menu0];
formField.menusVisible = true;
formField.render(session.$entryPoint);
expect(formField.$status.isVisible()).toBe(true);
var event = createPropertyChangeEvent(formField, {
menusVisible: false
});
formField.onModelPropertyChange(event);
expect(formField.$status.isVisible()).toBe(false);
});
});
describe("menu visibility", function() {
var formField, model;
beforeEach(function() {
jasmine.Ajax.install();
jasmine.clock().install();
model = helper.createFieldModel();
formField = new scout.ValueField();
formField._render = function($parent) {
this.addContainer($parent, 'form-field');
this.addField($('<input>'));
this.addStatus();
};
formField.init(model);
});
afterEach(function() {
// Close context menus
$('body').triggerClick();
});
it("context menu only shows visible menus", function() {
var menuModel1 = menuHelper.createModel('menu'),
menu1 = menuHelper.createMenu(menuModel1),
menuModel2 = menuHelper.createModel('menu'),
menu2 = menuHelper.createMenu(menuModel2);
menu2.visible = false;
formField.menus = [menu1, menu2];
formField.menusVisible = true;
formField.render(session.$entryPoint);
formField.$status.triggerContextMenu();
sendQueuedAjaxCalls();
var $menu = $('body').find('.popup-body');
expect($menu.find('.menu-item').length).toBe(1);
expect($menu.find('.menu-item').eq(0).isVisible()).toBe(true);
});
it("context menu only shows only menus of specific type", function() {
var menuModel1 = menuHelper.createModel('menu'),
menu1 = menuHelper.createMenu(menuModel1),
menuModel2 = menuHelper.createModel('menu'),
menu2 = menuHelper.createMenu(menuModel2);
menu1.menuTypes = ['ValueField.Null', 'ValueField.NotNull'];
menu2.menuTypes = ['ValueField.Null'];
formField.menus = [menu1, menu2];
formField.menusVisible = true;
formField.render(session.$entryPoint);
formField.currentMenuTypes = ['Null'];
formField.$status.triggerContextMenu();
var $menu = $('body').find('.popup-body');
expect($menu.find('.menu-item').length).toBe(2);
expect($menu.find('.menu-item').eq(0).isVisible()).toBe(true);
expect($menu.find('.menu-item').eq(1).isVisible()).toBe(true);
// close menu
formField.$status.triggerContextMenu();
// open again and change current menu types
formField.displayText = 'abc';
formField.currentMenuTypes = ['NotNull'];
formField.$status.triggerContextMenu();
// trigger acceptInput request (menu won't be shown before request is not finished)
jasmine.clock().tick(0);
sendQueuedAjaxCalls();
// Simulate request response was processed...
session._requestsPendingCounter--;
session._fireRequestFinished(mostRecentJsonRequest());
$menu = $('body').find('.popup-body');
expect($menu.find('.menu-item').length).toBe(1);
expect($menu.find('.menu-item').eq(0).isVisible()).toBe(true);
});
it("context menu triggers a display text changed event", function() {
var menuModel1 = menuHelper.createModel('menu'),
menu1 = menuHelper.createMenu(menuModel1);
menu1.menuTypes = ['ValueField.Null', 'ValueField.NotNull'];
formField.menus = [menu1];
formField.menusVisible = true;
formField.render(session.$entryPoint);
formField.$field.focus();
formField.$field.val('abc123contextmenu');
formField.$status.triggerContextMenu();
sendQueuedAjaxCalls();
expect(jasmine.Ajax.requests.count()).toBe(1);
var event = new scout.Event(formField.id, 'displayTextChanged', {
displayText: 'abc123contextmenu', whileTyping: false
});
expect(mostRecentJsonRequest()).toContainEvents(event);
});
});
});