@@ -179,36 +179,39 @@ test_factory() {
179179 if [[ $API_ERROR == 1 ]]; then
180180 return
181181 fi
182- # echo "$RESPONSE_HEADER"
183- # Has Key
184- # jq --argjson header "$RESPONSE_HEADER" ".testCases.$TEST_CASE.test.header.contains | keys as \$check_key | \$header | keys - \$check_key | map([.]) |. as \$arr | \$header | delpaths(\$arr)" $FILE
185-
186- HEADER_CONTAINS=$( jq -r " .testCases.$TEST_CASE .test.header.hasKey" $FILE )
187- EADER_HAS_KEY=$( jq " .testCases.$TEST_CASE .test.header.hasKey | .[]" $FILE )
188- echo $EADER_HAS_KEY
189- # contains "$HEADER_CONTAINS" "$RESPONSE_HEADER"
190- has_key " $EADER_HAS_KEY " " $RESPONSE_HEADER "
191- # jq --arg header "$RESPONSE_HEADER" ".testCases.$TEST_CASE.test.header.contains as \$check | \
192- # \$header | fromjson as \$header |
193- # \$check | keys as \$check_key |
194- # \$header | keys |
195- # if contains(\$check_key) then
196- # \$check
197- # else false
198- # end " $FILE
199-
200- # BODY_EQ=$(jq -r ".testCases.$TEST_CASE.test.body.eq" $FILE)
201- # check_eq "$BODY_EQ" "$RESPONSE_BODY"
202-
203- # BODY_EQ=$(jq -r ".testCases.$TEST_CASE.test.body.eq" $FILE)
204- # check_eq "$BODY_EQ" "$RESPONSE_BODY"
182+ echo " Testing Header: "
183+ test_runner $TEST_CASE " header"
184+
185+ echo " Testing BODY: "
186+ test_runner $TEST_CASE " body"
187+
205188 echo " "
206189 echo " "
207190 done
208191}
209192
193+ test_runner () {
194+ for test in " " contains eq hasKey[]" " ; do
195+ local TEST_SCENARIO=$( jq -r " .testCases.$1 .test.$2 .$test ? | select(. !=null)" $FILE )
196+ if [[ -z $TEST_SCENARIO ]]; then
197+ continue
198+ fi
199+ if [[ $test == " contains" ]]; then
200+ echo " CHECKING CONTAINS: "
201+ contains " $TEST_SCENARIO " " $RESPONSE_BODY "
202+ elif [[ $test == " eq" ]]; then
203+ echo " CHECKING eq: "
204+ check_eq " $TEST_SCENARIO " " $RESPONSE_BODY "
205+ else
206+ echo " CHECKING has_key: "
207+ has_key " $TEST_SCENARIO " " $RESPONSE_BODY "
208+ fi
209+ echo " "
210+ done
211+ }
212+
210213contains () {
211- jq --argjson a " $1 " --argjson b " $2 " -n ' $b | contains($a)'
214+ jq --argjson a " $1 " --argjson b " $2 " -n ' $a | select(. != null) | $ b | contains($a)'
212215 # local common=$(jq --argjson a "$1" --argjson b "$2" -n '$a | select( length != 0) | keys as $check_key | $b | keys - $check_key | map([.]) | . as $arr | $b | delpaths($arr) | if . != {} then . else null end')
213216
214217 # if [ -z "$common" ]; then
@@ -220,7 +223,7 @@ contains() {
220223
221224has_key () {
222225 # jq -argjson a "$1" --argjson b "$2" -n '$b | keys as $check_key | $header | keys | contains($check_key)'
223- local paths=$( jq ' def path2text($value):
226+ local paths=$( jq -r ' def path2text($value):
224227 def tos: if type == "number" then . else "\"\(tojson)\"" end;
225228 reduce .[] as $segment (""; .
226229 + ($segment
@@ -233,20 +236,21 @@ paths(scalars) as $p
233236 for path in $1 ; do
234237 for data_path in $paths ; do
235238 local FOUND=0
236- if [[ $path == $data_path ]]; then
239+ if [[ " $path " == " $data_path " ]]; then
237240 echo " FOUND: $path "
238241 FOUND=1
239242 break
240243 fi
241244 done
242245
243246 if [[ $FOUND == 0 ]]; then
244- echo " NOT FOUND: $path "
247+ echo " NOT FOUND: $path "
245248 fi
246249 done
247250}
251+
248252check_eq () {
249- jq --argjson a " $1 " --argjson b " $2 " -n " def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); (\ $ a | (post_recurse | arrays) |= sort) as \ $ a | (\ $ b | (post_recurse | arrays) |= sort) as \ $ b | \ $ a == \$ b "
253+ jq --argjson a " $1 " --argjson b " $2 " -n ' def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); ($a | (post_recurse | arrays) |= sort) as $a | ($b | (post_recurse | arrays) |= sort) as $b | $a == $b '
250254}
251255
252256run () {
0 commit comments