Skip to content

Commit

Permalink
Merge pull request #153 from yosuke-furukawa/check_op_is_undefined
Browse files Browse the repository at this point in the history
check service operation is defined
  • Loading branch information
lingyan committed Aug 29, 2016
2 parents 26dd29e + 23152e7 commit a7e3f8a
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 2 deletions.
6 changes: 4 additions & 2 deletions libs/fetcher.js
Expand Up @@ -223,11 +223,13 @@ function executeRequest (request, resolve, reject) {
var service;
try {
service = Fetcher.getService(request.resource);
if (!service[op]) {
throw new Error('operation: ' + op + ' is undefined on service: ' + request.resource);
}
service[op].apply(service, args);
} catch (err) {
reject({err: err});
return;
}
service[op].apply(service, args);
}

/**
Expand Down
11 changes: 11 additions & 0 deletions tests/mock/MockNoopService.js
@@ -0,0 +1,11 @@
/**
* Copyright 2016, Yahoo! Inc.
* Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
*/

var lodash = require('lodash');
var MockNoopService = {
name: 'mock_noop_service',
};

module.exports = MockNoopService;
2 changes: 2 additions & 0 deletions tests/mock/mockApp.js
Expand Up @@ -11,8 +11,10 @@ var app = express();
var FetcherServer = require('../../libs/fetcher');
var mockService = require('./MockService');
var mockErrorService = require('./MockErrorService');
var mockNoopService = require('./MockNoopService');
FetcherServer.registerService(mockService);
FetcherServer.registerService(mockErrorService);
FetcherServer.registerService(mockNoopService);

app.use(bodyParser.json());
app.use(DEFAULT_XHR_PATH, FetcherServer.middleware());
Expand Down
2 changes: 2 additions & 0 deletions tests/mock/mockCorsApp.js
Expand Up @@ -9,8 +9,10 @@ var app = express();
var FetcherServer = require('../../libs/fetcher');
var mockService = require('./MockService');
var mockErrorService = require('./MockErrorService');
var mockNoopService = require('./MockNoopService');
FetcherServer.registerService(mockService);
FetcherServer.registerService(mockErrorService);
FetcherServer.registerService(mockNoopService);

app.use(bodyParser.json());
app.use(function cors (req, res, next) {
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/libs/fetcher.js
Expand Up @@ -13,13 +13,15 @@ var Fetcher = require('../../../libs/fetcher');
var fetcher;
var mockService = require('../../mock/MockService');
var mockErrorService = require('../../mock/MockErrorService');
var mockNoopService = require('../../mock/MockNoopService');
var qs = require('querystring');
var testCrud = require('../../util/testCrud');

describe('Server Fetcher', function () {
beforeEach(function () {
Fetcher.registerService(mockService);
Fetcher.registerService(mockErrorService);
Fetcher.registerService(mockNoopService);
});
afterEach(function () {
Fetcher.services = {}; // reset services
Expand Down
26 changes: 26 additions & 0 deletions tests/util/testCrud.js
Expand Up @@ -3,6 +3,7 @@ var defaultOptions = require('./defaultOptions');
var resource = defaultOptions.resource;
var invalidResource = 'invalid_resource';
var mockErrorService = require('../mock/MockErrorService');
var mockNoopService = require('../mock/MockNoopService');
var _ = require('lodash');
module.exports = function testCrud (params, body, config, callback, resolve, reject) {
var options = {};
Expand Down Expand Up @@ -319,4 +320,29 @@ module.exports = function testCrud (params, body, config, callback, resolve, rej
});
});
});
describe('should reject no operation service', function() {
it('with callback', function(done) {
var fetcher = this.fetcher;
fetcher
.read(mockNoopService.name)
.clientConfig(config)
.end(function(err) {
expect(err.name).to.equal('Error');
expect(err.message).to.contain('operation: read is undefined on service: mock_noop_service');
done();
});
});
it('with Promise', function(done) {
var fetcher = this.fetcher;
fetcher
.read(mockNoopService.name)
.clientConfig(config)
.end()
.catch(function (err) {
expect(err.name).to.equal('Error');
expect(err.message).to.contain('operation: read is undefined on service: mock_noop_service');
done();
});
});
});
};

0 comments on commit a7e3f8a

Please sign in to comment.