templating: fix queries contained regex with braces, fixes #432

This commit is contained in:
Alexander Zobnin
2017-07-25 12:06:37 +03:00
parent b1fafc23a7
commit 996bc9e1d1
7 changed files with 152 additions and 7 deletions

View File

@@ -88,4 +88,54 @@ describe('Utils', () => {
done(); done();
}); });
}); });
describe('splitTemplateQuery()', () => {
// Backward compatibility
it('should properly split query in old format', (done) => {
let test_cases = [
{
query: `/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/`,
expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
},
{
query: `a.b.c.d`,
expected: ['a', 'b', 'c', 'd']
}
];
_.each(test_cases, test_case => {
let splitQuery = utils.splitTemplateQuery(test_case.query);
expect(splitQuery).to.eql(test_case.expected);
});
done();
});
it('should properly split query', (done) => {
let test_cases = [
{
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/}`,
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
},
{
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/}`,
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
},
{
query: `{a}{b}{c}{d}`,
expected: ['a', 'b', 'c', 'd']
},
{
query: `{a}{b.c.d}`,
expected: ['a', 'b.c.d']
}
];
_.each(test_cases, test_case => {
let splitQuery = utils.splitTemplateQuery(test_case.query);
expect(splitQuery).to.eql(test_case.expected);
});
done();
});
});
}); });

View File

@@ -99,7 +99,7 @@ System.register(['lodash', 'moment'], function (_export, _context) {
* {group}{host.com} -> [group, host.com] * {group}{host.com} -> [group, host.com]
*/ */
function splitTemplateQuery(query) { function splitTemplateQuery(query) {
var splitPattern = /{[^{}]*}/g; var splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
var split = void 0; var split = void 0;
if (isContainsBraces(query)) { if (isContainsBraces(query)) {
@@ -117,7 +117,8 @@ System.register(['lodash', 'moment'], function (_export, _context) {
_export('splitTemplateQuery', splitTemplateQuery); _export('splitTemplateQuery', splitTemplateQuery);
function isContainsBraces(query) { function isContainsBraces(query) {
return query.includes('{') && query.includes('}'); var bracesPattern = /^\{.+\}$/;
return bracesPattern.test(query);
} }
// Pattern for testing regex // Pattern for testing regex

File diff suppressed because one or more lines are too long

View File

@@ -86,4 +86,46 @@ describe('Utils', function () {
done(); done();
}); });
}); });
describe('splitTemplateQuery()', function () {
// Backward compatibility
it('should properly split query in old format', function (done) {
var test_cases = [{
query: '/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9{2}/',
expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
}, {
query: 'a.b.c.d',
expected: ['a', 'b', 'c', 'd']
}];
_lodash2.default.each(test_cases, function (test_case) {
var splitQuery = utils.splitTemplateQuery(test_case.query);
expect(splitQuery).to.eql(test_case.expected);
});
done();
});
it('should properly split query', function (done) {
var test_cases = [{
query: '{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9]*/}',
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
}, {
query: '{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(w|d)*-alu-[0-9]{2}/}',
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
}, {
query: '{a}{b}{c}{d}',
expected: ['a', 'b', 'c', 'd']
}, {
query: '{a}{b.c.d}',
expected: ['a', 'b.c.d']
}];
_lodash2.default.each(test_cases, function (test_case) {
var splitQuery = utils.splitTemplateQuery(test_case.query);
expect(splitQuery).to.eql(test_case.expected);
});
done();
});
});
}); });

View File

@@ -120,7 +120,7 @@ function escapeMacro(macro) {
* {group}{host.com} -> [group, host.com] * {group}{host.com} -> [group, host.com]
*/ */
function splitTemplateQuery(query) { function splitTemplateQuery(query) {
var splitPattern = /{[^{}]*}/g; var splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
var split = void 0; var split = void 0;
if (isContainsBraces(query)) { if (isContainsBraces(query)) {
@@ -136,7 +136,8 @@ function splitTemplateQuery(query) {
} }
function isContainsBraces(query) { function isContainsBraces(query) {
return query.includes('{') && query.includes('}'); var bracesPattern = /^\{.+\}$/;
return bracesPattern.test(query);
} }
// Pattern for testing regex // Pattern for testing regex

View File

@@ -88,4 +88,54 @@ describe('Utils', () => {
done(); done();
}); });
}); });
describe('splitTemplateQuery()', () => {
// Backward compatibility
it('should properly split query in old format', (done) => {
let test_cases = [
{
query: `/alu/./tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/`,
expected: ['/alu/', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9{2}/']
},
{
query: `a.b.c.d`,
expected: ['a', 'b', 'c', 'd']
}
];
_.each(test_cases, test_case => {
let splitQuery = utils.splitTemplateQuery(test_case.query);
expect(splitQuery).to.eql(test_case.expected);
});
done();
});
it('should properly split query', (done) => {
let test_cases = [
{
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/}`,
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]*/']
},
{
query: `{alu}{/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/}`,
expected: ['alu', '/tw-(nyc|que|brx|dwt|brk)-sta_(\w|\d)*-alu-[0-9]{2}/']
},
{
query: `{a}{b}{c}{d}`,
expected: ['a', 'b', 'c', 'd']
},
{
query: `{a}{b.c.d}`,
expected: ['a', 'b.c.d']
}
];
_.each(test_cases, test_case => {
let splitQuery = utils.splitTemplateQuery(test_case.query);
expect(splitQuery).to.eql(test_case.expected);
});
done();
});
});
}); });

View File

@@ -93,7 +93,7 @@ function escapeMacro(macro) {
* {group}{host.com} -> [group, host.com] * {group}{host.com} -> [group, host.com]
*/ */
export function splitTemplateQuery(query) { export function splitTemplateQuery(query) {
let splitPattern = /{[^{}]*}/g; let splitPattern = /\{[^\{\}]*\}|\{\/.*\/\}/g;
let split; let split;
if (isContainsBraces(query)) { if (isContainsBraces(query)) {
@@ -109,7 +109,8 @@ export function splitTemplateQuery(query) {
} }
function isContainsBraces(query) { function isContainsBraces(query) {
return query.includes('{') && query.includes('}'); let bracesPattern = /^\{.+\}$/;
return bracesPattern.test(query);
} }
// Pattern for testing regex // Pattern for testing regex