feat: Add test file for run 1757081046

This commit is contained in:
2025-09-05 17:04:06 +03:00
parent 4a6a2a5d68
commit 4d7fee3b47
3 changed files with 575 additions and 0 deletions

131
live-test.zsh Executable file
View File

@@ -0,0 +1,131 @@
#!/usr/bin/env zsh
# Выходить из скрипта при любой ошибке
set -e
# --- КОНФИГУРАЦИЯ ---
# Подключаем основной скрипт с функциями
source ./gitea-client.zsh
# Уникальный идентификатор для этого тестового запуска, чтобы избежать конфликтов
# Он будет добавлен к названиям задач, веток и т.д.
TEST_RUN_ID=$(date +%s)
TEST_BRANCH_NAME="test/auto-branch-${TEST_RUN_ID}"
TEST_ISSUE_TITLE="[AUTO-TEST] Test Issue ${TEST_RUN_ID}"
TEST_COMMIT_MESSAGE="feat: Add test file for run ${TEST_RUN_ID}"
TEST_PR_TITLE="[AUTO-TEST] PR for issue ${TEST_RUN_ID}"
TEST_COMMENT="This is an automated test comment."
# Глобальные переменные для хранения ID созданных сущностей
# Это нужно для функции очистки
typeset -g TEST_ISSUE_ID=""
typeset -g TEST_PR_ID=""
# --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---
# Функции для красивого вывода
log_info() { echo "\e[34mINFO:\e[0m $1"; }
log_pass() { echo "\e[32mPASS:\e[0m $1"; }
log_fail() { echo "\e[31mFAIL:\e[0m $1"; }
# Функция очистки. Будет вызвана при любом завершении скрипта (успешном или нет)
cleanup() {
log_info "--- Запускаю процедуру очистки ---"
# Удаляем локальную тестовую ветку, если она есть
if git rev-parse --verify "$TEST_BRANCH_NAME" >/dev/null 2>&1; then
git checkout main # или master, в зависимости от вашей основной ветки
git branch -D "$TEST_BRANCH_NAME"
log_info "Локальная ветка '$TEST_BRANCH_NAME' удалена."
fi
# Удаляем ветку на сервере, если она там осталась
# Gitea API для удаления ветки может вернуть ошибку, если PR уже смержен, это нормально
api_request "DELETE" "repos/$GITEA_OWNER/$GITEA_REPO/branches/$TEST_BRANCH_NAME" >/dev/null 2>&1 || true
log_info "Попытка удаления удаленной ветки '$TEST_BRANCH_NAME' выполнена."
# Если была создана задача, но она еще не закрыта, принудительно закрываем ее
if [[ -n "$TEST_ISSUE_ID" ]]; then
local issue_state=$(api_request "GET" "repos/$GITEA_OWNER/$GITEA_REPO/issues/$TEST_ISSUE_ID" | jq -r '.state')
if [[ "$issue_state" == "open" ]]; then
log_info "Задача #$TEST_ISSUE_ID все еще открыта. Закрываю принудительно..."
local close_data=$(jq -n '{state: "closed"}')
api_request "PATCH" "repos/$GITEA_OWNER/$GITEA_REPO/issues/$TEST_ISSUE_ID" "$close_data" >/dev/null
log_pass "Задача #$TEST_ISSUE_ID закрыта."
fi
fi
log_info "--- Очистка завершена ---"
}
# Устанавливаем "ловушку": функция cleanup будет вызвана при выходе из скрипта
trap cleanup EXIT
# --- ОСНОВНОЙ СЦЕНАРИЙ ТЕСТИРОВАНИЯ ---
function run_e2e_workflow() {
log_info "Начало полного E2E (end-to-end) теста..."
log_info "Тестовый ID этого запуска: ${TEST_RUN_ID}"
# Шаг 1: Создание задачи
log_info "Шаг 1: Создание тестовой задачи..."
local issue_json=$(create_task --title "$TEST_ISSUE_TITLE" )
TEST_ISSUE_ID=$(echo "$issue_json" | jq -r '.number') # Используем .number для issue ID
if [[ -z "$TEST_ISSUE_ID" || "$TEST_ISSUE_ID" == "null" ]]; then
log_fail "Не удалось создать задачу. Ответ API: $issue_json"
exit 1
fi
log_pass "Задача успешно создана с ID: #$TEST_ISSUE_ID"
# Шаг 2: Создание ветки, коммита и push
log_info "Шаг 2: Создание локальной ветки и коммита..."
git checkout -b "$TEST_BRANCH_NAME"
touch "test_file_${TEST_RUN_ID}.txt"
git add .
git commit -m "$TEST_COMMIT_MESSAGE"
log_pass "Ветка '$TEST_BRANCH_NAME' и коммит созданы."
log_info "Отправка ветки на сервер Gitea..."
git push origin "$TEST_BRANCH_NAME"
log_pass "Ветка успешно отправлена."
# Шаг 3: Создание Pull Request
log_info "Шаг 3: Создание Pull Request..."
local pr_json=$(create_pr --title "$TEST_PR_TITLE" --head "$TEST_BRANCH_NAME" --base "main")
TEST_PR_ID=$(echo "$pr_json" | jq -r '.number') # Используем .number для PR ID
if [[ -z "$TEST_PR_ID" || "$TEST_PR_ID" == "null" ]]; then
log_fail "Не удалось создать Pull Request. Ответ API: $pr_json"
exit 1
fi
log_pass "Pull Request успешно создан с ID: #$TEST_PR_ID"
# Шаг 4: Добавление комментария
log_info "Шаг 4: Добавление комментария к задаче #$TEST_ISSUE_ID..."
add_comment --issue-id "$TEST_ISSUE_ID" --body "$TEST_COMMENT" > /dev/null
log_pass "Комментарий успешно добавлен."
# Шаг 5: Слияние PR и закрытие задачи
log_info "Шаг 5: Выполнение 'merge_and_complete'..."
merge_and_complete --issue-id "$TEST_ISSUE_ID" --pr-id "$TEST_PR_ID" --branch "$TEST_BRANCH_NAME"
log_pass "Слияние PR и закрытие задачи прошли успешно."
log_info "Проверка статуса задачи..."
local final_state=$(api_request "GET" "repos/$GITEA_OWNER/$GITEA_REPO/issues/$TEST_ISSUE_ID" | jq -r '.state')
if [[ "$final_state" == "closed" ]]; then
log_pass "Финальная проверка: задача #$TEST_ISSUE_ID имеет статус 'closed'."
else
log_fail "Финальная проверка: задача #$TEST_ISSUE_ID имеет статус '$final_state' вместо 'closed'."
exit 1
fi
}
# --- ТОЧКА ВХОДА ---
run_e2e_workflow
log_pass "====== Весь E2E сценарий успешно завершен! ======"