diff --git a/functional-tests/assets/mappings/response.yaml b/functional-tests/assets/mappings/response.yaml index cea6cfe..e1b8a43 100644 --- a/functional-tests/assets/mappings/response.yaml +++ b/functional-tests/assets/mappings/response.yaml @@ -56,3 +56,19 @@ response: latency: 2000 file: notexist.xml + +#multiple methods +- request: + method: ["GET", "HEAD","POST"] + url: /stubs/methods/multiple + + response: + body: "multiple methods are supported" + +#all methods +- request: + method: "*" + url: /stubs/methods/all + + response: + body: "You can bind all methods to single mapping." diff --git a/functional-tests/general_spec.js b/functional-tests/general_spec.js index 1d03ea2..5dc98b4 100644 --- a/functional-tests/general_spec.js +++ b/functional-tests/general_spec.js @@ -111,7 +111,6 @@ describe('FT', function () { it('should send deflated response', function (done) { - var time = new Date(); chai.request("http://localhost:9999") .get('/stubs/healthcheck') .set('Accept-Encoding','deflate') @@ -127,7 +126,6 @@ describe('FT', function () { }); it('should send gzipped response', function (done) { - var time = new Date(); chai.request("http://localhost:9999") .get('/stubs/healthcheck') .set('Accept-Encoding','gzip') @@ -142,6 +140,62 @@ describe('FT', function () { }); }); + it('should support multiple methods', function (done) { + chai.request("http://localhost:9999") + .get('/stubs/methods/multiple') + .then(res => { + expect(res.status).toBe(200); + expect(res.text).toBe("multiple methods are supported"); + }).catch( err => { + fail("not expected"); + done(); + }); + + chai.request("http://localhost:9999") + .post('/stubs/methods/multiple') + .then(res => { + expect(res.status).toBe(200); + expect(res.text).toBe("multiple methods are supported"); + done(); + }).catch( err => { + fail("not expected"); + done(); + }); + + chai.request("http://localhost:9999") + .put('/stubs/methods/multiple') + .then(res => { + fail("not expected"); + done(); + }).catch( err => { + expect(err.status).toBe(404); + done(); + }); + }); + + it('should support single mapping for all methods', function (done) { + chai.request("http://localhost:9999") + .get('/stubs/methods/all') + .then(res => { + expect(res.status).toBe(200); + expect(res.text).toBe("You can bind all methods to single mapping."); + }).catch( err => { + fail("not expected"); + done(); + }); + + chai.request("http://localhost:9999") + .post('/stubs/methods/all') + .then(res => { + expect(res.status).toBe(200); + expect(res.text).toBe("You can bind all methods to single mapping."); + done(); + }).catch( err => { + fail("not expected"); + done(); + }); + + }); }); diff --git a/lib/request_resolver.js b/lib/request_resolver.js index d97dd8e..e2dc5f6 100644 --- a/lib/request_resolver.js +++ b/lib/request_resolver.js @@ -38,7 +38,13 @@ return undefined if any property of mapping doesn't match with request function matchAndCapture(mapped_request, http_request){ var matched = {}, i=0; - if(mapped_request.method !== http_request.method) return; + if(Array.isArray(mapped_request.method)){ + if(mapped_request.method.indexOf(http_request.method) === -1) return; + }else if(mapped_request.method === "*"){ + //do nothing + }else{ + if(mapped_request.method !== http_request.method) return; + } if(mapped_request.url){ var urlmatch = util.getMatches(http_request.url,'^'+mapped_request.url+'$');