describe('angular-confirm', function() { var $rootScope, $uibModal; beforeEach(angular.mock.module('angular-confirm', function ($provide) { $provide.decorator('$uibModal', function($delegate) { $uibModal = { open: jasmine.createSpy('$uibModal.open', function(settings) { return {result: settings}; }) }; return $uibModal; }); $provide.decorator('$confirm', function($delegate) { return jasmine.createSpy('$confirm', $delegate); }); })); beforeEach(angular.mock.inject(function (_$rootScope_) { $rootScope = _$rootScope_; })); describe('ConfirmModalController', function() { var $scope, controller, data = {testVal: 1}, $uibModalInstance; beforeEach(angular.mock.inject(function($controller) { $scope = $rootScope.$new(); $uibModalInstance = { close: jasmine.createSpy('$uibModalInstance.close'), dismiss: jasmine.createSpy('$uibModalInstance.dismiss'), result: { then: jasmine.createSpy('$uibModalInstance.result.then') } }; controller = $controller('ConfirmModalController', {"$scope": $scope, "$uibModalInstance": $uibModalInstance, "data": data}); })); it("should copy the data, not use it as a reference", function() { data.testVal = 2; expect($scope.data.testVal).toEqual(1); }); it("should call close when $scope.ok is invoked", function() { $scope.ok(); expect($uibModalInstance.close).toHaveBeenCalled(); }); it("should call dismiss when $scope.cancel is invoked", function() { $scope.cancel(); expect($uibModalInstance.dismiss).toHaveBeenCalledWith('cancel'); }); }); describe('$confirm factory', function() { var $confirm, $confirmModalDefaults; beforeEach(angular.mock.inject(function(_$confirm_, _$confirmModalDefaults_) { $confirm = _$confirm_; $confirm.and.callThrough(); $confirmModalDefaults = _$confirmModalDefaults_; $uibModal.open.and.callThrough(); })); it("should call $uibModal.open", function() { $confirm(); expect($uibModal.open).toHaveBeenCalled(); }); it("should override the defaults with settings passed in", function() { var settings = $confirm({}, {"template": "hello"}); expect(settings.template).toEqual("hello"); }); it("should not change the defaults", function() { var settings = $confirm({}, {"templateUrl": "hello"}); expect(settings.templateUrl).toEqual("hello"); expect(settings.template).not.toBeDefined(); expect($confirmModalDefaults.template).toBeDefined(); expect($confirmModalDefaults.templateUrl).not.toBeDefined(); }); it("should override the default labels with the data passed in", function() { var settings = $confirm({title: "Title"}); var data = settings.resolve.data(); expect(data.title).toEqual("Title"); expect(data.ok).toEqual('OK'); }); it("should remove template if templateUrl is passed in", function() { var settings = $confirm({}, {templateUrl: "abc.txt"}); expect(settings.template).not.toBeDefined(); }); }); describe('confirm directive', function() { var $scope, element, $confirm, data; beforeEach(angular.mock.inject(function (_$confirm_, $compile) { $confirm = _$confirm_; $confirm.and.callFake(function(d) { data = d; return {then: function() {}} }); $scope = $rootScope.$new(); $scope.click = jasmine.createSpy('$scope.click'); })); describe('resolve properties in title', function() { beforeEach(angular.mock.inject(function($compile) { $scope.name = 'Joe'; element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should resolve the name to the text property", function() { element.triggerHandler('click'); expect(data.text).toEqual('Are you sure, Joe?'); }); }); describe('without confirmIf', function() { beforeEach(angular.mock.inject(function($compile) { element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should call confirm on click and not call the function", function() { element.triggerHandler('click'); expect($scope.click).not.toHaveBeenCalled(); expect($confirm).toHaveBeenCalled(); }); }); describe('with confirmIf option', function() { beforeEach(angular.mock.inject(function($compile) { element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should call confirm on click and not call the function", function() { $scope.truthy = true; $scope.$apply(); element.triggerHandler('click'); expect($scope.click).not.toHaveBeenCalled(); expect($confirm).toHaveBeenCalled(); }); it("should call the function", function() { $scope.truthy = false; $scope.$apply(); element.triggerHandler('click'); expect($scope.click).toHaveBeenCalled(); expect($confirm).not.toHaveBeenCalled(); }); }); describe('with confirmTitle option', function() { beforeEach(angular.mock.inject(function($compile) { $scope.name = 'Joe'; element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should resolve the confirmTitle to the title property", function() { element.triggerHandler('click'); expect(data.title).toEqual('Hello, Joe!'); }); }); describe('with confirmOk option', function() { beforeEach(angular.mock.inject(function($compile) { $scope.name = 'Joe'; element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should resolve the confirmTitle to the title property", function() { element.triggerHandler('click'); expect(data.ok).toEqual('Okie Dokie, Joe!'); }); }); describe('with confirmCancel option', function() { beforeEach(angular.mock.inject(function($compile) { $scope.name = 'Joe'; element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should resolve the confirmTitle to the title property", function() { element.triggerHandler('click'); expect(data.cancel).toEqual('No Way, Joe!'); }); }); describe('with confirmSettings option', function() { beforeEach(angular.mock.inject(function($compile) { $scope.settings = {name: 'Joe'}; element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should pass the settings to $confirm", function() { element.triggerHandler('click'); expect($confirm).toHaveBeenCalledWith({text: "Are you sure?"}, $scope.settings) }); }); describe('with confirmSettings option direct entry', function() { beforeEach(angular.mock.inject(function($compile) { element = angular.element(''); $compile(element)($scope); $scope.$digest(); })); it("should pass the settings to $confirm", function() { element.triggerHandler('click'); expect($confirm).toHaveBeenCalledWith({text: "Are you sure?"}, {name: "Joe"}) }); }); }); });