Released v1
This commit is contained in:
@@ -0,0 +1,380 @@
|
||||
#!/usr/bin/env bash
|
||||
set -uo pipefail
|
||||
|
||||
PCLI="./pcli"
|
||||
PASS=0
|
||||
FAIL=0
|
||||
SKIP=0
|
||||
ERRORS=""
|
||||
|
||||
# Resource IDs for cleanup
|
||||
CARD_ID=""
|
||||
DUP_CARD_ID=""
|
||||
COMMENT_ID=""
|
||||
TL_ID=""
|
||||
TASK_ID=""
|
||||
TASK_ID2=""
|
||||
LABEL_ID=""
|
||||
|
||||
green() { printf "\033[32m%s\033[0m\n" "$1"; }
|
||||
red() { printf "\033[31m%s\033[0m\n" "$1"; }
|
||||
yellow() { printf "\033[33m%s\033[0m\n" "$1"; }
|
||||
|
||||
run_test() {
|
||||
local desc="$1"
|
||||
shift
|
||||
local output
|
||||
if output=$("$@" 2>&1); then
|
||||
PASS=$((PASS + 1))
|
||||
green " ✓ $desc"
|
||||
echo "$output"
|
||||
else
|
||||
FAIL=$((FAIL + 1))
|
||||
red " ✗ $desc"
|
||||
ERRORS="${ERRORS}\n - ${desc}"
|
||||
echo "$output"
|
||||
fi
|
||||
}
|
||||
|
||||
run_test_optional() {
|
||||
local desc="$1"
|
||||
shift
|
||||
local output
|
||||
if output=$("$@" 2>&1); then
|
||||
PASS=$((PASS + 1))
|
||||
green " ✓ $desc"
|
||||
echo "$output"
|
||||
else
|
||||
SKIP=$((SKIP + 1))
|
||||
yellow " ⚠ $desc (skipped — may not be supported)"
|
||||
fi
|
||||
}
|
||||
|
||||
extract_id() {
|
||||
echo "$1" | jq -r '.data.id // empty'
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "--- Cleanup ---"
|
||||
[ -n "$TASK_ID2" ] && { $PCLI task delete "$TASK_ID2" >/dev/null 2>&1 && green " ✓ deleted task $TASK_ID2" || yellow " ⚠ could not delete task $TASK_ID2"; }
|
||||
[ -n "$TASK_ID" ] && { $PCLI task delete "$TASK_ID" >/dev/null 2>&1 && green " ✓ deleted task $TASK_ID" || yellow " ⚠ could not delete task $TASK_ID"; }
|
||||
[ -n "$TL_ID" ] && { $PCLI task-list delete "$TL_ID" >/dev/null 2>&1 && green " ✓ deleted task-list $TL_ID" || yellow " ⚠ could not delete task-list $TL_ID"; }
|
||||
[ -n "$COMMENT_ID" ] && { $PCLI comment delete "$COMMENT_ID" >/dev/null 2>&1 && green " ✓ deleted comment $COMMENT_ID" || yellow " ⚠ could not delete comment $COMMENT_ID"; }
|
||||
[ -n "$LABEL_ID" ] && { $PCLI label delete "$LABEL_ID" >/dev/null 2>&1 && green " ✓ deleted label $LABEL_ID" || yellow " ⚠ could not delete label $LABEL_ID"; }
|
||||
[ -n "$DUP_CARD_ID" ] && { $PCLI card delete "$DUP_CARD_ID" >/dev/null 2>&1 && green " ✓ deleted card $DUP_CARD_ID (dup)" || yellow " ⚠ could not delete card $DUP_CARD_ID"; }
|
||||
[ -n "$CARD_ID" ] && { $PCLI card delete "$CARD_ID" >/dev/null 2>&1 && green " ✓ deleted card $CARD_ID" || yellow " ⚠ could not delete card $CARD_ID"; }
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "============================================"
|
||||
echo " pcli Integration Test Suite"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
|
||||
# Check prerequisites
|
||||
if [ -z "${PLANKA_URL:-}" ]; then
|
||||
red "PLANKA_URL is not set"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${PLANKA_API_KEY:-}" ]; then
|
||||
red "PLANKA_API_KEY is not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Using PLANKA_URL: $PLANKA_URL"
|
||||
echo ""
|
||||
|
||||
# Build
|
||||
echo "--- Building pcli ---"
|
||||
if go build -o pcli; then
|
||||
PASS=$((PASS + 1))
|
||||
green " ✓ Build successful"
|
||||
else
|
||||
red " ✗ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 1. Help & Error Handling
|
||||
# ==========================================
|
||||
echo "--- 1. Help & Error Handling ---"
|
||||
|
||||
run_test "pcli --help" $PCLI --help
|
||||
echo ""
|
||||
|
||||
run_test "pcli project --help" $PCLI project --help
|
||||
echo ""
|
||||
|
||||
run_test "pcli board --help" $PCLI board --help
|
||||
echo ""
|
||||
|
||||
run_test "pcli card --help" $PCLI card --help
|
||||
echo ""
|
||||
|
||||
# Test missing env vars
|
||||
echo " Testing missing PLANKA_URL error..."
|
||||
ERR_OUTPUT=$(PLANKA_URL="" PLANKA_API_KEY="" $PCLI project list 2>&1) || true
|
||||
if echo "$ERR_OUTPUT" | grep -q "PLANKA_URL"; then
|
||||
PASS=$((PASS + 1))
|
||||
green " ✓ Missing PLANKA_URL produces error"
|
||||
else
|
||||
FAIL=$((FAIL + 1))
|
||||
red " ✗ Missing PLANKA_URL error not detected"
|
||||
ERRORS="${ERRORS}\n - Missing PLANKA_URL error"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 2. Project Commands
|
||||
# ==========================================
|
||||
echo "--- 2. Project Commands ---"
|
||||
|
||||
PROJECT_LIST=$($PCLI project list) || { red " ✗ project list failed"; exit 1; }
|
||||
run_test "project list" echo "$PROJECT_LIST"
|
||||
echo ""
|
||||
|
||||
PROJECT_ID=$(echo "$PROJECT_LIST" | jq -r '.data[0].id')
|
||||
echo " Using project ID: $PROJECT_ID"
|
||||
|
||||
run_test "project get $PROJECT_ID" $PCLI project get "$PROJECT_ID"
|
||||
echo ""
|
||||
|
||||
run_test "project list --format=table" $PCLI --format=table project list
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 3. Board Commands
|
||||
# ==========================================
|
||||
echo "--- 3. Board Commands ---"
|
||||
|
||||
BOARD_LIST=$($PCLI board list) || { red " ✗ board list failed"; exit 1; }
|
||||
run_test "board list" echo "$BOARD_LIST"
|
||||
echo ""
|
||||
|
||||
BOARD_ID=$(echo "$BOARD_LIST" | jq -r '.data[0].id')
|
||||
echo " Using board ID: $BOARD_ID"
|
||||
|
||||
BOARD_GET=$($PCLI board get "$BOARD_ID") || { red " ✗ board get failed"; exit 1; }
|
||||
run_test "board get $BOARD_ID" echo "$BOARD_GET"
|
||||
echo ""
|
||||
|
||||
run_test_optional "board actions $BOARD_ID --limit 5" $PCLI board actions "$BOARD_ID" --limit 5
|
||||
echo ""
|
||||
|
||||
run_test "board list --format=table" $PCLI --format=table board list
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 3b. Status Command
|
||||
# ==========================================
|
||||
echo "--- 3b. Status Command ---"
|
||||
|
||||
run_test "status (json)" $PCLI status
|
||||
echo ""
|
||||
|
||||
run_test "status (table)" $PCLI --format=table status
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 4. Card CRUD
|
||||
# ==========================================
|
||||
echo "--- 4. Card CRUD ---"
|
||||
|
||||
# Get a list ID from the board
|
||||
LIST_ID=$(echo "$BOARD_GET" | jq -r '.data.lists[0].id // empty')
|
||||
if [ -z "$LIST_ID" ]; then
|
||||
red " ✗ No lists found on board $BOARD_ID"
|
||||
exit 1
|
||||
fi
|
||||
echo " Using list ID: $LIST_ID"
|
||||
|
||||
# Create a card
|
||||
CARD_CREATE=$($PCLI card create --list "$LIST_ID" --name "Test Card from pcli" --description "Created by test script")
|
||||
run_test "card create" echo "$CARD_CREATE"
|
||||
CARD_ID=$(extract_id "$CARD_CREATE")
|
||||
echo " Created card ID: $CARD_ID"
|
||||
echo ""
|
||||
|
||||
if [ -z "$CARD_ID" ]; then
|
||||
red " ✗ Card creation failed, cannot continue card tests"
|
||||
else
|
||||
# Get the card
|
||||
run_test "card get $CARD_ID" $PCLI card get "$CARD_ID"
|
||||
echo ""
|
||||
|
||||
# Update the card
|
||||
CARD_UPDATE=$($PCLI card update "$CARD_ID" --name "Test Card Updated" --description "Updated by test script")
|
||||
run_test "card update $CARD_ID" echo "$CARD_UPDATE"
|
||||
echo ""
|
||||
|
||||
# List cards by list (may not work on older Planka versions)
|
||||
run_test_optional "card list --list $LIST_ID" $PCLI card list --list "$LIST_ID"
|
||||
echo ""
|
||||
|
||||
# List cards by board
|
||||
run_test "card list --board $BOARD_ID" $PCLI card list --board "$BOARD_ID"
|
||||
echo ""
|
||||
|
||||
# List cards by board with limit
|
||||
run_test "card list --board $BOARD_ID --limit 2" $PCLI card list --board "$BOARD_ID" --limit 2
|
||||
echo ""
|
||||
|
||||
# Card actions (optional)
|
||||
run_test_optional "card actions $CARD_ID --limit 5" $PCLI card actions "$CARD_ID" --limit 5
|
||||
echo ""
|
||||
|
||||
# Duplicate the card
|
||||
CARD_DUP=$($PCLI card duplicate "$CARD_ID" --name "Duplicated Test Card")
|
||||
run_test "card duplicate $CARD_ID" echo "$CARD_DUP"
|
||||
DUP_CARD_ID=$(extract_id "$CARD_DUP")
|
||||
echo " Duplicated card ID: $DUP_CARD_ID"
|
||||
echo ""
|
||||
|
||||
# Move test
|
||||
SECOND_LIST_ID=$(echo "$BOARD_GET" | jq -r '.data.lists[1].id // empty')
|
||||
if [ -n "$SECOND_LIST_ID" ]; then
|
||||
CARD_MOVE=$($PCLI card move "$CARD_ID" --list "$SECOND_LIST_ID")
|
||||
run_test "card move $CARD_ID --list $SECOND_LIST_ID" echo "$CARD_MOVE"
|
||||
echo ""
|
||||
else
|
||||
yellow " ⚠ Skipping card move test — only one list on board"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Table format
|
||||
run_test "card list --board $BOARD_ID --format=table" $PCLI --format=table card list --board "$BOARD_ID"
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 5. Comment CRUD (optional — may 404 on some Planka versions)
|
||||
# ==========================================
|
||||
echo "--- 5. Comment CRUD ---"
|
||||
|
||||
COMMENT_CREATE=$($PCLI comment create --card "$CARD_ID" --text "Test comment from pcli" 2>&1) || true
|
||||
CMT_ID=$(echo "$COMMENT_CREATE" | jq -r '.data.id // empty' 2>/dev/null)
|
||||
if [ -n "$CMT_ID" ]; then
|
||||
COMMENT_ID="$CMT_ID"
|
||||
PASS=$((PASS + 1))
|
||||
green " ✓ comment create"
|
||||
echo "$COMMENT_CREATE"
|
||||
echo " Created comment ID: $COMMENT_ID"
|
||||
echo ""
|
||||
|
||||
run_test_optional "comment list --card $CARD_ID" $PCLI comment list --card "$CARD_ID"
|
||||
echo ""
|
||||
|
||||
run_test "comment update $COMMENT_ID" $PCLI comment update "$COMMENT_ID" --text "Updated test comment"
|
||||
echo ""
|
||||
else
|
||||
SKIP=$((SKIP + 1))
|
||||
yellow " ⚠ comment create not supported on this Planka instance (skipped)"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 6. Task List CRUD (optional — may not exist on older Planka)
|
||||
# ==========================================
|
||||
echo "--- 6. Task List CRUD ---"
|
||||
|
||||
TL_CREATE=$($PCLI task-list create --card "$CARD_ID" --name "Test Checklist" 2>&1) || true
|
||||
TL_ID_VAL=$(echo "$TL_CREATE" | jq -r '.data.id // empty' 2>/dev/null)
|
||||
if [ -n "$TL_ID_VAL" ]; then
|
||||
TL_ID="$TL_ID_VAL"
|
||||
PASS=$((PASS + 1))
|
||||
green " ✓ task-list create"
|
||||
echo " Created task list ID: $TL_ID"
|
||||
echo ""
|
||||
|
||||
run_test "task-list get $TL_ID" $PCLI task-list get "$TL_ID"
|
||||
echo ""
|
||||
|
||||
TL_UPDATE=$($PCLI task-list update "$TL_ID" --name "Updated Checklist")
|
||||
run_test "task-list update $TL_ID" echo "$TL_UPDATE"
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 7. Task CRUD
|
||||
# ==========================================
|
||||
echo "--- 7. Task CRUD ---"
|
||||
|
||||
TASK_CREATE=$($PCLI task create --task-list "$TL_ID" --name "Test Task 1")
|
||||
run_test "task create" echo "$TASK_CREATE"
|
||||
TASK_ID=$(extract_id "$TASK_CREATE")
|
||||
echo " Created task ID: $TASK_ID"
|
||||
echo ""
|
||||
|
||||
if [ -n "$TASK_ID" ]; then
|
||||
TASK_UPDATE=$($PCLI task update "$TASK_ID" --completed)
|
||||
run_test "task update $TASK_ID --completed" echo "$TASK_UPDATE"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
TASK_CREATE2=$($PCLI task create --task-list "$TL_ID" --name "Test Task 2")
|
||||
run_test "task create (second)" echo "$TASK_CREATE2"
|
||||
TASK_ID2=$(extract_id "$TASK_CREATE2")
|
||||
echo ""
|
||||
else
|
||||
SKIP=$((SKIP + 1))
|
||||
yellow " ⚠ task-list create not supported on this Planka instance (skipped)"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 8. Label CRUD
|
||||
# ==========================================
|
||||
echo "--- 8. Label CRUD ---"
|
||||
|
||||
LABEL_CREATE=$($PCLI label create --board "$BOARD_ID" --name "test-label" --color "berry-red")
|
||||
run_test "label create" echo "$LABEL_CREATE"
|
||||
LABEL_ID=$(extract_id "$LABEL_CREATE")
|
||||
echo " Created label ID: $LABEL_ID"
|
||||
echo ""
|
||||
|
||||
if [ -n "$LABEL_ID" ]; then
|
||||
LABEL_UPDATE=$($PCLI label update "$LABEL_ID" --name "updated-label" --color "lagoon-blue")
|
||||
run_test "label update $LABEL_ID" echo "$LABEL_UPDATE"
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 9. Card Label Operations
|
||||
# ==========================================
|
||||
echo "--- 9. Card Label Operations ---"
|
||||
|
||||
run_test "card add-label $CARD_ID --label $LABEL_ID" $PCLI card add-label "$CARD_ID" --label "$LABEL_ID"
|
||||
echo ""
|
||||
|
||||
run_test "card remove-label $CARD_ID --label $LABEL_ID" $PCLI card remove-label "$CARD_ID" --label "$LABEL_ID"
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
# Cleanup runs via EXIT trap
|
||||
|
||||
# ==========================================
|
||||
# Summary
|
||||
# ==========================================
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo " Test Summary"
|
||||
echo "============================================"
|
||||
green " Passed: $PASS"
|
||||
if [ "$SKIP" -gt 0 ]; then
|
||||
yellow " Skipped: $SKIP"
|
||||
fi
|
||||
if [ "$FAIL" -gt 0 ]; then
|
||||
red " Failed: $FAIL"
|
||||
echo ""
|
||||
red " Failed tests:"
|
||||
echo -e "$ERRORS"
|
||||
else
|
||||
green " Failed: 0"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
TOTAL=$((PASS + FAIL))
|
||||
echo " Total: $TOTAL (plus $SKIP skipped)"
|
||||
echo "============================================"
|
||||
|
||||
exit "$FAIL"
|
||||
Reference in New Issue
Block a user