Files
crowd-funder-from-jason/test-scripts/run-deeplink-tests.sh
Matthew Raymer ad9b4836cd feat: add JSON output files and improve test flow
- Add .generated directory for test artifacts
- Save key derivation data to key_derivation.json
- Save account initialization to account_init.json
- Save registration data to registration.json
- Save claim details to claim_details.json
- Save test environment to test-env.sh
- Save contacts data to contacts.json
- Add proper error handling for file operations
- Improve deeplink test flow with JSON-based data
- Add color output and better status messages
- Add ADB device detection and fallback to print mode

Technical Changes:
- Add file system operations with proper error handling
- Standardize JSON output format across Python/TypeScript
- Update test flow to use generated JSON files
- Add proper typing for registration response
- Improve error reporting and debug output

This improves the test workflow by saving all intermediate
data as JSON files that can be used by other test scripts.
The deeplink testing now uses this data instead of environment
variables for better reliability.
2025-03-08 13:01:15 +00:00

138 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
# File header documentation
# @file run-deeplink-tests.sh
# @brief Automated deeplink testing script using generated JSON files and ADB
# @author Matthew Raymer
# @date $(date +%Y-%m-%d)
# Color definitions
BLUE='\033[0;34m'
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Parse command line arguments
TIMEOUT=5
TEST_MODE="execute" # Default to execute mode
while getopts "t:p" opt; do
case $opt in
t) TIMEOUT=$OPTARG ;;
p) TEST_MODE="print" ;;
\?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
esac
done
# Verify .generated directory exists
if [ ! -d .generated ]; then
echo -e "${RED}Error: .generated directory not found${NC}"
echo "Please run the DID generation script first"
exit 1
fi
# Function to read and validate JSON files
validate_json_files() {
local required_files=("test-env.sh" "claim_details.json" "contacts.json")
for file in "${required_files[@]}"; do
if [ ! -f ".generated/$file" ]; then
echo -e "${RED}Error: Missing required file .generated/$file${NC}"
return 1
fi
done
return 0
}
# Function to URL encode string
urlencode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c o
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
# Function to execute or print deeplink
execute_deeplink() {
local url="$1"
local description="$2"
local encoded_url=$(urlencode "$url")
echo -e "\n${BLUE}Testing: $description${NC}"
if [ "$TEST_MODE" = "print" ]; then
echo -e "${YELLOW}Deep Link URL:${NC}"
echo "$url"
echo -e "${YELLOW}Encoded URL:${NC}"
echo "$encoded_url"
echo "---"
else
echo "URL: $url"
if adb shell am start -a android.intent.action.VIEW -d "$encoded_url"; then
echo -e "${GREEN}Success: Deeplink executed${NC}"
sleep "$TIMEOUT"
else
echo -e "${RED}Error: Failed to execute deeplink${NC}"
return 1
fi
fi
}
# Main test sequence
main() {
# Validate environment and files
if ! validate_json_files; then
exit 1
fi
# Source environment variables
source .generated/test-env.sh
# Load JSON data
CLAIM_DETAILS=$(cat .generated/claim_details.json)
CONTACTS=$(cat .generated/contacts.json)
# 1. Claim-based deeplinks
execute_deeplink "timesafari://claim-cert/$(jq -r .claim_id <<< "$CLAIM_DETAILS")" \
"Testing claim certificate view"
execute_deeplink "timesafari://claim-add-raw/$(jq -r .claim_id <<< "$CLAIM_DETAILS")" \
"Testing raw claim addition"
# 2. DID-based deeplinks
execute_deeplink "timesafari://did/$CONTACT1_DID" \
"Testing DID view"
execute_deeplink "timesafari://contact-edit/$CONTACT1_DID" \
"Testing contact editing"
# 3. JSON-based deeplinks
execute_deeplink "timesafari://contacts/import?contacts=$(jq -r @uri <<< "$CONTACTS")" \
"Testing contacts import"
echo -e "\n${GREEN}All deeplink tests completed${NC}"
}
# Check for adb if not in print mode
if [ "$TEST_MODE" = "execute" ]; then
if ! command -v adb >/dev/null 2>&1; then
echo -e "${YELLOW}Warning: adb not found, switching to print mode${NC}"
TEST_MODE="print"
elif [ -z "$(adb devices | grep -v List | grep device)" ]; then
echo -e "${YELLOW}Warning: no devices/emulators found, switching to print mode${NC}"
TEST_MODE="print"
fi
fi
# Execute main test sequence
main