Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

define(['SrAlert'], function () {
'use strict';

describe('SrAlert directive', function () {
var scope,
isolatedScope,
compile,
element,
timeoutMock,
timeoutCallback;

beforeEach(function () {
module('angularTemplateApp');

timeoutMock = jasmine.createSpyObj('timeoutMock', ['$timeout']);

timeoutMock.$timeout.and.callFake(function (callback, time) {
timeoutCallback = callback;
});

module(function ($provide) {
$provide.value('$timeout', timeoutMock.$timeout);
});

inject(function ($compile, $rootScope, $templateCache) {
var directive = angular.element('<sr-alert message="message" />'),
template = '<p class="sr-only" aria-live="assertive">{{activeMessage}}</p>';

compile = $compile;

scope = $rootScope.$new();

$templateCache.put('modules/ui-components/accessibility/sr-alert/sr-alert_template.html', template);

scope.message = '';

element = $compile(directive)(scope);
scope.$digest();

isolatedScope = element.isolateScope();
});
});

it('should initially set activeMessage to an empty string', function () {
expect(isolatedScope.activeMessage).toEqual('');
});

it('should set ariaLive to "assertive" if not already set', function () {
expect(isolatedScope.ariaLive).toEqual('assertive');
});

it('should respect the previously set value for ariaLive', function () {
isolatedScope.ariaLive = 'polite';

scope.$digest();

expect(isolatedScope.ariaLive).toEqual('polite');
});

it('should update activeMessage when message is updated', function () {
isolatedScope.message = 'Some message';

scope.$digest();

expect(isolatedScope.activeMessage).toEqual('Some message');
});

it('should reset activeMessage after 2000ms when message is updated', function () {
isolatedScope.message = 'Some message';

scope.$digest();

expect(isolatedScope.activeMessage).toEqual('Some message');

expect(timeoutMock.$timeout.calls.argsFor(0)[1]).toEqual(2000);

timeoutCallback();

expect(isolatedScope.activeMessage).toEqual('');
});
});
});