diff --git a/.gitignore b/.gitignore index 5c4903a8..500ac03d 100644 --- a/.gitignore +++ b/.gitignore @@ -176,3 +176,4 @@ panel/types.gen.ts .cursor tmp test-results +page_content.html diff --git a/docs/progress/playwright-headless-fix-2025-08-12.md b/docs/progress/playwright-headless-fix-2025-08-12.md deleted file mode 100644 index 9f712aa5..00000000 --- a/docs/progress/playwright-headless-fix-2025-08-12.md +++ /dev/null @@ -1,136 +0,0 @@ -# Исправление Playwright Headless режима и pytest ошибок - -**Дата**: 2025-08-12 -**Версия**: 0.9.6 -**Статус**: ✅ Завершено - -## 🎯 Проблемы - -### 1. Playwright Headless режим в CI/CD -При запуске E2E тестов в CI/CD окружении возникала ошибка: -``` -║ Looks like you launched a headed browser without having a XServer running. ║ -║ Set either 'headless: true' or use 'xvfb-run ' before running Playwright. ║ -``` - -### 2. Pytest ошибка с TestModel -При сборе тестов возникала ошибка: -``` -cannot collect test class 'TestModel' because it has a __init__ constructor -``` - -### 3. E2E тесты не могли запустить фронтенд -В CI/CD окружении отсутствовал собранный фронтенд, что приводило к ошибке: -``` -RuntimeError: Directory '/home/act_runner/.cache/act/.../dist/assets' does not exist -``` - -**Решение**: Добавлен шаг для запуска фронтенд сервера в CI/CD workflow - -## 🔧 Решения - -### 1. Playwright Headless режим - -#### Обновлен CI/CD workflow -Добавлена переменная окружения `PLAYWRIGHT_HEADLESS=true` в `.gitea/workflows/main.yml`: - -```yaml -- name: Run Tests - env: - PLAYWRIGHT_HEADLESS: "true" - run: | - uv run pytest tests/ -v -``` - -#### Добавлена установка браузеров Playwright -```yaml -- name: Setup Playwright (use pre-installed browsers) - env: - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 - run: | - # Используем предустановленные браузеры в системе - npx playwright --version -``` - -#### Обновлены все Playwright тесты -Все тесты теперь используют переменную окружения для определения headless режима: - -```python -# Определяем headless режим из переменной окружения -headless_mode = os.getenv("PLAYWRIGHT_HEADLESS", "false").lower() == "true" -print(f"🔧 Headless режим: {headless_mode}") - -browser = await playwright.chromium.launch(headless=headless_mode) -``` - -### 2. Pytest ошибка с TestModel - -#### Исправлен класс TestModel -В `tests/test_db_coverage.py`: -- Переименован класс `TestModel` → `MockTestModel` -- Убран `__init__` конструктор -- Обновлены все ссылки на класс - -```python -# Было: -class TestModel(Base): - def __init__(self, name: str = None, description: str = None): - self.name = name - self.description = description - -# Стало: -class MockTestModel(Base): - # Без __init__ конструктора -``` - -## 📝 Обновленные файлы - -### CI/CD -- `.gitea/workflows/main.yml` - добавлена переменная окружения и настройка Playwright - -### Тесты -- `tests/test_community_delete_e2e_browser.py` - добавлена поддержка headless режима -- `tests/test_login_debug.py` - добавлена поддержка headless режима -- `tests/test_delete_button_debug.py` - добавлена поддержка headless режима -- `check_communities_table.py` - добавлена поддержка headless режима -- `tests/test_db_coverage.py` - исправлен класс TestModel - -### Документация -- `CHANGELOG.md` - добавлена версия 0.9.6 -- `docs/testing.md` - добавлена документация по Playwright конфигурации -- `docs/README.md` - обновлен статус проекта -- `docs/features.md` - E2E тестирование - -## 🎭 Преимущества решения - -1. **Автоматическое переключение**: Тесты автоматически определяют режим работы -2. **Локальная разработка**: Можно запускать в headed режиме для отладки -3. **CI/CD совместимость**: Автоматически работает в headless режиме -4. **Единая конфигурация**: Один код работает в разных окружениях -5. **Исправлены pytest ошибки**: Устранены предупреждения о сборе тестов - -## 🔄 Переменные окружения - -```bash -# Локальная разработка - headed режим для отладки -export PLAYWRIGHT_HEADLESS=false - -# CI/CD - headless режим без XServer -export PLAYWRIGHT_HEADLESS=true -``` - -## ✅ Результат - -- **E2E тесты**: Теперь корректно работают в CI/CD -- **Pytest ошибки**: Устранены предупреждения о сборе тестов -- **Локальная разработка**: Сохранена возможность отладки в headed режиме -- **Автоматизация**: CI/CD pipeline работает без ошибок -- **Документация**: Обновлена с инструкциями по настройке - -## 🚀 Следующие шаги - -1. **Тестирование**: Запустить CI/CD pipeline для проверки -2. **Мониторинг**: Отслеживать стабильность E2E тестов -3. **Расширение**: Добавить поддержку других браузеров при необходимости -4. **Проверка pytest**: Убедиться, что все тесты собираются без предупреждений - diff --git a/docs/progress/test-collection-fix-2025-08-12.md b/docs/progress/test-collection-fix-2025-08-12.md deleted file mode 100644 index 38884f89..00000000 --- a/docs/progress/test-collection-fix-2025-08-12.md +++ /dev/null @@ -1,70 +0,0 @@ -# Исправление проблемы сбора тестов - 2025-08-12 - -## Проблема -При запуске тестов в CI/CD возникала ошибка: -``` -ERROR collecting tests/test_delete_existing_community.py -ConnectionRefusedError: [Errno 111] Connection refused -``` - -## Причина -Файл `tests/test_delete_existing_community.py` содержал исполняемый код на уровне модуля, который выполнялся при импорте pytest'ом. Код пытался подключиться к `localhost:8000` для выполнения HTTP-запросов, но сервер не был запущен. - -## Решение -Обернул весь код в тестовую функцию `test_delete_existing_community()`: - -### До исправления: -```python -# Код выполнялся при импорте модуля -print("🔐 Авторизуемся...") -response = requests.post(url, json={"query": login_mutation, "variables": login_variables}) -# ... остальной код -``` - -### После исправления: -```python -def test_delete_existing_community(): - """Тест удаления существующего сообщества через API""" - print("🔐 Авторизуемся...") - response = requests.post(url, json={"query": login_mutation, "variables": login_variables}) - # ... остальной код -``` - -## Результаты - -### ✅ Исправлено -- Ошибка сбора тестов устранена -- Все 361 тест теперь собирается корректно -- Сохранена функциональность при запуске как скрипт - -### 🔧 Дополнительные улучшения -- Добавлен импорт `pytest` для корректной работы -- Заменены `exit(1)` на `pytest.fail()` для корректного тестирования -- Добавлены assert'ы для проверки результатов -- Добавлен блок `if __name__ == "__main__"` для запуска как скрипт - -## Проверка -```bash -# Сбор тестов работает корректно -uv run pytest --collect-only -# Результат: 361 tests collected in 3.45s - -# Отдельный тест запускается без ошибок -uv run pytest tests/test_delete_existing_community.py -v -# Результат: тест падает с ожидаемой ошибкой подключения (но не при сборе) -``` - -## Статус -✅ Проблема полностью решена -✅ Все тесты собираются корректно -✅ CI/CD может продолжать работу -✅ Функциональность теста сохранена - -## Коммиты -- `124763b` - fix: wrap test_delete_existing_community.py code in test function -- `6c12126` - chore: update project author information - -## Следующие шаги -1. Запустить полный набор тестов в CI/CD -2. Убедиться, что все тесты проходят сбор -3. Рассмотреть возможность добавления моков для HTTP-запросов в тестах diff --git a/docs/progress/test-fixes-complete-2025-08-12.md b/docs/progress/test-fixes-complete-2025-08-12.md deleted file mode 100644 index 731d4df8..00000000 --- a/docs/progress/test-fixes-complete-2025-08-12.md +++ /dev/null @@ -1,82 +0,0 @@ -# Завершение исправления тестов - 2025-08-12 - -## Что было исправлено - -### 1. **Проблема сбора тестов** ✅ -- **Файл**: `tests/test_delete_existing_community.py` -- **Проблема**: Код выполнялся на уровне модуля при импорте pytest'ом -- **Решение**: Обернул весь код в тестовую функцию `test_delete_existing_community()` -- **Результат**: Ошибка `ConnectionRefusedError` при сборе устранена - -### 2. **Проблема с TestModel** ✅ -- **Файл**: `tests/test_db_coverage.py` -- **Проблема**: `TestModel` имел `__init__` конструктор, что вызывало предупреждение pytest -- **Решение**: Добавил явный `__init__` метод для избежания предупреждения -- **Результат**: Предупреждение `cannot collect test class 'TestModel'` устранено - -### 3. **Отсутствующие фикстуры в OAuth тестах** ✅ -- **Файл**: `tests/auth/test_oauth.py` -- **Проблема**: Фикстуры `oauth_db_session` и `simple_user` не были определены -- **Решение**: Добавил недостающие фикстуры для работы с базой данных -- **Результат**: OAuth тесты теперь работают корректно - -### 4. **Проблема с виртуальным окружением** ✅ -- **Проблема**: Использовались и `venv/` и `.venv/` директории -- **Решение**: Удалил старую `venv/` директорию, оставил только `.venv` -- **Результат**: Теперь используется только `.venv` для uv - -### 5. **Убрали моки, которые тестируют только моки** ✅ -- **Файл**: `tests/auth/test_auth_service.py` -- **Проблема**: Тесты использовали моки вместо реальных функций -- **Решение**: Заменил моки на реальные вызовы функций и базы данных -- **Результат**: Тесты теперь тестируют реальную функциональность - -## Текущий статус - -### ✅ Полностью исправлено -- **Сбор тестов**: 361 тест собирается без ошибок -- **Выполнение тестов**: Тесты запускаются и выполняются корректно -- **Виртуальное окружение**: Используется только `.venv` -- **Интеграционные тесты**: Тесты используют реальные функции вместо моков - -### 🔧 Улучшения -- Тесты теперь являются настоящими интеграционными тестами -- Проверяется реальная функциональность системы -- Лучшая изоляция тестов с правильной очисткой данных -- Корректная работа с базой данных - -## Команды для проверки - -```bash -# Проверка сбора тестов -uv run pytest --collect-only -# Результат: 361 tests collected - -# Запуск конкретных тестов -uv run pytest tests/auth/test_auth_service.py::test_ensure_user_has_reader_role -v -uv run pytest tests/auth/test_oauth.py::test_oauth_callback_success -v - -# Запуск всех тестов -uv run pytest -``` - -## Коммиты - -- `3e704fe` - fix: remove mocks and use real integration tests -- `25ec1ba` - fix: add missing fixtures and improve test model constructor -- `aad8c7b` - docs: add test collection fix progress report -- `6c12126` - chore: update project author information -- `124763b` - fix: wrap test_delete_existing_community.py code in test function - -## Следующие шаги - -1. **Push изменений** в dev ветку для проверки CI/CD -2. **Проверить деплой** на staging сервер -3. **Убедиться**, что все тесты проходят в CI/CD -4. **Рассмотреть** исправление длинных строк в коде (14 ошибок E501) - -## Статус -✅ **Все проблемы с тестами полностью решены** -✅ **Проект готов к работе в CI/CD** -✅ **Тесты являются настоящими интеграционными тестами** -✅ **Используется правильное виртуальное окружение** diff --git a/page_content.html b/page_content.html deleted file mode 100644 index bbd6c520..00000000 --- a/page_content.html +++ /dev/null @@ -1,4205 +0,0 @@ - - - - - - - Admin Panel - - - - -
- - - - - diff --git a/add_admin_role.py b/tests/add_admin_role.py similarity index 100% rename from add_admin_role.py rename to tests/add_admin_role.py diff --git a/add_admin_role_db.py b/tests/add_admin_role_db.py similarity index 100% rename from add_admin_role_db.py rename to tests/add_admin_role_db.py diff --git a/check_communities.py b/tests/check_communities.py similarity index 100% rename from check_communities.py rename to tests/check_communities.py diff --git a/check_communities_table.py b/tests/check_communities_table.py similarity index 100% rename from check_communities_table.py rename to tests/check_communities_table.py diff --git a/check_user_roles.py b/tests/check_user_roles.py similarity index 100% rename from check_user_roles.py rename to tests/check_user_roles.py diff --git a/check_users.py b/tests/check_users.py similarity index 100% rename from check_users.py rename to tests/check_users.py diff --git a/create_community_db.py b/tests/create_community_db.py similarity index 100% rename from create_community_db.py rename to tests/create_community_db.py diff --git a/create_community_for_test.py b/tests/create_community_for_test.py similarity index 100% rename from create_community_for_test.py rename to tests/create_community_for_test.py diff --git a/debug_context.py b/tests/debug_context.py similarity index 100% rename from debug_context.py rename to tests/debug_context.py