Files
core/tests/test_coverage_imports.py
Untone 1b48675b92
Some checks failed
Deploy on push / deploy (push) Failing after 2m22s
[0.9.7] - 2025-08-18
### 🔄 Изменения
- **SQLAlchemy KeyError** - исправление ошибки `KeyError: Reaction` при инициализации
- **Исправлена ошибка SQLAlchemy**: Устранена проблема `InvalidRequestError: When initializing mapper Mapper[Shout(shout)], expression Reaction failed to locate a name (Reaction)`

### 🧪 Тестирование
- **Исправление тестов** - адаптация к новой структуре моделей
- **RBAC инициализация** - добавление `rbac.initialize_rbac()` в `conftest.py`
- **Создан тест для getSession**: Добавлен комплексный тест `test_getSession_cookies.py` с проверкой всех сценариев
- **Покрытие edge cases**: Тесты проверяют работу с валидными/невалидными токенами, отсутствующими пользователями
- **Мокирование зависимостей**: Использование unittest.mock для изоляции тестируемого кода

### 🔧 Рефакторинг
- **Упрощена архитектура**: Убраны сложные конструкции с отложенными импортами, заменены на чистую архитектуру
- **Перемещение моделей** - `Author` и связанные модели перенесены в `orm/author.py`: Вынесены базовые модели пользователей (`Author`, `AuthorFollower`, `AuthorBookmark`, `AuthorRating`) из `orm.author` в отдельный модуль
- **Устранены циклические импорты**: Разорван цикл между `auth.core` → `orm.community` → `orm.author` через реструктуризацию архитектуры
- **Создан модуль `utils/password.py`**: Класс `Password` вынесен в utils для избежания циклических зависимостей
- **Оптимизированы импорты моделей**: Убран прямой импорт `Shout` из `orm/community.py`, заменен на строковые ссылки

### 🔧 Авторизация с cookies
- **getSession теперь работает с cookies**: Мутация `getSession` теперь может получать токен из httpOnly cookies даже без заголовка Authorization
- **Убрано требование авторизации**: `getSession` больше не требует декоратор `@login_required`, работает автономно
- **Поддержка dual-авторизации**: Токен может быть получен как из заголовка Authorization, так и из cookie `session_token`
- **Автоматическая установка cookies**: Middleware автоматически устанавливает httpOnly cookies при успешном `getSession`
- **Обновлена GraphQL схема**: `SessionInfo` теперь содержит поля `success`, `error` и опциональные `token`, `author`
- **Единообразная обработка токенов**: Все модули теперь используют централизованные функции для работы с токенами
- **Улучшена обработка ошибок**: Добавлена детальная валидация токенов и пользователей в `getSession`
- **Логирование операций**: Добавлены подробные логи для отслеживания процесса авторизации

### 📝 Документация
- **Обновлена схема GraphQL**: `SessionInfo` тип теперь соответствует новому формату ответа
- Обновлена документация RBAC
- Обновлена документация авторизации с cookies
2025-08-18 14:25:25 +03:00

164 lines
4.9 KiB
Python

"""
Тест для импорта всех модулей для покрытия
"""
import pytest
# Импортируем все модули для покрытия
import services
import storage.db
import storage.redis
import rbac.api
import services.admin
import services.auth
import utils.common_result
import storage.env
import utils.exception
import services.notify
import storage.schema
import services.search
import utils.sentry
import services.viewed
import utils
import utils.logger
import utils.diff
import utils.encoders
import utils.extract_text
import utils.generate_slug
import orm
import orm.base
import orm.community
import orm.shout
import orm.reaction
import orm.collection
import orm.draft
import orm.topic
import orm.invite
import orm.rating
import orm.notification
import resolvers
import resolvers.__init__
import resolvers.auth
import resolvers.community
import resolvers.topic
import resolvers.reaction
import resolvers.reader
import resolvers.stat
import resolvers.follower
import resolvers.notifier
import resolvers.proposals
import resolvers.rating
import resolvers.draft
import resolvers.editor
import resolvers.feed
import resolvers.author
import resolvers.bookmark
import resolvers.collab
import resolvers.collection
import resolvers.admin
import auth
import auth.__init__
import rbac.permissions
import auth.decorators
import auth.oauth
import auth.state
import auth.middleware
import auth.identity
import auth.jwtcodec
import auth.email
import auth.exceptions
import auth.validations
import orm.author
import auth.credentials
import auth.handler
import auth.internal
class TestCoverageImports:
"""Тест импорта всех модулей для покрытия"""
def test_services_imports(self):
"""Тест импорта модулей services"""
assert services is not None
assert storage.db is not None
assert storage.redis is not None
assert rbac.api is not None
assert services.admin is not None
assert services.auth is not None
assert utils.common_result is not None
assert storage.env is not None
assert utils.exception is not None
assert services.notify is not None
assert storage.schema is not None
assert services.search is not None
assert utils.sentry is not None
assert services.viewed is not None
def test_utils_imports(self):
"""Тест импорта модулей utils"""
assert utils is not None
assert utils.logger is not None
assert utils.diff is not None
assert utils.encoders is not None
assert utils.extract_text is not None
assert utils.generate_slug is not None
def test_orm_imports(self):
"""Тест импорта модулей orm"""
assert orm is not None
assert orm.base is not None
assert orm.community is not None
assert orm.shout is not None
assert orm.reaction is not None
assert orm.collection is not None
assert orm.draft is not None
assert orm.topic is not None
assert orm.invite is not None
assert orm.rating is not None
assert orm.notification is not None
def test_resolvers_imports(self):
"""Тест импорта модулей resolvers"""
assert resolvers is not None
assert resolvers.__init__ is not None
assert resolvers.auth is not None
assert resolvers.community is not None
assert resolvers.topic is not None
assert resolvers.reaction is not None
assert resolvers.reader is not None
assert resolvers.stat is not None
assert resolvers.follower is not None
assert resolvers.notifier is not None
assert resolvers.proposals is not None
assert resolvers.rating is not None
assert resolvers.draft is not None
assert resolvers.editor is not None
assert resolvers.feed is not None
assert resolvers.author is not None
assert resolvers.bookmark is not None
assert resolvers.collab is not None
assert resolvers.collection is not None
assert resolvers.admin is not None
def test_auth_imports(self):
"""Тест импорта модулей auth"""
assert auth is not None
assert auth.__init__ is not None
assert rbac.permissions is not None
assert auth.decorators is not None
assert auth.oauth is not None
assert auth.state is not None
assert auth.middleware is not None
assert auth.identity is not None
assert auth.jwtcodec is not None
assert auth.email is not None
assert auth.exceptions is not None
assert auth.validations is not None
assert orm.author is not None
assert auth.credentials is not None
assert auth.handler is not None
assert auth.internal is not None