feat(tests): добавлены тесты для моделей, форм и представлений - closes #168#171
feat(tests): добавлены тесты для моделей, форм и представлений - closes #168#171oleg-dixon wants to merge 11 commits intohexlet-volunteers:mainfrom
Conversation
- Тесты моделей, форм и Inertia views - 38 успешных тестов, покрытие 43% - 2 теста пропущены (известные баги в view)
- Тесты моделей, форм и Inertia views - 38 успешных тестов, покрытие 43% - 2 теста пропущены (известные баги в view)
| --cov-report=term-missing \ | ||
| -n auto | ||
|
|
||
| - name: Upload coverage to CodeClimate |
There was a problem hiding this comment.
Note
Для шага Upload coverage to CodeClimate безопаснее проверять secrets.CC_TEST_REPORTER_ID напрямую или вынести переменную на job-level env. В текущем виде if может не сработать так, как ожидается, потому что условие вычисляется отдельно от env этого шага.
|
|
||
| test: | ||
| python3 -m pytest --tb=short -q | ||
| fixtures: |
There was a problem hiding this comment.
Note
Таргет fixtures теперь обращается к ORM и создаёт пользователей через _create_test_user. На чистом окружении make test может упасть ещё до запуска pytest, потому что миграции для рабочей БД здесь не выполняются, а тестовая БД создаётся уже самим pytest.
Лучше не зависеть от заранее подготовленной локальной БД для запуска тестов.
| password1 = cleaned_data.get('password1') | ||
| password2 = cleaned_data.get('password2') | ||
|
|
||
| if password1 and password2: |
There was a problem hiding this comment.
Tip
Для ошибки несовпадения паролей лучше использовать self.add_error('password2', ...) или оставить встроенную проверку родительской формы.
Сейчас дополнительная ошибка поднимается из clean() как non-field error, и её сложнее привязать к полю подтверждения пароля в интерфейсе.
Добавлены тесты для ключевой логики проекта
Closes #168
📁 Новая структура тестов
conftest.py- общие фикстуры для тестовtest_models.py- тесты моделей User, Group, TelegramChannel, PartnerProfile, Role, UserRoleHistorytest_forms.py- тесты всех форм (регистрация, логин, обновление, группы и т.д.)test_views.py- функциональные тесты представлений с Inertia.jspytest.ini- конфигурация pytestgenerate_fixtures_ci.py- скрипт для генерации фикстур в CI (решает проблему синтаксиса YAML)🔧 Исправления
generate_fixtures.py- генерация валидных тестовых данных (username, email, password)pyproject.toml- добавлены тестовые зависимости (pytest, pytest-django, pytest-cov, pytest-mock)Makefile- добавлены цели для тестов (fixtures,test,test-cov)tests.yml- обновлен для запуска тестов в CI (миграции, генерация фикстур, параллельный запуск)✅ Результаты
🐛 Пропущенные тесты (7)
Проблемы в view (2 теста):
test_group_create_post_valid- в view используется неподдерживаемый параметр 'url' в inertia_rendertest_group_detail_view- в view вызывается несуществующий метод get_data у QuerySetПроблемы с внешними ключами в тестовой БД (5 тестов):
3.
test_create_user_role_history4.
test_user_role_history_str5.
test_multiple_roles_history6.
test_unique_current_role_constraint7.
test_current_role_managerЛинтер
В текущей версии линтер выдает 374 ошибки (в основном стилистические). Я намеренно не исправлял их в этом PR, чтобы:
Все ошибки линтера можно исправить отдельным PR после мерджа этого.
Также прилагаю скриншот с результатами тестов (41 passed, 7 skipped)
