thalassa-aqueduct
Version:
Dynamic haproxy load balancer and configuration. Part of Thalassa
171 lines (145 loc) • 5.86 kB
JavaScript
describe('Give ui.boostrap.modal', function() {
var $document, $compile, $scope, $rootScope, provider;
beforeEach(module('ui.bootstrap.modal'));
beforeEach(function(){
module(function($dialogProvider){
provider = $dialogProvider;
});
inject(function(_$document_, _$compile_, _$rootScope_){
$document = _$document_;
$compile = _$compile_;
$scope = _$rootScope_.$new();
$rootScope = _$rootScope_;
});
});
var elm;
var templateGenerator = function(expr, scopeExpressionContent, closeExpr) {
var additionalExpression = scopeExpressionContent ? scopeExpressionContent : '';
var closingExpr = closeExpr ? ' close="' + closeExpr + '" ': '';
return '<div modal="' + expr + '" options="modalOpts"' + closingExpr + '>' +
additionalExpression + 'Hello!</div>';
};
it('should have just one backdrop', function() {
var numberOfSimultaneousModals = 5;
var elems = [];
for (var i = 0; i< 5; i++) {
elems[i] = $compile(templateGenerator('modalShown' + i))($scope);
$scope.$apply('modalShown' + i + ' = true');
}
expect($document.find('body > div.modal-backdrop').length).toBe(1);
expect($document.find('body > div.modal').length).toBe(numberOfSimultaneousModals);
for (i = 0; i< 5; i++) {
$scope.$apply('modalShown' + i + ' = false');
}
});
it('should work with expression instead of a variable', function() {
$scope.foo = true;
$scope.shown = function() { return $scope.foo; };
elm = $compile(templateGenerator('shown()'))($scope);
$scope.$apply();
expect($document.find('body > div.modal').length).toBe(1);
$scope.$apply('foo = false');
expect($document.find('body > div.modal').length).toBe(0);
});
it('should work with a close expression and escape close', function() {
$scope.bar = true;
$scope.show = function() { return $scope.bar; };
elm = $compile(templateGenerator('show()', ' ', 'bar=false'))($scope);
$scope.$apply();
expect($document.find('body > div.modal').length).toBe(1);
var e = $.Event('keydown');
e.which = 27;
$document.find('body').trigger(e);
expect($document.find('body > div.modal').length).toBe(0);
expect($scope.bar).not.toBeTruthy();
});
it('should work with a close expression and backdrop close', function() {
$scope.baz = 1;
$scope.hello = function() { return $scope.baz===1; };
elm = $compile(templateGenerator('hello()', ' ', 'baz=0'))($scope);
$scope.$apply();
expect($document.find('body > div.modal').length).toBe(1);
$document.find('body > div.modal-backdrop').click();
expect($document.find('body > div.modal').length).toBe(0);
expect($scope.baz).toBe(0);
});
it('should not close on escape if option is false', function() {
$scope.modalOpts = {keyboard:false};
elm = $compile(templateGenerator('modalShown'))($scope);
$scope.modalShown = true;
$scope.$apply();
var e = $.Event('keydown');
e.which = 27;
expect($document.find('body > div.modal').length).toBe(1);
$document.find('body').trigger(e);
expect($document.find('body > div.modal').length).toBe(1);
$scope.$apply('modalShown = false');
});
it('should not close on backdrop click if option is false', function() {
$scope.modalOpts = {backdropClick:false};
elm = $compile(templateGenerator('modalShown'))($scope);
$scope.modalShown = true;
$scope.$apply();
expect($document.find('body > div.modal').length).toBe(1);
$document.find('body > div.modal-backdrop').click();
expect($document.find('body > div.modal').length).toBe(1);
$scope.$apply('modalShown = false');
});
it('should use global $dialog options', function() {
elm = $compile(templateGenerator('modalShown'))($scope);
expect($document.find('.test-open-modal').length).toBe(0);
$scope.$apply('modalShown = true');
expect($document.find('body > div.modal').length).toBe(1);
$scope.$apply('modalShown = false');
});
describe('dialog generated should have directives scope', function() {
afterEach(function() {
$scope.$apply('modalShown = false');
});
it('should call scope methods', function() {
var clickSpy = jasmine.createSpy('localScopeFunction');
$scope.myFunc = clickSpy;
elm = $compile(templateGenerator('modalShown', '<button ng-click="myFunc()">Click</button>'))($scope);
$scope.$apply('modalShown = true');
$document.find('body > div.modal button').click();
expect(clickSpy).toHaveBeenCalled();
});
it('should resolve scope vars', function() {
$scope.buttonName = 'my button';
elm = $compile(templateGenerator('modalShown', '<button>{{buttonName}}</button>'))($scope);
$scope.$apply('modalShown = true');
expect($document.find('body > div.modal button').text()).toBe('my button');
});
});
describe('toogle modal dialog on model change', function() {
beforeEach(function(){
elm = $compile(templateGenerator('modalShown'))($scope);
$scope.$apply('modalShown = true');
});
afterEach(function() {
$scope.$apply('modalShown = false');
});
it('the backdrop should be displayed if specified (true by default)', function(){
expect($document.find('body > div.modal-backdrop').css('display')).toBe('block');
});
it('the modal should be displayed', function(){
expect($document.find('body > div.modal').css('display')).toBe('block');
});
it('the modal should not be displayed', function(){
$scope.$apply('modalShown = false');
expect($document.find('body > div.modal').length).toBe(0);
});
it('should update the model if the backdrop is clicked', function() {
$document.find('body > div.modal-backdrop').click();
$scope.$digest();
expect($scope.modalShown).not.toBeTruthy();
});
it('should update the model if the esc is pressed', function() {
var e = $.Event('keydown');
e.which = 27;
$document.find('body').trigger(e);
$scope.$digest();
expect($scope.modalShown).not.toBeTruthy();
});
});
});