Fix: Cast to string then eval

This commit is contained in:
Matt Visnovsky 2024-06-10 12:25:55 -06:00
parent 23f844d871
commit 82352910bf
2 changed files with 12 additions and 12 deletions

View file

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

View file

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