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