Files
gitea-client-tests/live-test.zsh

132 lines
6.4 KiB
Bash
Executable File
Raw Permalink 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 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 сценарий успешно завершен! ======"