[DynamicJson] Catch jsonpath parse error (#3776)

Closes #3772
This commit is contained in:
Paul Melnikow
2019-07-24 22:07:23 -05:00
committed by GitHub
parent c683baa4fb
commit ead56cdf49
2 changed files with 23 additions and 2 deletions

View File

@@ -4,7 +4,7 @@ const Joi = require('@hapi/joi')
const jp = require('jsonpath')
const { renderDynamicBadge, errorMessages } = require('../dynamic-common')
const { createRoute } = require('./dynamic-helpers')
const { BaseJsonService, InvalidResponse } = require('..')
const { BaseJsonService, InvalidParameter, InvalidResponse } = require('..')
module.exports = class DynamicJson extends BaseJsonService {
static get category() {
@@ -28,7 +28,18 @@ module.exports = class DynamicJson extends BaseJsonService {
errorMessages,
})
const values = jp.query(data, pathExpression)
let values
try {
values = jp.query(data, pathExpression)
} catch (e) {
if (e.message.startsWith('Lexical error')) {
throw new InvalidParameter({
prettyMessage: 'unparseable jsonpath query',
})
} else {
throw e
}
}
if (!values.length) {
throw new InvalidResponse({ prettyMessage: 'no result' })

View File

@@ -139,3 +139,13 @@ t.create('JSON from url | request should set Accept header')
.after(() => {
expect(headers).to.have.property('accept', 'application/json')
})
t.create('JSON from url | invalid query')
.get(
'.json?url=https://github.com/badges/shields/raw/master/package.json&query=$[?'
)
.expectBadge({
label: 'custom badge',
message: 'unparseable jsonpath query',
color: 'red',
})