@@ -171,16 +171,84 @@ api_factory() {
171171
172172test_factory () {
173173 for TEST_CASE in $@ ; do
174+ API_ERROR=0
174175 echo " ${BOLD} Testing Case:${RESET} $TEST_CASE "
175176 echo_v " ${BOLD} Description: ${RESET} $( jq -r " .testCases.$TEST_CASE .description" $FILE ) "
176177 echo_v " ${BOLD} Action: ${RESET} $( jq -r " .testCases.$TEST_CASE .method //\" GET\" | ascii_upcase" $FILE ) $( jq -r " .testCases.$TEST_CASE .path" $FILE ) "
177178 call_api $TEST_CASE
179+ if [[ $API_ERROR == 1 ]]; then
180+ return
181+ 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"
178202
203+ # BODY_EQ=$(jq -r ".testCases.$TEST_CASE.test.body.eq" $FILE)
204+ # check_eq "$BODY_EQ" "$RESPONSE_BODY"
179205 echo " "
180206 echo " "
181207 done
182208}
183209
210+ contains () {
211+ jq --argjson a " $1 " --argjson b " $2 " -n ' $b | contains($a)'
212+ # 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')
213+
214+ # if [ -z "$common" ]; then
215+ # echo "\$common is NULL"
216+ # return 1
217+ # fi
218+ # check_eq "$1" "$common"
219+ }
220+
221+ has_key () {
222+ # 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):
224+ def tos: if type == "number" then . else "\"\(tojson)\"" end;
225+ reduce .[] as $segment (""; .
226+ + ($segment
227+ | if type == "string" then "." + . else "[\(.)]" end));
228+
229+
230+ paths(scalars) as $p
231+ | getpath($p) as $v
232+ | $p | path2text($v)' <<< " $2" )
233+ for path in $1 ; do
234+ for data_path in $paths ; do
235+ local FOUND=0
236+ if [[ $path == $data_path ]]; then
237+ echo " FOUND: $path "
238+ FOUND=1
239+ break
240+ fi
241+ done
242+
243+ if [[ $FOUND == 0 ]]; then
244+ echo " NOT FOUND: $path "
245+ fi
246+ done
247+ }
248+ check_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"
250+ }
251+
184252run () {
185253 for arg in " $@ " ; do
186254 case $arg in
0 commit comments