Files
ai-setup/test_isolated.sh
2026-06-30 12:12:42 +07:00

85 lines
3.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Copyright (c) 2026 Виталий Никитенко. MIT License.
# test_isolated.sh — проверка логики автоустановки без реальных скачиваний
# Использует mock для curl, чтобы проверить, что скрипты вызывают правильные URL
set -euo pipefail
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
# Генерируем скрипты из ai-setup.sh в изолированную директорию
BIN_DIR="$TMPDIR/bin"
mkdir -p "$BIN_DIR"
# Извлекаем ai-gpt
awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' scripts/ai-setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/ai-gpt"
# Извлекаем ai-kimi
awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' scripts/ai-setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/ai-kimi"
# Извлекаем ai-glm
awk '/^cat > "\$BIN_DIR\/ai-glm"/,/^GLMEOF/' scripts/ai-setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/ai-glm"
echo "=== Test 1: ai-gpt calls codex install URL when missing ==="
MOCK_LOG="$TMPDIR/mock_curl.log"
# Создаём mock curl, который логирует вызовы
cat > "$TMPDIR/curl" << CURLEOF
#!/usr/bin/env bash
echo "\$@" >> "$MOCK_LOG"
# Притворяемся, что install.sh отработал (создаём фейковый codex)
if [[ "\$*" == *"chatgpt.com/codex/install.sh"* ]]; then
mkdir -p "\$HOME/.npm-global/bin"
echo '#!/usr/bin/env bash
echo "codex mock \$*"' > "\$HOME/.npm-global/bin/codex"
chmod +x "\$HOME/.npm-global/bin/codex"
fi
CURLEOF
chmod +x "$TMPDIR/curl"
# Запускаем ai-gpt с mock curl (чистый PATH, без системного codex)
HOME="$TMPDIR" PATH="$TMPDIR:/usr/bin:/bin" "$BIN_DIR/ai-gpt" --version 2>&1 || true
if grep -q "chatgpt.com/codex/install.sh" "$MOCK_LOG"; then
echo "[PASS] ai-gpt вызвал установку Codex"
else
echo "[FAIL] ai-gpt НЕ вызвал установку Codex"
echo "curl log:"
cat "$MOCK_LOG" 2>/dev/null || echo "(пусто)"
exit 1
fi
echo ""
echo "=== Test 2: ai-kimi is a Claude Code launcher with Kimi backend ==="
if grep -q 'ANTHROPIC_BASE_URL' "$BIN_DIR/ai-kimi" \
&& grep -q 'api.kimi.com/coding' "$BIN_DIR/ai-kimi" \
&& grep -q 'claude --dangerously-skip-permissions' "$BIN_DIR/ai-kimi"; then
echo "[PASS] ai-kimi запускает claude с официальным Kimi API"
else
echo "[FAIL] ai-kimi должен запускать claude с api.kimi.com/coding"
exit 1
fi
echo ""
echo "=== Test 3: ai-glm is a Claude Code launcher with Zhipu AI backend ==="
if grep -q 'ANTHROPIC_BASE_URL' "$BIN_DIR/ai-glm" \
&& grep -q 'api.z.ai/api/anthropic' "$BIN_DIR/ai-glm" \
&& grep -q 'claude --dangerously-skip-permissions' "$BIN_DIR/ai-glm"; then
echo "[PASS] ai-glm запускает claude с официальным Zhipu AI API"
else
echo "[FAIL] ai-glm должен запускать claude с api.z.ai/api/anthropic"
exit 1
fi
echo ""
echo "=== All tests passed ==="