You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					107 lines
				
				3.3 KiB
			
		
		
			
		
	
	
					107 lines
				
				3.3 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | var _chai = require("chai"); | ||
|  | 
 | ||
|  | var _factoryGirl = _interopRequireDefault(require("factory-girl")); | ||
|  | 
 | ||
|  | var _actionsToButtonGroup = require("./actions-to-button-group"); | ||
|  | 
 | ||
|  | require("../../spec/action-json.factory"); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | describe('actionsToButtonGroup', () => { | ||
|  |   let actions; | ||
|  |   const actionsCount = 5; | ||
|  |   const params = { | ||
|  |     recordId: 'recordId', | ||
|  |     resourceId: 'resourceId', | ||
|  |     recordsId: ['recordId'] | ||
|  |   }; | ||
|  |   let buttonGroupProps; | ||
|  | 
 | ||
|  |   const handleClick = () => true; | ||
|  | 
 | ||
|  |   context('flat actions (no nesting)', () => { | ||
|  |     beforeEach(async () => { | ||
|  |       actions = await _factoryGirl.default.buildMany('ActionJSON', actionsCount, { | ||
|  |         actionType: 'record' | ||
|  |       }); | ||
|  |       buttonGroupProps = (0, _actionsToButtonGroup.actionsToButtonGroup)({ | ||
|  |         actions, | ||
|  |         params, | ||
|  |         handleClick | ||
|  |       }); | ||
|  |     }); | ||
|  |     it('returns all buttons', () => { | ||
|  |       (0, _chai.expect)(buttonGroupProps.length).to.eq(actionsCount); | ||
|  |     }); | ||
|  |   }); | ||
|  |   context('nested actions', () => { | ||
|  |     let rootActions; | ||
|  |     let actionsPublish; | ||
|  |     let actionsExport; | ||
|  |     beforeEach(async () => { | ||
|  |       rootActions = { | ||
|  |         normal: await _factoryGirl.default.build('ActionJSON', { | ||
|  |           actionType: 'record' | ||
|  |         }), | ||
|  |         publish: await _factoryGirl.default.build('ActionJSON', { | ||
|  |           actionType: 'record', | ||
|  |           name: 'publish' | ||
|  |         }), | ||
|  |         export: await _factoryGirl.default.build('ActionJSON', { | ||
|  |           actionType: 'record', | ||
|  |           name: 'publish' | ||
|  |         }) | ||
|  |       }; | ||
|  |       actionsPublish = await _factoryGirl.default.buildMany('ActionJSON', actionsCount, { | ||
|  |         actionType: 'record', | ||
|  |         parent: 'publish' | ||
|  |       }); | ||
|  |       actionsExport = await _factoryGirl.default.buildMany('ActionJSON', actionsCount, { | ||
|  |         actionType: 'record', | ||
|  |         parent: 'export' | ||
|  |       }); | ||
|  |       buttonGroupProps = (0, _actionsToButtonGroup.actionsToButtonGroup)({ | ||
|  |         actions: [...Object.values(rootActions), ...actionsPublish, ...actionsExport], | ||
|  |         params, | ||
|  |         handleClick | ||
|  |       }); | ||
|  |     }); | ||
|  |     it('returns 3 root buttons', () => { | ||
|  |       (0, _chai.expect)(buttonGroupProps.length).to.eq(3); | ||
|  |     }); | ||
|  |     it('returns 5 buttons for each nested action', () => { | ||
|  |       const publishButton = buttonGroupProps[1]; | ||
|  |       const exportButton = buttonGroupProps[2]; | ||
|  |       (0, _chai.expect)(publishButton.buttons).to.have.lengthOf(actionsCount); | ||
|  |       (0, _chai.expect)(exportButton.buttons).to.have.lengthOf(actionsCount); | ||
|  |     }); | ||
|  |   }); | ||
|  |   context('action with not existing parent', () => { | ||
|  |     const parent = 'newParent'; | ||
|  |     beforeEach(async () => { | ||
|  |       actions = [await _factoryGirl.default.build('ActionJSON', { | ||
|  |         actionType: 'record', | ||
|  |         parent | ||
|  |       })]; | ||
|  |       buttonGroupProps = (0, _actionsToButtonGroup.actionsToButtonGroup)({ | ||
|  |         actions, | ||
|  |         params, | ||
|  |         handleClick | ||
|  |       }); | ||
|  |     }); | ||
|  |     it('returns just one root action', () => { | ||
|  |       (0, _chai.expect)(buttonGroupProps).to.have.lengthOf(1); | ||
|  |     }); | ||
|  |     it('creates button for not existing parent', async () => { | ||
|  |       const parentButton = buttonGroupProps[0]; | ||
|  |       (0, _chai.expect)(parentButton.label).to.equal(parent); | ||
|  |     }); | ||
|  |     it('nests remaining action under parent', () => { | ||
|  |       const parentButton = buttonGroupProps[0]; | ||
|  |       (0, _chai.expect)(parentButton.buttons).to.have.lengthOf(1); | ||
|  |     }); | ||
|  |   }); | ||
|  | }); |