vormjs
Version:
Write your forms in JSON and HTML, use the same API.
219 lines (120 loc) • 4.78 kB
JavaScript
/*global describe,beforeEach,module,inject,it,angular,expect,spyOn,jasmine*/
describe('vormControlList', function ( ) {
var element,
scope,
vormFieldCtrl,
vormControlListCtrl;
beforeEach(module('vorm'));
beforeEach(inject([ '$rootScope', '$compile', '$document', function ( ) {
var [ $rootScope, $compile, $document ] = arguments;
element = angular.element(`
<vorm-field-template config="config">
</vorm-field-template>
`);
$document.find('body').append(element);
scope = $rootScope.$new();
scope.config = {
name: 'test',
type: 'text',
valueType: {
type: 'list',
limit: 10
}
};
$compile(element)(scope);
vormFieldCtrl = element.controller('vormField');
vormControlListCtrl = element.find('vorm-control-list').controller('vormControlList');
scope.$digest();
}]));
it('should have a controller', function ( ) {
expect(vormControlListCtrl).toBeDefined();
});
it('should have a delegate', function ( ) {
expect(vormControlListCtrl.getDelegates().length).toBe(1);
});
it('should create a delegate w/ the name foo', function ( ) {
vormFieldCtrl.setValueType('named');
vormFieldCtrl.setValue({ foo: 'foo' });
scope.$digest();
expect(vormControlListCtrl.getDelegates().length).toBe(1);
expect(vormControlListCtrl.getDelegates()[0].getName()).toBe('foo');
});
it('should create a delegate w/ the length of the array as name if undefined', function ( ) {
vormControlListCtrl.handleCreateClick();
scope.$digest();
expect(vormControlListCtrl.getDelegates()[1].getName()).toBe('1');
vormControlListCtrl.handleCreateClick();
scope.$digest();
expect(vormControlListCtrl.getDelegates()[2].getName()).toBe('2');
});
it('should clear the delegate', function ( ) {
var delegate;
vormControlListCtrl.handleCreateClick('foo');
delegate = vormControlListCtrl.getDelegates()[0];
delegate.value = 'foo';
spyOn(delegate, 'clearViewValue');
vormControlListCtrl.clearDelegate(delegate);
expect(delegate.clearViewValue).toHaveBeenCalled();
});
it('should remove the delegate', function ( ) {
var delegate;
vormControlListCtrl.handleCreateClick();
vormControlListCtrl.handleCreateClick();
scope.$digest();
delegate = vormControlListCtrl.getDelegates()[1];
vormControlListCtrl.handleClearClick(delegate);
scope.$digest();
expect(vormControlListCtrl.getDelegates()).not.toContain(delegate);
});
it('should set the limit to what is defined', function ( ) {
vormControlListCtrl.setLimit(10);
expect(vormControlListCtrl.getLimit()).toBe(10);
});
it('should tell when the limit is reached', function ( ) {
vormControlListCtrl.setLimit(2);
expect(vormControlListCtrl.reachedLimit()).toBe(false);
vormControlListCtrl.handleCreateClick();
scope.$digest();
expect(vormControlListCtrl.reachedLimit()).toBe(true);
});
it('should create a delegate on click', function ( ) {
expect(vormControlListCtrl.getDelegates().length).toBe(1);
vormControlListCtrl.handleCreateClick();
scope.$digest();
expect(vormControlListCtrl.getDelegates().length).toBe(2);
});
it('should clear the control on clear click if it\'s the last one', function ( ) {
var delegate = vormControlListCtrl.getDelegates()[0];
expect(vormControlListCtrl.getDelegates().length).toBe(1);
spyOn(delegate, 'clearViewValue').and.callThrough();
vormControlListCtrl.handleClearClick(delegate);
expect(delegate.clearViewValue).toHaveBeenCalled();
});
it('should remove the control on clear click if there\'s more than one left', function ( ) {
vormControlListCtrl.handleCreateClick();
scope.$digest();
var delegate = vormControlListCtrl.getDelegates()[1];
expect(vormControlListCtrl.getDelegates().length).toBe(2);
spyOn(delegate, 'clearViewValue').and.callThrough();
vormControlListCtrl.handleClearClick(delegate);
expect(delegate.clearViewValue).not.toHaveBeenCalled();
scope.$digest();
expect(vormControlListCtrl.getDelegates()).not.toContain(delegate);
});
it('should trigger a view change', function ( ) {
var spy = jasmine.createSpy();
vormFieldCtrl.viewChangeListeners.push(spy);
vormControlListCtrl.handleCreateClick();
scope.$digest();
expect(spy).toHaveBeenCalled();
});
describe('when valueType is single', function ( ) {
beforeEach(function ( ) {
vormFieldCtrl.setValueType('single');
scope.$digest();
});
it('should create a single delegate', function ( ) {
expect(vormControlListCtrl.getDelegates().length).toBe(1);
});
});
});