react-redux-fetch
Version:
A declarative and customizable way to fetch data for React components and manage that data in the Redux state
140 lines (118 loc) • 3.79 kB
JavaScript
var _chai = require('chai');
var _chai2 = _interopRequireDefault(_chai);
var _actionTypes = require('../constants/actionTypes');
var _buildActionsFromMappings = require('./buildActionsFromMappings');
var _buildActionsFromMappings2 = _interopRequireDefault(_buildActionsFromMappings);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_chai2.default.should();
describe('buildActionsFromMappings', function () {
describe('basic mapping', function () {
var basicMapping = [{
resource: 'basic',
request: {
url: 'http://basic.url'
}
}];
var actions = (0, _buildActionsFromMappings2.default)(basicMapping);
it('should return an object with 1 function', function () {
actions.should.be.an('object');
var actionNames = Object.keys(actions);
actionNames.should.have.length(1);
actions[actionNames[0]].should.be.a('function');
});
describe('the returned function', function () {
it('should have the correct name', function () {
actions.should.have.property('basicGet');
});
it('should return an object', function () {
actions.basicGet().should.be.an('object');
});
it('should return a correct redux action', function () {
actions.basicGet().should.eql({
type: _actionTypes.FETCH.for('get').REQUEST,
method: 'get',
request: {
url: 'http://basic.url'
},
resource: {
name: 'basic'
}
});
});
});
});
describe('2 basic mappings', function () {
var basicMapping2 = [{
resource: 'basic',
request: {
url: 'http://basic.url'
}
}, {
resource: 'basic2',
request: {
url: 'http://basic2.url'
}
}];
var actions = (0, _buildActionsFromMappings2.default)(basicMapping2);
it('should return an object with 2 function', function () {
actions.should.be.an('object');
var actionNames = Object.keys(actions);
actionNames.should.have.length(2);
actions[actionNames[0]].should.be.a('function');
actions[actionNames[1]].should.be.a('function');
});
});
describe('mapping with resource object', function () {
var resourceObjectMapping = [{
resource: {
name: 'resourceObjectMapping',
action: 'myRequest'
},
request: {
url: 'http://basic.url'
}
}];
var actions = (0, _buildActionsFromMappings2.default)(resourceObjectMapping);
describe('the returned function', function () {
it('should return a correct redux action', function () {
actions.myRequestGet().should.eql({
type: _actionTypes.FETCH.for('get').REQUEST,
method: 'get',
request: {
url: 'http://basic.url'
},
resource: {
name: 'resourceObjectMapping',
action: 'myRequest'
}
});
});
});
});
describe('mapping with request function', function () {
var requestFnMapping = [{
resource: 'requestFnMapping',
request: function request(id) {
return {
url: 'http://basic.url/' + id
};
}
}];
var actions = (0, _buildActionsFromMappings2.default)(requestFnMapping);
describe('the returned function', function () {
it('should return a correct redux action', function () {
actions.requestFnMappingGet(555).should.eql({
type: _actionTypes.FETCH.for('get').REQUEST,
method: 'get',
request: {
url: 'http://basic.url/555'
},
resource: {
name: 'requestFnMapping'
}
});
});
});
});
});
;