Fix: Cast to string then eval

pull/4717/head
Matt Visnovsky 7 months ago
parent 23f844d871
commit 82352910bf

@ -413,24 +413,24 @@ async function evaluateJsonQuery(data, jsonPath, jsonPathOperator, expectedValue
case ">=": case ">=":
case "<": case "<":
case "<=": case "<=":
jsonQueryExpression = `$.value ${jsonPathOperator} $.expected`; jsonQueryExpression = `$number($.value) ${jsonPathOperator} $number($.expected)`;
break; break;
case "!=": case "!=":
jsonQueryExpression = "$string($.value) != $string($.expected)"; jsonQueryExpression = "$.value != $.expected";
break; break;
case "==": case "==":
jsonQueryExpression = "$string($.value) = $string($.expected)"; jsonQueryExpression = "$.value = $.expected";
break; break;
case "contains": case "contains":
jsonQueryExpression = "$contains($string($.value), $string($.expected))"; jsonQueryExpression = "$contains($.value, $.expected)";
break; break;
default: default:
throw new Error(`Invalid condition ${jsonPathOperator}`); throw new Error(`Invalid condition ${jsonPathOperator}`);
} }
const expression = jsonata(jsonQueryExpression); const expression = jsonata(jsonQueryExpression);
const status = await expression.evaluate({ const status = await expression.evaluate({
value: response, value: response.toString(),
expected: expectedValue expected: expectedValue.toString()
}); });
if (response === undefined || status === undefined) { if (response === undefined || status === undefined) {
throw new Error("Query evaluation returned undefined. Check query syntax and the structure of the response data"); throw new Error("Query evaluation returned undefined. Check query syntax and the structure of the response data");

@ -674,16 +674,16 @@ export async function evaluateJsonQuery(data: any, jsonPath: string, jsonPathOpe
case ">=": case ">=":
case "<": case "<":
case "<=": case "<=":
jsonQueryExpression = `$.value ${jsonPathOperator} $.expected`; jsonQueryExpression = `$number($.value) ${jsonPathOperator} $number($.expected)`;
break; break;
case "!=": case "!=":
jsonQueryExpression = "$string($.value) != $string($.expected)"; jsonQueryExpression = "$.value != $.expected";
break; break;
case "==": case "==":
jsonQueryExpression = "$string($.value) = $string($.expected)"; jsonQueryExpression = "$.value = $.expected";
break; break;
case "contains": case "contains":
jsonQueryExpression = "$contains($string($.value), $string($.expected))"; jsonQueryExpression = "$contains($.value, $.expected)";
break; break;
default: default:
throw new Error(`Invalid condition ${jsonPathOperator}`); throw new Error(`Invalid condition ${jsonPathOperator}`);
@ -692,8 +692,8 @@ export async function evaluateJsonQuery(data: any, jsonPath: string, jsonPathOpe
// Evaluate the JSON Query Expression // Evaluate the JSON Query Expression
const expression = jsonata(jsonQueryExpression); const expression = jsonata(jsonQueryExpression);
const status = await expression.evaluate({ const status = await expression.evaluate({
value: response, value: response.toString(),
expected: expectedValue expected: expectedValue.toString()
}); });
if (response === undefined || status === undefined) { if (response === undefined || status === undefined) {

Loading…
Cancel
Save