forked from jsnbuchanan/crowd-funder-for-time-pwa
- 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.
138 lines
3.7 KiB
Bash
Executable File
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 |