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
						
					
					
				| "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();
 | |
|       });
 | |
|     });
 | |
|   });
 | |
| }); |