forked from jsnbuchanan/crowd-funder-for-time-pwa
- Add colon (:) to safe characters in URL encoding to preserve DID format - Add test case for simple DID route with "test" identifier - Improve test descriptions for DID-based deeplinks - Fix typo in test sequence (/d) The URL encoding now correctly handles DID format (did:ethr:0x...) while still encoding other special characters. Added basic DID test case to verify route handling before testing with actual DID values.
142 lines
3.9 KiB
Bash
Executable File
142 lines
3.9 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"
|
|
|
|
echo -e "\n${BLUE}Testing: $description${NC}"
|
|
echo -e "${YELLOW}Original URL: $url${NC}"
|
|
|
|
if [ "$TEST_MODE" = "print" ]; then
|
|
echo "---"
|
|
else
|
|
# Stop the app before executing the deep link
|
|
adb shell am force-stop app.timesafari.app
|
|
sleep 1 # Give it a moment to fully stop
|
|
|
|
if adb shell am start -W -a android.intent.action.VIEW \
|
|
-d "$url" \
|
|
-c android.intent.category.BROWSABLE; 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/test" \
|
|
"Testing DID view with test identifier"
|
|
/d
|
|
execute_deeplink "timesafari://did/$CONTACT1_DID" \
|
|
"Testing DID view with contact DID"
|
|
|
|
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 |