Files
crowd-funder-from-jason/test-scripts/run-deeplink-tests.sh
Matthew Raymer cbf704dcf7 feat: add claim route deep linking support
- Add claim route to deep link schema
- Add claim view test to deeplink tests
- Update build docs for clean web builds
- Add rm -rf dist to build steps

Technical Changes:
- Add claim schema with id parameter
- Add claim route test using generated claim ID
- Add clean step before web/capacitor builds
- Update Android build instructions

This adds support for deep linking to claim views and
improves the build process reliability by ensuring clean
builds. The claim route allows direct navigation to claim
details via external links.
2025-03-10 13:00:54 +00:00

145 lines
4.0 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/$(jq -r .claim_id <<< "$CLAIM_DETAILS")" \
"Testing claim view"
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