Skip to content

Commit f18acc6

Browse files
Petr Pchelkod00rman
authored andcommitted
Make sure a URI object is returned from a template.
1 parent 797375a commit f18acc6

File tree

3 files changed

+50
-63
lines changed

3 files changed

+50
-63
lines changed

lib/reqTemplate.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -288,21 +288,22 @@ const simpleTemplate = new RegExp('^(?:\\/(?:[a-zA-Z_\\.-]+|' +
288288
'\\/?(?:\\{\\/?[a-zA-Z_-]+\\})*\\/?$');
289289

290290
/**
291-
* Creates a template resolver functuons for URI part of the spec
292-
* @param {object} spec a root request spec object
293-
* @returns {Function} a template resolver which should be applied to resolve URI
291+
* Creates a template resolver functions for URI part of the spec.
292+
* @param {string} uri the URI template string.
293+
* @param {Object} globals the global parameters and functions map.
294+
* @return Function
294295
*/
295296

296297
function createURIResolver(uri, globals) {
297298
if (simpleTemplate.test(uri) && uri.indexOf('{') >= 0) {
298299
const pathTemplate = new URI(uri, {}, true);
299300
return (context) => pathTemplate.expand(context.rm.request.params);
300-
} else if (/\{/.test(uri)) {
301+
} else if (/{/.test(uri)) {
301302
const tassemblyTemplate = splitAndPrepareTAssemblyTemplate(uri);
302-
// console.log('tass', spec.uri, tassemblyTemplate);
303-
return compileTAssembly(tassemblyTemplate, 'params', globals);
303+
const tassemblyResolver = compileTAssembly(tassemblyTemplate, 'params', globals);
304+
return (context) => new URI(tassemblyResolver(context));
304305
} else {
305-
return () => uri;
306+
return () => new URI(uri);
306307
}
307308
}
308309

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "swagger-router",
3-
"version": "0.7.2",
3+
"version": "0.7.3",
44
"description": "An efficient swagger 2 based router with support for multiple APIs. For use in RESTBase.",
55
"main": "index.js",
66
"scripts": {

test/features/reqTemplate.js

Lines changed: 41 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,11 @@ describe('Request template',() => {
202202
var result = new Template(requestTemplate).expand({
203203
request: {
204204
params: {
205-
uri: 'en.wikipedia.org/path1/test1/test2/test3'
205+
uri: 'https://en.wikipedia.org/path1/test1/test2/test3'
206206
}
207207
}
208208
});
209-
assert.deepEqual(result.uri.toString(), 'en.wikipedia.org/path1/test1/test2/test3');
209+
assert.deepEqual(result.uri.toString(), 'https://en.wikipedia.org/path1/test1/test2/test3');
210210
});
211211

212212
it('absolute templates in URI',() => {
@@ -220,7 +220,7 @@ describe('Request template',() => {
220220
},
221221
body: 'a'
222222
};
223-
assert.deepEqual(template.expand({request:request}).uri, '/path/test/a');
223+
assert.deepEqual(template.expand({request:request}).uri.toString(), '/path/test/a');
224224
});
225225

226226
it('allows req.method to be templated',() => {
@@ -251,7 +251,7 @@ describe('Request template',() => {
251251
}
252252
}
253253
});
254-
assert.deepEqual(evaluatedNoDefaults.uri, '/path/value');
254+
assert.deepEqual(evaluatedNoDefaults.uri.toString(), '/path/value');
255255
assert.deepEqual(evaluatedNoDefaults.body.complete, 'value');
256256
assert.deepEqual(evaluatedNoDefaults.body.partial, '/test/value');
257257
assert.deepEqual(evaluatedNoDefaults.body.withObject, 'value');
@@ -261,7 +261,7 @@ describe('Request template',() => {
261261
body: {}
262262
}
263263
});
264-
assert.deepEqual(evaluatedDefaults.uri, '/path/foo%2Fbar');
264+
assert.deepEqual(evaluatedDefaults.uri.toString(), '/path/foo%2Fbar');
265265
assert.deepEqual(evaluatedDefaults.body.complete, 'default');
266266
assert.deepEqual(evaluatedDefaults.body.partial, '/test/default');
267267
assert.deepEqual(evaluatedDefaults.body.withObject, {temp: 'default'});
@@ -452,12 +452,10 @@ describe('Request template',() => {
452452
}
453453
};
454454
var result = template.expand({ request: request, options: { host: '/a/host' } });
455-
assert.deepEqual(result, {
456-
uri: '/a/host/a%2Ffoo/',
457-
headers: {
455+
assert.deepEqual(result.uri.toString(), '/a/host/a%2Ffoo/');
456+
assert.deepEqual(result.headers, {
458457
bar: 'a/bar',
459458
baz: 'a%2Fbaz',
460-
}
461459
});
462460
});
463461

@@ -481,12 +479,10 @@ describe('Request template',() => {
481479
}
482480
};
483481
var result = template.expand({ request: request, options: { host: '/a/host' } });
484-
assert.deepEqual(result, {
485-
uri: '/a/host/a%2Ffoo/',
486-
headers: {
487-
bar: 'a/bar',
488-
baz: 'a/baz',
489-
}
482+
assert.deepEqual(result.uri.toString(), '/a/host/a%2Ffoo/');
483+
assert.deepEqual(result.headers, {
484+
bar: 'a/bar',
485+
baz: 'a/baz',
490486
});
491487
});
492488

@@ -510,42 +506,10 @@ describe('Request template',() => {
510506
}
511507
};
512508
var result = template.expand({ request: request, options: { host: '/a/host' } });
513-
assert.deepEqual(result, {
514-
uri: '/a/host/a%2Ffoo/',
515-
headers: {
516-
bar: 'a/bar',
517-
baz: 'a/baz',
518-
}
519-
});
520-
});
521-
522-
it('should support newlines in expressions',() => {
523-
var template = new Template({
524-
uri: '{{options.host}}/{foo}/',
525-
headers: '{{filter(\nrequest.headers, \n["bar","baz"])\n }}',
526-
});
527-
var request = {
528-
headers: {
529-
bar: 'a/bar',
530-
baz: 'a/baz',
531-
boo: 'a/boo',
532-
},
533-
uri: 'test.com',
534-
body: {
535-
field: 'method'
536-
},
537-
params: {
538-
foo: 'a/foo',
539-
}
540-
};
541-
var result = template.expand({ request: request, options: { host: '/a/host' } });
542-
assert.deepEqual(result, {
543-
uri: '/a/host/a%2Ffoo/',
544-
headers: {
545-
bar: 'a/bar',
546-
// FIXME: This will change in the future!
547-
baz: 'a/baz',
548-
}
509+
assert.deepEqual(result.uri.toString(), '/a/host/a%2Ffoo/');
510+
assert.deepEqual(result.headers, {
511+
bar: 'a/bar',
512+
baz: 'a/baz',
549513
});
550514
});
551515

@@ -564,10 +528,8 @@ describe('Request template',() => {
564528
}
565529
}
566530
});
567-
assert.deepEqual(result, {
568-
uri: 'http://test.com/0',
569-
headers: 'test_0'
570-
});
531+
assert.deepEqual(result.uri.toString(), 'http://test.com/0');
532+
assert.deepEqual(result.headers, 'test_0');
571533
});
572534

573535
it('should support date formats',() => {
@@ -604,4 +566,28 @@ describe('Request template',() => {
604566
}
605567
});
606568
});
569+
it('should return URI object for non-templated URIs', () => {
570+
const TEST_URI = '/test/wiki/uri';
571+
const template = new Template({
572+
uri: TEST_URI
573+
});
574+
const result = template.expand({ request: {} });
575+
assert.deepEqual(result.uri.constructor.name, 'URI');
576+
assert.deepEqual(result.uri.toString(), TEST_URI);
577+
});
578+
it('should return URI object for complex templated URIs', () => {
579+
const template = new Template({
580+
uri: '/test/{param1}.{param2}'
581+
});
582+
const result = template.expand({
583+
request: {
584+
params: {
585+
param1: '1',
586+
param2: '2'
587+
}
588+
}
589+
});
590+
assert.deepEqual(result.uri.constructor.name, 'URI');
591+
assert.deepEqual(result.uri.toString(), '/test/1.2');
592+
});
607593
});

0 commit comments

Comments
 (0)