2020-05-19 11:43:42 +03:00

94 lines
3.5 KiB
JavaScript

describe('events', function () {
var $compile;
var $rootScope;
var element;
var elementScope;
beforeEach(module('flow'));
beforeEach(inject(function(_$compile_, _$rootScope_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
$rootScope.fileProgress = jasmine.createSpy('fileProgress');
element = $compile('<div flow-init flow-file-progress="fileProgress($file)">' +
'<div flow-file-progress="fileProgress($file)"></div>' +
'</div>')($rootScope);
$rootScope.$digest();
elementScope = element.scope();
}));
describe('$broadcast events', function () {
var ngFileProgress;
var ngRootFileProgress;
beforeEach(inject(function(){
ngFileProgress = jasmine.createSpy('fileProgress');
ngRootFileProgress = jasmine.createSpy('ngRootFileProgress');
elementScope.$on('flow::fileProgress', ngFileProgress);
$rootScope.$on('flow::fileProgress', ngRootFileProgress);
elementScope.$flow.fire('fileProgress', 'file');
}));
it('should catch event on element scope', function () {
expect(ngFileProgress).toHaveBeenCalled();
expect(ngFileProgress.calls.count()).toBe(1);
var args = ngFileProgress.calls.mostRecent().args;
expect(args[1]).toBe(elementScope.$flow);
expect(args[2]).toBe('file');
});
it('should not catch event on parent scope', function () {
expect(ngRootFileProgress).not.toHaveBeenCalled();
});
});
describe('uploadStart event should be aliased', function () {
var uploadStart;
beforeEach(inject(function(){
$rootScope.uploadStart = jasmine.createSpy('uploadStart');
element = $compile('<div flow-init flow-upload-started="uploadStart($file)">' +
'</div>')($rootScope);
$rootScope.$digest();
elementScope = element.scope();
}));
it('should catch broadcast event', function () {
uploadStart = jasmine.createSpy('uploadStart');
elementScope.$on('flow::uploadStart', uploadStart);
elementScope.$flow.fire('uploadStart');
expect(uploadStart.calls.count()).toBe(1);
});
it('should execute scope function', function () {
elementScope.$flow.fire('uploadStart');
expect($rootScope.uploadStart.calls.count()).toBe(1);
});
});
it('should call event', function () {
elementScope.$flow.fire('fileProgress', 'file');
expect($rootScope.fileProgress).toHaveBeenCalledWith('file');
expect($rootScope.fileProgress.calls.count()).toBe(2);
});
describe('nested flow directives', function () {
var flowScope1;
var flowScope2;
beforeEach(inject(function() {
$rootScope.fileProgress1 = jasmine.createSpy('fileProgress1');
$rootScope.fileProgress2 = jasmine.createSpy('fileProgress2');
element = $compile('<div flow-init flow-file-progress="fileProgress1($file)">' +
'<div flow-init flow-file-progress="fileProgress2($file)"></div>' +
'</div>')($rootScope);
$rootScope.$digest();
flowScope1 = element.scope();
flowScope2 = flowScope1.$$childHead;
}));
it('should not call event of child directive', function () {
flowScope1.$flow.fire('fileProgress', 'file1');
expect($rootScope.fileProgress1).toHaveBeenCalledWith('file1');
expect($rootScope.fileProgress2).not.toHaveBeenCalled();
});
it('should not call event of parent directive', function () {
flowScope2.$flow.fire('fileProgress', 'file2');
expect($rootScope.fileProgress2).toHaveBeenCalledWith('file2');
expect($rootScope.fileProgress1).not.toHaveBeenCalled();
});
});
});