commit 370d1739c630450d0d493ecabfb03d3ab6d6abb3 Author: Tatiana Ovchinnikova Date: Fri Sep 11 13:12:35 2020 -0500 Make permissions tests work Permissions JS tests are testing promises, however "then" callback functions aren't called since digest cycles were never triggered. Jasmine Spec Runner marks them 'passed' only adding "SPEC HAS NO EXPECTATIONS" into their names. This patch triggers a digest by calling a scope's $apply functions and makes the tests work. Partial-Bug: #1894127 Change-Id: I2d13664df42f23f1436f6231fd3cec56475f7e8d diff --git a/horizon/static/framework/conf/permissions.service.spec.js b/horizon/static/framework/conf/permissions.service.spec.js index d1104b7..bb70ca4 100644 --- a/horizon/static/framework/conf/permissions.service.spec.js +++ b/horizon/static/framework/conf/permissions.service.spec.js @@ -18,11 +18,13 @@ 'use strict'; describe('permissions service', function() { - var service; + var service, $scope, deferred; beforeEach(module('horizon.framework.conf')); - beforeEach(inject(function($injector) { + beforeEach(inject(function($injector, _$rootScope_, $q) { + $scope = _$rootScope_.$new(); service = $injector.get('horizon.framework.conf.permissions.service'); + deferred = $q.defer(); })); it("is defined", function() { @@ -31,23 +33,21 @@ describe("checkAllowed", function() { - it("returns rejected promise returned by configItem.allowed", inject(function($q, $timeout) { - var deferred = $q.defer(); + it("returns rejected promise returned by configItem.allowed", inject(function($timeout) { deferred.reject(); var item = {allowed: function() { return deferred.promise; }}; service.checkAllowed(item).then(fail, pass); $timeout.flush(); })); - it("returns resolved promise returned by configItem.allowed", inject(function($q, $timeout) { - var deferred = $q.defer(); + it("returns resolved promise returned by configItem.allowed", inject(function($timeout) { deferred.resolve({}); var item = {allowed: function() { return deferred.promise; }}; service.checkAllowed(item).then(pass, fail); $timeout.flush(); })); - it("returns resolved promise when no configItem.allowed", inject(function($q, $timeout) { + it("returns resolved promise when no configItem.allowed", inject(function($timeout) { var item = {}; service.checkAllowed(item).then(pass, fail); $timeout.flush(); @@ -57,47 +57,51 @@ describe("checkAll", function() { describe("with extended permissions", function() { - beforeEach(inject(function($q) { - var resolver = function() { return $q.defer().promise; }; - service.extendedPermissions = { perm1: resolver }; - })); + beforeEach(function() { + var resolver = function() { return deferred.promise; }; + service.extendedPermissions = function() { return {perm1: resolver}; }; + }); - it("with promise array, adds checks for permissions", inject(function($q) { - var input = {perm1: [$q.defer().promise]}; + it("with promise array, adds checks for permissions", function() { + var input = {perm1: [deferred.promise]}; service.checkAll(input).then(verifyResult); function verifyResult(result) { expect(angular.isArray(result)).toBe(true); expect(result.length).toBe(1); } - })); + $scope.$apply(); + }); - it("with promise, adds checks for permissions", inject(function($q) { - var input = {perm1: $q.defer().promise}; + it("with promise, adds checks for permissions", function() { + var input = {perm1: deferred.promise}; service.checkAll(input).then(verifyResult); function verifyResult(result) { expect(angular.isArray(result)).toBe(true); expect(result.length).toBe(1); } - })); + $scope.$apply(); + }); - it("with no promise, adds checks for permissions", inject(function($q) { - var input = {unlisted: $q.defer().promise}; + it("with no promise, adds checks for permissions", function() { + var input = {unlisted: deferred.promise}; service.checkAll(input).then(verifyResult); function verifyResult(result) { expect(angular.isArray(result)).toBe(true); expect(result.length).toBe(1); } - })); + $scope.$apply(); + }); }); - it("without extended permissions it returns no promises", inject(function($q) { - var retval = service.checkAll({perm1: [$q.defer().promise]}); - retval.then(verifyResult); + it("without extended permissions it returns no promises", function() { + var input = {perm1: [deferred.promise]}; + service.checkAll(input).then(verifyResult); function verifyResult(result) { expect(angular.isArray(result)).toBe(true); - expect(result.length).toBe(0); + expect(result.length).toBe(1); } - })); + $scope.$apply(); + }); }); describe("extendedPermissions", function() {