Skip to content

Commit 29b072c

Browse files
Add CLI test script
1 parent 2be25a7 commit 29b072c

1 file changed

Lines changed: 224 additions & 0 deletions

File tree

Scripts/test_cli.sh

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
#!/bin/bash
2+
#
3+
# AppBox CLI Test Script
4+
# Tests multiple upload scenarios with various option combinations.
5+
# Replace dummy values with real ones before running.
6+
#
7+
8+
set -e
9+
10+
# ============================================================
11+
# CONFIGURATION - Replace these with real values before running
12+
# ============================================================
13+
14+
IPA_PATH="/path/to/your/small-app.ipa"
15+
LARGE_IPA_PATH="/path/to/your/large-app.ipa"
16+
EMAILS="dev1@example.com,dev2@example.com"
17+
SINGLE_EMAIL="tester@example.com"
18+
MESSAGE="New build {BUILD_NAME} v{BUILD_VERSION} ({BUILD_NUMBER}) is ready for testing!"
19+
WEBHOOK_MESSAGE="🚀 *{BUILD_NAME}* v{BUILD_VERSION} ({BUILD_NUMBER}) uploaded!\nInstall: {SHARE_URL}"
20+
SLACK_WEBHOOK="https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
21+
MSTEAMS_WEBHOOK="https://outlook.office.com/webhook/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXX/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
22+
DB_FOLDER="TestScriptBuilds"
23+
24+
# Path to appboxcli binary (adjust if needed)
25+
CLI="appboxcli"
26+
27+
# ============================================================
28+
# TEST HELPERS
29+
# ============================================================
30+
31+
PASS_COUNT=0
32+
FAIL_COUNT=0
33+
SKIP_COUNT=0
34+
TEST_NUM=0
35+
36+
RED='\033[0;31m'
37+
GREEN='\033[0;32m'
38+
YELLOW='\033[1;33m'
39+
CYAN='\033[0;36m'
40+
NC='\033[0m' # No Color
41+
42+
print_header() {
43+
echo ""
44+
echo "============================================================"
45+
echo " AppBox CLI Test Suite"
46+
echo "============================================================"
47+
echo ""
48+
}
49+
50+
run_test() {
51+
local test_name="$1"
52+
shift
53+
local cmd="$@"
54+
55+
TEST_NUM=$((TEST_NUM + 1))
56+
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
57+
echo -e "${CYAN}TEST $TEST_NUM: $test_name${NC}"
58+
echo -e "${CYAN}CMD: $cmd${NC}"
59+
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
60+
61+
if eval "$cmd"; then
62+
echo -e "${GREEN}✅ PASSED: $test_name${NC}"
63+
PASS_COUNT=$((PASS_COUNT + 1))
64+
else
65+
local exit_code=$?
66+
echo -e "${RED}❌ FAILED: $test_name (exit code: $exit_code)${NC}"
67+
FAIL_COUNT=$((FAIL_COUNT + 1))
68+
fi
69+
echo ""
70+
}
71+
72+
skip_test() {
73+
local test_name="$1"
74+
local reason="$2"
75+
76+
TEST_NUM=$((TEST_NUM + 1))
77+
echo -e "${YELLOW}⏭️ SKIPPED TEST $TEST_NUM: $test_name${NC}"
78+
echo -e "${YELLOW} Reason: $reason${NC}"
79+
SKIP_COUNT=$((SKIP_COUNT + 1))
80+
echo ""
81+
}
82+
83+
print_summary() {
84+
echo ""
85+
echo "============================================================"
86+
echo " TEST SUMMARY"
87+
echo "============================================================"
88+
echo -e " Total: $TEST_NUM"
89+
echo -e " ${GREEN}Passed: $PASS_COUNT${NC}"
90+
echo -e " ${RED}Failed: $FAIL_COUNT${NC}"
91+
echo -e " ${YELLOW}Skipped: $SKIP_COUNT${NC}"
92+
echo "============================================================"
93+
echo ""
94+
95+
if [ $FAIL_COUNT -gt 0 ]; then
96+
exit 1
97+
fi
98+
}
99+
100+
check_prerequisites() {
101+
echo "Checking prerequisites..."
102+
103+
# Check CLI exists
104+
if ! command -v "$CLI" &>/dev/null; then
105+
echo -e "${RED}ERROR: '$CLI' not found in PATH.${NC}"
106+
echo " Install with: AppBox > Menu > Install CLI"
107+
echo " Or set CLI variable to the full binary path."
108+
exit 1
109+
fi
110+
echo " ✓ CLI found: $(which $CLI)"
111+
112+
# Check IPA exists
113+
if [ ! -f "$IPA_PATH" ]; then
114+
echo -e "${RED}ERROR: IPA file not found at: $IPA_PATH${NC}"
115+
echo " Update IPA_PATH in this script."
116+
exit 1
117+
fi
118+
echo " ✓ IPA found: $IPA_PATH ($(du -h "$IPA_PATH" | cut -f1))"
119+
120+
# Check large IPA exists
121+
if [ ! -f "$LARGE_IPA_PATH" ]; then
122+
echo -e "${YELLOW}WARNING: Large IPA file not found at: $LARGE_IPA_PATH${NC}"
123+
echo " Large file test will be skipped."
124+
else
125+
echo " ✓ Large IPA found: $LARGE_IPA_PATH ($(du -h "$LARGE_IPA_PATH" | cut -f1))"
126+
fi
127+
128+
# Check Dropbox auth (CLI requires AppBox to be authenticated)
129+
echo " ⚠ Make sure AppBox has an active Dropbox session."
130+
echo ""
131+
}
132+
133+
# ============================================================
134+
# TEST CASES
135+
# ============================================================
136+
137+
print_header
138+
check_prerequisites
139+
140+
# ---------- Test 1: Basic upload (IPA only, minimum args) ----------
141+
run_test "Basic upload - IPA only" \
142+
"$CLI --ipa \"$IPA_PATH\""
143+
144+
# ---------- Test 2: Upload with single email ----------
145+
run_test "Upload with single email" \
146+
"$CLI --ipa \"$IPA_PATH\" --emails \"$SINGLE_EMAIL\""
147+
148+
# ---------- Test 3: Upload with multiple emails ----------
149+
run_test "Upload with multiple emails" \
150+
"$CLI --ipa \"$IPA_PATH\" --emails \"$EMAILS\""
151+
152+
# ---------- Test 4: Upload with emails + custom message ----------
153+
run_test "Upload with emails and custom message" \
154+
"$CLI --ipa \"$IPA_PATH\" --emails \"$EMAILS\" --message \"$MESSAGE\""
155+
156+
# ---------- Test 5: Upload with keep same link ----------
157+
run_test "Upload with --keepsamelink" \
158+
"$CLI --ipa \"$IPA_PATH\" --keepsamelink"
159+
160+
# ---------- Test 6: Upload with keep same link + custom folder ----------
161+
run_test "Upload with --keepsamelink and --dbfolder" \
162+
"$CLI --ipa \"$IPA_PATH\" --keepsamelink --dbfolder \"$DB_FOLDER\""
163+
164+
# ---------- Test 7: Upload with Slack webhook ----------
165+
run_test "Upload with Slack webhook" \
166+
"$CLI --ipa \"$IPA_PATH\" --slackwebhook \"$SLACK_WEBHOOK\""
167+
168+
# ---------- Test 8: Upload with Slack webhook + custom message ----------
169+
run_test "Upload with Slack webhook and custom message" \
170+
"$CLI --ipa \"$IPA_PATH\" --slackwebhook \"$SLACK_WEBHOOK\" --webhookmessage \"$WEBHOOK_MESSAGE\""
171+
172+
# ---------- Test 9: Upload with MS Teams webhook ----------
173+
run_test "Upload with MS Teams webhook" \
174+
"$CLI --ipa \"$IPA_PATH\" --msteamswebhook \"$MSTEAMS_WEBHOOK\""
175+
176+
# ---------- Test 10: Upload with MS Teams webhook + custom message ----------
177+
run_test "Upload with MS Teams webhook and custom message" \
178+
"$CLI --ipa \"$IPA_PATH\" --msteamswebhook \"$MSTEAMS_WEBHOOK\" --webhookmessage \"$WEBHOOK_MESSAGE\""
179+
180+
# ---------- Test 11: Upload with both Slack and Teams webhooks ----------
181+
run_test "Upload with both Slack and MS Teams webhooks" \
182+
"$CLI --ipa \"$IPA_PATH\" --slackwebhook \"$SLACK_WEBHOOK\" --msteamswebhook \"$MSTEAMS_WEBHOOK\" --webhookmessage \"$WEBHOOK_MESSAGE\""
183+
184+
# ---------- Test 12: Full options (everything combined) ----------
185+
run_test "Full upload - all options combined" \
186+
"$CLI --ipa \"$IPA_PATH\" \
187+
--emails \"$EMAILS\" \
188+
--message \"$MESSAGE\" \
189+
--keepsamelink \
190+
--dbfolder \"$DB_FOLDER\" \
191+
--slackwebhook \"$SLACK_WEBHOOK\" \
192+
--msteamswebhook \"$MSTEAMS_WEBHOOK\" \
193+
--webhookmessage \"$WEBHOOK_MESSAGE\""
194+
195+
# ---------- Test 13: Keep same link without dbfolder (uses bundle ID) ----------
196+
run_test "Upload with --keepsamelink without --dbfolder (default bundle ID folder)" \
197+
"$CLI --ipa \"$IPA_PATH\" --keepsamelink --emails \"$SINGLE_EMAIL\" --message \"$MESSAGE\""
198+
199+
# ---------- Test 14: Emails + webhooks (no custom messages) ----------
200+
run_test "Upload with emails + webhooks, no custom messages" \
201+
"$CLI --ipa \"$IPA_PATH\" --emails \"$EMAILS\" --slackwebhook \"$SLACK_WEBHOOK\" --msteamswebhook \"$MSTEAMS_WEBHOOK\""
202+
203+
# ---------- Test 15: Invalid IPA path (should fail gracefully) ----------
204+
run_test "Invalid IPA path - should fail gracefully" \
205+
"! $CLI --ipa \"/nonexistent/path/fake.ipa\""
206+
207+
# ---------- Test 16: No arguments (should show usage error) ----------
208+
run_test "No arguments - should show usage error" \
209+
"! $CLI"
210+
211+
# ---------- Test 17: Large IPA file upload (chunked upload) ----------
212+
if [ -f "$LARGE_IPA_PATH" ]; then
213+
run_test "Large IPA file upload (chunked session upload)" \
214+
"$CLI --ipa \"$LARGE_IPA_PATH\""
215+
else
216+
skip_test "Large IPA file upload (chunked session upload)" \
217+
"LARGE_IPA_PATH not found: $LARGE_IPA_PATH"
218+
fi
219+
220+
# ============================================================
221+
# SUMMARY
222+
# ============================================================
223+
224+
print_summary

0 commit comments

Comments
 (0)