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.
		
		
		
		
		
			
		
			
				
					119 lines
				
				3.7 KiB
			
		
		
			
		
	
	
					119 lines
				
				3.7 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | var _chai = require("chai"); | ||
|  | 
 | ||
|  | var _apiController = _interopRequireDefault(require("./api-controller")); | ||
|  | 
 | ||
|  | var _filter = require("../utils/filter"); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | /* eslint-disable @typescript-eslint/explicit-function-return-type */ | ||
|  | describe('ApiController', function () { | ||
|  |   beforeEach(function () { | ||
|  |     this.total = 0; | ||
|  |     this.fieldName = 'title'; | ||
|  |     this.recordJSON = { | ||
|  |       title: 'recordTitle' | ||
|  |     }; | ||
|  |     this.recordStub = { | ||
|  |       toJSON: () => this.recordJSON, | ||
|  |       params: {}, | ||
|  |       recordActions: [] | ||
|  |     }; | ||
|  |     this.resourceName = 'Users'; | ||
|  |     this.action = { | ||
|  |       name: 'actionName', | ||
|  |       handler: this.sinon.stub().returns({ | ||
|  |         record: this.recordStub | ||
|  |       }), | ||
|  |       isAccessible: this.sinon.stub().returns(true) | ||
|  |     }; | ||
|  |     const property = { | ||
|  |       name: () => this.fieldName, | ||
|  |       reference: () => false, | ||
|  |       isId: () => true, | ||
|  |       type: () => 'string' | ||
|  |     }; | ||
|  |     this.resourceStub = { | ||
|  |       id: this.sinon.stub().returns('someId'), | ||
|  |       decorate: this.sinon.stub().returns({ | ||
|  |         actions: { | ||
|  |           list: this.action, | ||
|  |           edit: this.action, | ||
|  |           show: this.action, | ||
|  |           delete: this.action, | ||
|  |           new: this.action, | ||
|  |           [this.action.name]: this.action | ||
|  |         }, | ||
|  |         getListProperties: this.sinon.stub().returns([property]), | ||
|  |         titleProperty: () => ({ | ||
|  |           name: () => this.fieldName | ||
|  |         }), | ||
|  |         properties: { | ||
|  |           [property.name()]: property | ||
|  |         }, | ||
|  |         resourceActions: () => [this.action], | ||
|  |         recordActions: () => [this.action], | ||
|  |         recordsDecorator: records => records, | ||
|  |         getFlattenProperties: this.sinon.stub().returns([property]), | ||
|  |         id: this.resourceName | ||
|  |       }), | ||
|  |       find: this.sinon.stub().returns([]), | ||
|  |       count: this.sinon.stub().returns(this.total), | ||
|  |       findOne: this.sinon.stub().returns(this.recordStub) | ||
|  |     }; | ||
|  |     this.recordStub.resource = this.resourceStub; | ||
|  |     this.adminStub = { | ||
|  |       findResource: this.sinon.stub().returns(this.resourceStub), | ||
|  |       options: { | ||
|  |         rootPath: '/admin' | ||
|  |       }, | ||
|  |       translateMessage: () => 'message' | ||
|  |     }; | ||
|  |     this.currentAdmin = { | ||
|  |       email: 'john@doe.com', | ||
|  |       name: 'John' | ||
|  |     }; | ||
|  |     this.apiController = new _apiController.default({ | ||
|  |       admin: this.adminStub | ||
|  |     }, this.currentAdmin); | ||
|  |     this.sinon.stub(_filter.Filter.prototype, 'populate').returns([this.recordStub]); | ||
|  |   }); | ||
|  |   describe('#resourceAction', function () { | ||
|  |     it('calls the handler of correct action', async function () { | ||
|  |       await this.apiController.resourceAction({ | ||
|  |         params: { | ||
|  |           action: this.action.name | ||
|  |         } | ||
|  |       }, {}); | ||
|  |       (0, _chai.expect)(this.action.handler).to.have.been.calledWith(this.sinon.match.any, this.sinon.match.any, this.sinon.match.has('action', this.action)); | ||
|  |     }); | ||
|  |   }); | ||
|  |   describe('#recordAction', function () { | ||
|  |     it('calls the handler of correct action', async function () { | ||
|  |       await this.apiController.recordAction({ | ||
|  |         params: { | ||
|  |           action: this.action.name, | ||
|  |           recordId: 'id' | ||
|  |         } | ||
|  |       }, {}); | ||
|  |       (0, _chai.expect)(this.action.handler).to.have.been.calledWith(this.sinon.match.any, this.sinon.match.any, this.sinon.match.has('action', this.action).and(this.sinon.match.has('record', this.recordStub))); | ||
|  |     }); | ||
|  |     it('throws an error when action do not return record', function (done) { | ||
|  |       this.action.handler = async () => ({ | ||
|  |         someData: 'without an record' | ||
|  |       }); | ||
|  | 
 | ||
|  |       this.apiController.recordAction({ | ||
|  |         params: { | ||
|  |           action: this.action.name, | ||
|  |           recordId: 'id' | ||
|  |         } | ||
|  |       }, {}).catch(error => { | ||
|  |         (0, _chai.expect)(error).property('name', 'ConfigurationError'); | ||
|  |         done(); | ||
|  |       }); | ||
|  |     }); | ||
|  |   }); | ||
|  | }); |