Skip to content

Commit 33ddafa

Browse files
committed
Add contains eq and has key methods
1 parent e9e9444 commit 33ddafa

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

api-test.sh

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,16 +171,84 @@ api_factory() {
171171

172172
test_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+
184252
run() {
185253
for arg in "$@"; do
186254
case $arg in

0 commit comments

Comments
 (0)