#!/bin/sh # Цвета для вывода GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[0;33m' NC='\033[0m' # No Color echo -e "${YELLOW}===== Запуск всех тестов =====${NC}" # Создаем директорию для отчетов о покрытии, если ее нет mkdir -p ./coverage # Функция для выполнения и отчета о результатах тестов run_tests() { test_type=$1 test_path=$2 echo -e "${YELLOW}===== Запуск $test_type тестов =====${NC}" # Запускаем тесты с генерацией отчета о покрытии if go test -v -coverprofile=./coverage/coverage_$test_type.out $test_path; then echo -e "${GREEN}✓ $test_type тесты успешно пройдены${NC}" # Генерация HTML-отчета о покрытии go tool cover -html=./coverage/coverage_$test_type.out -o ./coverage/coverage_$test_type.html return 0 else echo -e "${RED}✗ $test_type тесты содержат ошибки${NC}" return 1 fi } # Запускаем unit-тесты run_tests "unit" "./tests/unit/..." UNIT_RESULT=$? # Функция для проверки доступности MongoDB check_mongodb() { # В Docker контейнере MongoDB доступен по имени хоста 'mongo' if [ -n "$MONGODB_URI" ]; then # Если задана переменная окружения MONGODB_URI, считаем что MongoDB доступен return 0 else # Проверяем доступность MongoDB if nc -z mongo 27017 2>/dev/null; then return 0 elif nc -z localhost 27017 2>/dev/null; then return 0 else return 1 fi fi } # Если настроена переменная окружения для запуска интеграционных тестов if [ "$RUN_INTEGRATION_TESTS" = "true" ]; then # Запускаем интеграционные тесты, если MongoDB доступна if check_mongodb; then run_tests "integration" "./tests/integration/..." INTEGRATION_RESULT=$? else echo -e "${YELLOW}MongoDB не доступна, интеграционные тесты пропущены${NC}" INTEGRATION_RESULT=0 fi else echo -e "${YELLOW}Интеграционные тесты пропущены (RUN_INTEGRATION_TESTS не установлена)${NC}" INTEGRATION_RESULT=0 fi # Проверяем общий результат if [ $UNIT_RESULT -eq 0 ] && [ $INTEGRATION_RESULT -eq 0 ]; then echo -e "${GREEN}✓ Все тесты успешно пройдены${NC}" exit 0 else echo -e "${RED}✗ Некоторые тесты содержат ошибки${NC}" exit 1 fi