#!/bin/bash # Цвета для вывода GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[0;33m' NC='\033[0m' # No Color # Используем -e для интерпретации escape-последовательностей echo -e "${YELLOW}===== Запуск тестов в Docker =====${NC}" # Проверка существования директории для отчетов о покрытии if [ ! -d "./coverage" ]; then mkdir -p ./coverage echo -e "Создана директория ./coverage для хранения отчетов о покрытии тестами" fi # Проверка запущен ли MongoDB, если нет - запускаем if ! docker ps | grep -q mongodb; then echo -e "${YELLOW}MongoDB не запущена, запускаем контейнер...${NC}" docker compose up -d mongo # Даем больше времени на запуск MongoDB echo -e "Ожидаем запуск MongoDB..." sleep 10 echo -e "Проверяем готовность MongoDB..." # Попытка подключения к MongoDB для проверки её готовности docker exec mongodb mongosh --quiet --eval "db.stats()" if [ $? -eq 0 ]; then echo -e "${GREEN}MongoDB успешно запущена и готова к работе${NC}" else echo -e "${YELLOW}Ожидаем дополнительное время для полной инициализации MongoDB...${NC}" sleep 5 fi fi # Запускаем тесты в Docker echo -e "${YELLOW}Запускаем контейнер с тестами...${NC}" docker compose up --build tests # Получаем код выхода контейнера с тестами exit_code=$(docker inspect -f '{{.State.ExitCode}}' wish-list-api-tests) # Останавливаем контейнер с тестами docker compose stop tests if [ $exit_code -eq 0 ]; then echo -e "${GREEN}✓ Все тесты успешно пройдены${NC}" echo -e "${YELLOW}Отчеты о покрытии тестами сохранены в директории ./coverage${NC}" else echo -e "${RED}✗ Некоторые тесты содержат ошибки (код выхода: $exit_code)${NC}" fi # Спрашиваем пользователя, хочет ли он остановить MongoDB read -p "Остановить MongoDB? (y/n): " stop_mongo if [ "$stop_mongo" = "y" ] || [ "$stop_mongo" = "Y" ]; then docker compose stop mongo echo -e "MongoDB остановлена" fi exit $exit_code