From af4845fb98c2b0d580c14894d339652bbdd7cc90 Mon Sep 17 00:00:00 2001 From: Kjell-Morten Date: Thu, 21 Sep 2017 19:01:33 +0200 Subject: [PATCH] Fix bug with filter function with no arguments --- lib/generate-test.js | 14 +++++++++++++ lib/generate.js | 3 ++- package.json | 2 ++ tests/template-test.js | 47 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 tests/template-test.js diff --git a/lib/generate-test.js b/lib/generate-test.js index fb4db2b..993c112 100644 --- a/lib/generate-test.js +++ b/lib/generate-test.js @@ -199,6 +199,20 @@ test('should generate with several filter functions', (t) => { t.is(ret, expected) }) +test('should generate with filter function and no arguments', (t) => { + const lower = (value) => value.toLowerCase() + const compiled = [ + 'http://example.com/', + {param: 'section', filters: [{function: lower}]} + ] + const params = {section: 'News'} + const expected = 'http://example.com/news' + + const ret = generate(compiled, params) + + t.is(ret, expected) +}) + test('should skip filters without function', (t) => { const append = (value, string) => value + string const compiled = [ diff --git a/lib/generate.js b/lib/generate.js index 14b2171..0c5b85e 100644 --- a/lib/generate.js +++ b/lib/generate.js @@ -20,7 +20,8 @@ const expandParam = (params, useKeys = false, delimiter = ',') => ({ if (filters) { value = filters.reduce((value, filter) => { if (typeof filter.function === 'function') { - return filter.function(value, ...filter.args) + const args = filter.args || [] + return filter.function(value, ...args) } return value }, value) diff --git a/package.json b/package.json index 6ff545e..a902e5d 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,11 @@ }, "ava": { "files": [ + "tests/**/*-test.js", "lib/**/*-test.js" ], "source": [ + "index.js", "lib/**/!(*-test).js" ], "babel": { diff --git a/tests/template-test.js b/tests/template-test.js new file mode 100644 index 0000000..e3dd487 --- /dev/null +++ b/tests/template-test.js @@ -0,0 +1,47 @@ +import test from 'ava' + +import {compile, generate} from '..' + +test('should generate uri with replacement', (t) => { + const template = 'http://example.com/{section}{?first,max}' + const params = {section: 'news', first: 40, max: 20} + const expected = 'http://example.com/news?first=40&max=20' + + const compiled = compile(template) + const uri = generate(compiled, params) + + t.is(uri, expected) +}) + +test('should generate uri with optional parameters', (t) => { + const template = 'http://example.com/{section}{?first?,max?}' + const params = {section: 'news', max: 20} + const expected = 'http://example.com/news?max=20' + + const compiled = compile(template) + const uri = generate(compiled, params) + + t.is(uri, expected) +}) + +test('should generate uri with filter functions', (t) => { + const template = 'http://example.com/{section|append(_archive)}{?letter=name|max(1)|lower}' + const params = {section: 'news', name: 'John F.'} + const expected = 'http://example.com/news_archive?letter=j' + + const compiled = compile(template) + const uri = generate(compiled, params) + + t.is(uri, expected) +}) + +test('should generate empty string from empty string template', (t) => { + const template = '' + const params = {} + const expected = '' + + const compiled = compile(template) + const uri = generate(compiled, params) + + t.is(uri, expected) +})