|
| 1 | +#!/bin/bash |
| 2 | +# Test the interactive installer behavior |
| 3 | +# Usage: ./scripts/test-install.sh |
| 4 | + |
| 5 | +set -e |
| 6 | + |
| 7 | +# Colors |
| 8 | +BLUE='\033[0;34m' |
| 9 | +GREEN='\033[0;32m' |
| 10 | +RED='\033[0;31m' |
| 11 | +NC='\033[0m' |
| 12 | + |
| 13 | +TEMP_HOME=$(mktemp -d) |
| 14 | +export HOME="$TEMP_HOME" |
| 15 | + |
| 16 | +echo "Testing installer in temp home: $TEMP_HOME" |
| 17 | +echo "" |
| 18 | + |
| 19 | +# Test 1: Auto mode (choice 1) |
| 20 | +echo -e "${BLUE}Test 1: Auto mode (modifies .zshrc)${NC}" |
| 21 | +echo "" |
| 22 | + |
| 23 | +cat > "$TEMP_HOME/.zshrc" << 'EOF' |
| 24 | +# Existing config |
| 25 | +export PATH="/usr/local/bin:$PATH" |
| 26 | +EOF |
| 27 | + |
| 28 | +echo "1" | ./install.sh > /dev/null 2>&1 |
| 29 | + |
| 30 | +if grep -q "source ~/.claude/aliases.sh" "$TEMP_HOME/.zshrc"; then |
| 31 | + echo -e "${GREEN}✓ Auto mode: Modified .zshrc correctly${NC}" |
| 32 | +else |
| 33 | + echo -e "${RED}✗ Auto mode: Failed to modify .zshrc${NC}" |
| 34 | + exit 1 |
| 35 | +fi |
| 36 | + |
| 37 | +if [ -f "$TEMP_HOME/.claude/aliases.sh" ]; then |
| 38 | + echo -e "${GREEN}✓ Auto mode: Created aliases.sh${NC}" |
| 39 | +else |
| 40 | + echo -e "${RED}✗ Auto mode: aliases.sh not created${NC}" |
| 41 | + exit 1 |
| 42 | +fi |
| 43 | + |
| 44 | +# Cleanup |
| 45 | +rm -rf "$TEMP_HOME" |
| 46 | +TEMP_HOME=$(mktemp -d) |
| 47 | +export HOME="$TEMP_HOME" |
| 48 | + |
| 49 | +echo "" |
| 50 | + |
| 51 | +# Test 2: Manual mode with confirmation (choice 2 + y) |
| 52 | +echo -e "${BLUE}Test 2: Manual mode with confirmation${NC}" |
| 53 | +echo "" |
| 54 | + |
| 55 | +cat > "$TEMP_HOME/.zshrc" << 'EOF' |
| 56 | +# Existing config |
| 57 | +export PATH="/usr/local/bin:$PATH" |
| 58 | +EOF |
| 59 | + |
| 60 | +echo -e "2\ny" | ./install.sh > /dev/null 2>&1 |
| 61 | + |
| 62 | +if grep -q "source ~/.claude/aliases.sh" "$TEMP_HOME/.zshrc"; then |
| 63 | + echo -e "${RED}✗ Manual mode: Should NOT modify .zshrc${NC}" |
| 64 | + exit 1 |
| 65 | +else |
| 66 | + echo -e "${GREEN}✓ Manual mode: Did not modify .zshrc${NC}" |
| 67 | +fi |
| 68 | + |
| 69 | +if [ -f "$TEMP_HOME/.claude/aliases.sh" ]; then |
| 70 | + echo -e "${GREEN}✓ Manual mode: Created aliases.sh${NC}" |
| 71 | +else |
| 72 | + echo -e "${RED}✗ Manual mode: aliases.sh not created${NC}" |
| 73 | + exit 1 |
| 74 | +fi |
| 75 | + |
| 76 | +# Cleanup |
| 77 | +rm -rf "$TEMP_HOME" |
| 78 | +TEMP_HOME=$(mktemp -d) |
| 79 | +export HOME="$TEMP_HOME" |
| 80 | + |
| 81 | +echo "" |
| 82 | + |
| 83 | +# Test 3: Manual mode without confirmation (choice 2 + n) |
| 84 | +echo -e "${BLUE}Test 3: Manual mode without confirmation (warning)${NC}" |
| 85 | +echo "" |
| 86 | + |
| 87 | +cat > "$TEMP_HOME/.zshrc" << 'EOF' |
| 88 | +# Existing config |
| 89 | +export PATH="/usr/local/bin:$PATH" |
| 90 | +EOF |
| 91 | + |
| 92 | +echo -e "2\nn\n" | ./install.sh > /dev/null 2>&1 |
| 93 | + |
| 94 | +if [ -f "$TEMP_HOME/.claude/aliases.sh" ]; then |
| 95 | + echo -e "${GREEN}✓ Manual mode (no confirm): Created aliases.sh anyway${NC}" |
| 96 | +else |
| 97 | + echo -e "${RED}✗ Manual mode (no confirm): aliases.sh not created${NC}" |
| 98 | + exit 1 |
| 99 | +fi |
| 100 | + |
| 101 | +echo "" |
| 102 | + |
| 103 | +# Test 4: Check aliases.sh content |
| 104 | +echo -e "${BLUE}Test 4: Verify aliases.sh content${NC}" |
| 105 | +echo "" |
| 106 | + |
| 107 | +if grep -q "alias ccd=" "$TEMP_HOME/.claude/aliases.sh"; then |
| 108 | + echo -e "${GREEN}✓ Aliases: Contains ccd${NC}" |
| 109 | +else |
| 110 | + echo -e "${RED}✗ Aliases: Missing ccd${NC}" |
| 111 | + exit 1 |
| 112 | +fi |
| 113 | + |
| 114 | +if grep -q "alias ccc=" "$TEMP_HOME/.claude/aliases.sh"; then |
| 115 | + echo -e "${GREEN}✓ Aliases: Contains ccc${NC}" |
| 116 | +else |
| 117 | + echo -e "${RED}✗ Aliases: Missing ccc${NC}" |
| 118 | + exit 1 |
| 119 | +fi |
| 120 | + |
| 121 | +if grep -q "alias cco=" "$TEMP_HOME/.claude/aliases.sh"; then |
| 122 | + echo -e "${GREEN}✓ Aliases: Contains cco${NC}" |
| 123 | +else |
| 124 | + echo -e "${RED}✗ Aliases: Missing cco${NC}" |
| 125 | + exit 1 |
| 126 | +fi |
| 127 | + |
| 128 | +if grep -q "alias ccc-opus=" "$TEMP_HOME/.claude/aliases.sh"; then |
| 129 | + echo -e "${GREEN}✓ Aliases: Contains model shortcuts${NC}" |
| 130 | +else |
| 131 | + echo -e "${RED}✗ Aliases: Missing model shortcuts${NC}" |
| 132 | + exit 1 |
| 133 | +fi |
| 134 | + |
| 135 | +echo "" |
| 136 | + |
| 137 | +# Test 5: Check that aliases file is sourceable |
| 138 | +echo -e "${BLUE}Test 5: Verify aliases.sh is valid bash${NC}" |
| 139 | +echo "" |
| 140 | + |
| 141 | +if bash -n "$TEMP_HOME/.claude/aliases.sh"; then |
| 142 | + echo -e "${GREEN}✓ Aliases: Valid bash syntax${NC}" |
| 143 | +else |
| 144 | + echo -e "${RED}✗ Aliases: Invalid bash syntax${NC}" |
| 145 | + exit 1 |
| 146 | +fi |
| 147 | + |
| 148 | +# Cleanup |
| 149 | +rm -rf "$TEMP_HOME" |
| 150 | + |
| 151 | +echo "" |
| 152 | +echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" |
| 153 | +echo -e "${GREEN}✓ All tests passed!${NC}" |
| 154 | +echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" |
| 155 | +echo "" |
0 commit comments