From 58b9b17944fc4074683a5ee012623185f5816467 Mon Sep 17 00:00:00 2001 From: TwinProduction Date: Thu, 15 Oct 2020 22:44:34 -0400 Subject: [PATCH] Trim down size of condition to display on invalid path --- core/condition.go | 10 +++++++++- core/condition_test.go | 13 +++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/core/condition.go b/core/condition.go index 1a2f5347..27e11caf 100644 --- a/core/condition.go +++ b/core/condition.go @@ -82,7 +82,15 @@ func (c *Condition) evaluate(result *Result) bool { // If the condition isn't a success, return what the resolved condition was too if !success { log.Printf("[Condition][evaluate] Condition '%s' did not succeed because '%s' is false", condition, resolvedCondition) - conditionToDisplay = fmt.Sprintf("%s (%s)", condition, resolvedCondition) + // Check if the resolved condition was an invalid path + isResolvedConditionInvalidPath := strings.ReplaceAll(resolvedCondition, fmt.Sprintf("%s ", InvalidConditionElementSuffix), "") == condition + if isResolvedConditionInvalidPath { + // Since, in the event of an invalid path, the resolvedCondition contains the condition itself, + // we'll only display the resolvedCondition + conditionToDisplay = resolvedCondition + } else { + conditionToDisplay = fmt.Sprintf("%s (%s)", condition, resolvedCondition) + } } result.ConditionResults = append(result.ConditionResults, &ConditionResult{Condition: conditionToDisplay, Success: success}) return success diff --git a/core/condition_test.go b/core/condition_test.go index d53e0e1f..2a6ea8b9 100644 --- a/core/condition_test.go +++ b/core/condition_test.go @@ -113,6 +113,19 @@ func TestCondition_evaluateWithBodyJsonPathComplex(t *testing.T) { } } +func TestCondition_evaluateWithInvalidBodyJsonPathComplex(t *testing.T) { + expectedResolvedCondition := "[BODY].data.name (INVALID) == john" + condition := Condition("[BODY].data.name == john") + result := &Result{Body: []byte("{\"data\": {\"id\": 1}}")} + condition.evaluate(result) + if result.ConditionResults[0].Success { + t.Errorf("Condition '%s' should have been a failure, because the path was invalid", condition) + } + if result.ConditionResults[0].Condition != expectedResolvedCondition { + t.Errorf("Condition '%s' should have resolved to '%s', but resolved to '%s' instead", condition, expectedResolvedCondition, result.ConditionResults[0].Condition) + } +} + func TestCondition_evaluateWithBodyJsonPathDoublePlaceholders(t *testing.T) { condition := Condition("[BODY].user.firstName != [BODY].user.lastName") result := &Result{Body: []byte("{\"user\": {\"firstName\": \"john\", \"lastName\": \"doe\"}}")}