feat: Add test file for run 1757081046
This commit is contained in:
131
live-test.zsh
Executable file
131
live-test.zsh
Executable 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 сценарий успешно завершен! ======"
|
||||
Reference in New Issue
Block a user