2020-11-10 14:15:31 +01:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
// eslint-disable-next-line node/no-extraneous-require
|
|
|
|
const _ = require('lodash');
|
|
|
|
// eslint-disable-next-line node/no-extraneous-require
|
|
|
|
const qs = require('qs');
|
|
|
|
const request = require('supertest');
|
|
|
|
const { createUtils } = require('./utils');
|
|
|
|
|
|
|
|
const createAgent = (strapi, initialState = {}) => {
|
|
|
|
const _state = initialState;
|
|
|
|
const _utils = createUtils(strapi);
|
|
|
|
|
|
|
|
const _agent = options => {
|
2020-11-17 15:38:41 +01:00
|
|
|
const { method, url, body, formData, qs: queryString } = options;
|
2020-11-10 14:15:31 +01:00
|
|
|
const agent = request.agent(strapi.server);
|
|
|
|
|
|
|
|
if (_.has(_state, 'token')) {
|
|
|
|
agent.auth(_state.token, { type: 'bearer' });
|
|
|
|
}
|
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
const fullUrl = _.concat(_state.urlPrefix, url).join('');
|
|
|
|
|
|
|
|
const rq = agent[method.toLowerCase()](fullUrl);
|
2020-11-10 14:15:31 +01:00
|
|
|
|
|
|
|
if (queryString) {
|
|
|
|
rq.query(qs.stringify(queryString));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (body) {
|
|
|
|
rq.send(body);
|
|
|
|
}
|
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
if (formData) {
|
|
|
|
const attachFieldToRequest = field => rq.field(field, formData[field]);
|
|
|
|
Object.keys(formData).forEach(attachFieldToRequest);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_.isNil(formData)) {
|
|
|
|
rq.type('application/json');
|
|
|
|
}
|
2020-11-10 14:15:31 +01:00
|
|
|
|
|
|
|
return rq;
|
|
|
|
};
|
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
const createShorthandMethod = method => (url, options = {}) => {
|
|
|
|
return _agent({ ...options, url, method });
|
|
|
|
};
|
|
|
|
|
2020-11-10 14:15:31 +01:00
|
|
|
Object.assign(_agent, {
|
2020-11-17 15:38:41 +01:00
|
|
|
assignState(state) {
|
2020-11-10 14:15:31 +01:00
|
|
|
Object.assign(_state, state);
|
2020-11-17 15:38:41 +01:00
|
|
|
return _agent;
|
|
|
|
},
|
|
|
|
|
|
|
|
setURLPrefix(path) {
|
|
|
|
return this.assignState({ urlPrefix: path });
|
2020-11-10 14:15:31 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
setToken(token) {
|
2020-11-17 15:38:41 +01:00
|
|
|
return this.assignState({ token });
|
2020-11-10 14:15:31 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
setLoggedUser(loggedUser) {
|
2020-11-17 15:38:41 +01:00
|
|
|
return this.assignState({ loggedUser });
|
2020-11-10 14:15:31 +01:00
|
|
|
},
|
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
getLoggedUser() {
|
2020-11-10 14:15:31 +01:00
|
|
|
return _state.loggedUser;
|
|
|
|
},
|
|
|
|
|
|
|
|
async login(userInfo) {
|
|
|
|
const { token, user } = await _utils.login(userInfo);
|
|
|
|
|
|
|
|
this.setToken(token).setLoggedUser(user);
|
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
return _agent;
|
2020-11-10 14:15:31 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
async registerOrLogin(userCredentials) {
|
|
|
|
const { token, user } = await _utils.registerOrLogin(userCredentials);
|
|
|
|
|
|
|
|
this.setToken(token).setLoggedUser(user);
|
|
|
|
|
2020-11-17 15:38:41 +01:00
|
|
|
return _agent;
|
2020-11-10 14:15:31 +01:00
|
|
|
},
|
2020-11-17 15:38:41 +01:00
|
|
|
|
|
|
|
get: createShorthandMethod('GET'),
|
|
|
|
post: createShorthandMethod('POST'),
|
|
|
|
put: createShorthandMethod('PUT'),
|
|
|
|
delete: createShorthandMethod('DELETE'),
|
2020-11-10 14:15:31 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
return _agent;
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
createAgent,
|
|
|
|
};
|