Добавлен класс RequestManager
This commit is contained in:
@@ -11,4 +11,11 @@
|
||||
from .configuration_manager_tests import ConfigurationManagerTests
|
||||
from .crypto_manager_tests import CryptoManagerTests
|
||||
from .locale_manager_tests import LocaleManagerTests
|
||||
|
||||
from .request_manager_get_request_account_tests import RequestManagerGetRequestAccountTests
|
||||
from .request_manager_get_request_context_tests import RequestManagerGetRequestContextTests
|
||||
from .request_manager_get_request_id_tests import RequestManagerGetRequestIdTests
|
||||
from .request_manager_get_request_method_tests import RequestManagerGetRequestMethodTests
|
||||
from .request_manager_get_request_session_tests import RequestManagerGetRequestSessionTests
|
||||
|
||||
from .sesson_manager_tests import SessionManagerTests
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса RequestManagerGetRequestAccountTests
|
||||
"""
|
||||
|
||||
from rest_framework.request import Request
|
||||
|
||||
from net.xeaf.rack.core.tests import CoreTestCase
|
||||
from net.xeaf.rack.enums import HttpMethod
|
||||
from net.xeaf.rack.management.userstory import AccountTestData
|
||||
from net.xeaf.rack.managers import RequestManager
|
||||
from net.xeaf.rack.models import SessionModel
|
||||
from net.xeaf.rack.utils.exceptions import UnauthorizedException
|
||||
|
||||
|
||||
class RequestManagerGetRequestAccountTests(CoreTestCase):
|
||||
"""
|
||||
Тесты для RequestManager.get_request_account()
|
||||
"""
|
||||
|
||||
def _create_test_request(self, session: SessionModel | None) -> Request:
|
||||
"""
|
||||
Создает запрос для тестирования
|
||||
|
||||
:param session: Модель сессии
|
||||
|
||||
:return: Объект запроса
|
||||
"""
|
||||
|
||||
return self.create_request(method=HttpMethod.GET, path="/test", auth=session)
|
||||
|
||||
def test_get_request_account_authenticated(self):
|
||||
"""
|
||||
Получение аккаунта из аутентифицированного запроса
|
||||
"""
|
||||
|
||||
session = self.get_i_ivanov_session()
|
||||
request = self._create_test_request(session=session)
|
||||
result = RequestManager.get_request_account(request)
|
||||
|
||||
self.assertIsNotNone(result)
|
||||
self.assertEqual(str(result.id), str(AccountTestData.I_IVANOV_ID))
|
||||
self.assertEqual(result.username, AccountTestData.I_IVANOV_USERNAME)
|
||||
|
||||
def test_get_request_account_unauthenticated_raises_error(self):
|
||||
"""
|
||||
Запрос без аутентификации - ошибка UnauthorizedException
|
||||
"""
|
||||
|
||||
request = self._create_test_request(session=None)
|
||||
|
||||
with self.assertRaises(UnauthorizedException):
|
||||
RequestManager.get_request_account(request)
|
||||
|
||||
def test_get_request_account_petrov(self):
|
||||
"""
|
||||
Получение аккаунта Петрова
|
||||
"""
|
||||
|
||||
session = self.get_p_petrov_session()
|
||||
request = self._create_test_request(session=session)
|
||||
result = RequestManager.get_request_account(request)
|
||||
|
||||
self.assertIsNotNone(result)
|
||||
self.assertEqual(str(result.id), str(AccountTestData.P_PETROV_ID))
|
||||
self.assertEqual(result.username, AccountTestData.P_PETROV_USERNAME)
|
||||
@@ -0,0 +1,83 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса RequestManagerGetRequestContextTests
|
||||
"""
|
||||
|
||||
from typing import Any
|
||||
from uuid import UUID
|
||||
|
||||
from rest_framework.request import Request
|
||||
|
||||
from net.xeaf.rack.core.tests import CoreTestCase
|
||||
from net.xeaf.rack.enums import HttpMethod
|
||||
from net.xeaf.rack.management.userstory import AccountTestData
|
||||
from net.xeaf.rack.managers import RequestManager
|
||||
from net.xeaf.rack.models import SessionModel
|
||||
|
||||
|
||||
class RequestManagerGetRequestContextTests(CoreTestCase):
|
||||
"""
|
||||
Тесты для RequestManager.get_request_session()
|
||||
"""
|
||||
|
||||
def _create_test_request(self, session: SessionModel | None, headers: dict[str, Any] | None = None) -> Request:
|
||||
"""
|
||||
Создает запрос для тестирования
|
||||
|
||||
:param session: Модель сессии
|
||||
:param headers: Заголовки запроса
|
||||
|
||||
:return: Объект запроса
|
||||
"""
|
||||
|
||||
return self.create_request(method=HttpMethod.GET, path="/test", headers=headers, auth=session)
|
||||
|
||||
def test_get_request_context_with_auth(self):
|
||||
"""
|
||||
RM-005-1: Контекст с аутентификацией
|
||||
"""
|
||||
session = self.get_i_ivanov_session()
|
||||
request = self._create_test_request(session=session)
|
||||
|
||||
result = RequestManager.get_request_context(request)
|
||||
|
||||
self.assertIn('id', result)
|
||||
self.assertIn('account', result)
|
||||
self.assertIn('request', result)
|
||||
|
||||
self.assertIsInstance(result['id'], UUID)
|
||||
self.assertEqual(str(result['account'].id), str(AccountTestData.I_IVANOV_ID))
|
||||
self.assertEqual(result['request'], request)
|
||||
|
||||
def test_get_request_context_without_auth(self):
|
||||
"""
|
||||
Контекст без аутентификации - account = None
|
||||
"""
|
||||
|
||||
request = self._create_test_request(session=None)
|
||||
result = RequestManager.get_request_context(request)
|
||||
|
||||
self.assertIn('id', result)
|
||||
self.assertIn('account', result)
|
||||
self.assertIn('request', result)
|
||||
|
||||
self.assertIsInstance(result['id'], UUID)
|
||||
self.assertIsNone(result['account'])
|
||||
self.assertEqual(result['request'], request)
|
||||
|
||||
def test_get_request_context_with_request_id(self):
|
||||
"""
|
||||
Контекст с указанным Request-ID
|
||||
"""
|
||||
|
||||
request_id = "bd428358-6944-4657-8044-a3dc1c4dff8a"
|
||||
request = self._create_test_request(session=None, headers={RequestManager.REQUEST_ID_META: request_id})
|
||||
result = RequestManager.get_request_context(request)
|
||||
|
||||
self.assertIsInstance(result['id'], UUID)
|
||||
self.assertEqual(str(result['id']), request_id)
|
||||
@@ -0,0 +1,66 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса RequestManagerGetRequestIdTests
|
||||
"""
|
||||
|
||||
from uuid import UUID
|
||||
|
||||
from net.xeaf.rack.core.tests import CoreTestCase
|
||||
from net.xeaf.rack.enums import HttpMethod
|
||||
from net.xeaf.rack.managers import RequestManager
|
||||
from net.xeaf.rack.utils.exceptions import BadRequestException
|
||||
|
||||
|
||||
class RequestManagerGetRequestIdTests(CoreTestCase):
|
||||
"""
|
||||
Тесты для RequestManager.get_request_id()
|
||||
"""
|
||||
|
||||
def _create_test_request(self, request_id: str | None = None):
|
||||
"""
|
||||
Создание тестового запроса с указанным Request-ID
|
||||
"""
|
||||
|
||||
headers = {RequestManager.REQUEST_ID_META: request_id} if request_id else {}
|
||||
return self.create_request(
|
||||
method=HttpMethod.GET,
|
||||
path="/test",
|
||||
headers=headers
|
||||
)
|
||||
|
||||
def test_get_request_id_valid(self):
|
||||
"""
|
||||
Получение валидного Request-ID из заголовка
|
||||
"""
|
||||
|
||||
request_id = "bd428358-6944-4657-8044-a3dc1c4dff8a"
|
||||
request = self._create_test_request(request_id)
|
||||
|
||||
result = RequestManager.get_request_id(request)
|
||||
|
||||
self.assertIsInstance(result, UUID)
|
||||
self.assertEqual(str(result), request_id)
|
||||
|
||||
def test_get_request_id_missing(self):
|
||||
"""
|
||||
Заголовок X-Request-ID отсутствует - новый UUID
|
||||
"""
|
||||
|
||||
request = self._create_test_request()
|
||||
result = RequestManager.get_request_id(request)
|
||||
|
||||
self.assertIsInstance(result, UUID)
|
||||
|
||||
def test_get_request_id_invalid(self):
|
||||
"""
|
||||
Невалидный X-Request-ID - возникает исключение BadRequestException
|
||||
"""
|
||||
|
||||
request = self._create_test_request('invalid-uuid')
|
||||
with self.assertRaises(BadRequestException):
|
||||
RequestManager.get_request_id(request)
|
||||
@@ -0,0 +1,92 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса RequestManagerGetRequestMethodTests
|
||||
"""
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from rest_framework.request import Request
|
||||
|
||||
from net.xeaf.rack.core.tests import CoreTestCase
|
||||
from net.xeaf.rack.enums import HttpMethod
|
||||
from net.xeaf.rack.managers import RequestManager
|
||||
|
||||
|
||||
class RequestManagerGetRequestMethodTests(CoreTestCase):
|
||||
"""
|
||||
Тесты для RequestManager.get_request_method()
|
||||
"""
|
||||
|
||||
def _create_test_request(self, method: HttpMethod) -> Request:
|
||||
"""
|
||||
Создает запрос для тестирования
|
||||
|
||||
:param method: Метод запроса
|
||||
:return: Объект запроса
|
||||
"""
|
||||
|
||||
return self.create_request(method=method, path="/test")
|
||||
|
||||
def test_get_request_method_get(self):
|
||||
"""
|
||||
GET запрос
|
||||
"""
|
||||
|
||||
request = self._create_test_request(HttpMethod.GET)
|
||||
result = RequestManager.get_request_method(request)
|
||||
self.assertEqual(result, HttpMethod.GET)
|
||||
|
||||
def test_get_request_method_post(self):
|
||||
"""
|
||||
POST запрос
|
||||
"""
|
||||
|
||||
request = self._create_test_request(HttpMethod.POST)
|
||||
result = RequestManager.get_request_method(request)
|
||||
|
||||
self.assertEqual(result, HttpMethod.POST)
|
||||
|
||||
def test_get_request_method_put(self):
|
||||
"""
|
||||
PUT запрос
|
||||
"""
|
||||
|
||||
request = self._create_test_request(HttpMethod.PUT)
|
||||
result = RequestManager.get_request_method(request)
|
||||
|
||||
self.assertEqual(result, HttpMethod.PUT)
|
||||
|
||||
def test_get_request_method_patch(self):
|
||||
"""
|
||||
PATCH запрос
|
||||
"""
|
||||
|
||||
request = self._create_test_request(HttpMethod.PATCH)
|
||||
result = RequestManager.get_request_method(request)
|
||||
|
||||
self.assertEqual(result, HttpMethod.PATCH)
|
||||
|
||||
def test_get_request_method_delete(self):
|
||||
"""
|
||||
DELETE запрос
|
||||
"""
|
||||
|
||||
request = self._create_test_request(HttpMethod.DELETE)
|
||||
result = RequestManager.get_request_method(request)
|
||||
|
||||
self.assertEqual(result, HttpMethod.DELETE)
|
||||
|
||||
def test_get_request_method_missing_raises_error(self):
|
||||
"""
|
||||
Метод отсутствует - ошибка ImproperlyConfigured
|
||||
"""
|
||||
|
||||
request = self._create_test_request(HttpMethod.DELETE)
|
||||
request.method = None
|
||||
|
||||
with self.assertRaises(ImproperlyConfigured):
|
||||
RequestManager.get_request_method(request)
|
||||
@@ -0,0 +1,75 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса RequestManagerGetRequestSessionTests
|
||||
"""
|
||||
|
||||
from rest_framework.request import Request
|
||||
|
||||
from net.xeaf.rack.core.tests import CoreTestCase
|
||||
from net.xeaf.rack.enums import HttpMethod
|
||||
from net.xeaf.rack.management.userstory import AccountTestData
|
||||
from net.xeaf.rack.management.userstory import SessionTestData
|
||||
from net.xeaf.rack.managers import RequestManager
|
||||
from net.xeaf.rack.models import SessionModel
|
||||
|
||||
|
||||
class RequestManagerGetRequestSessionTests(CoreTestCase):
|
||||
"""
|
||||
Тесты для RequestManager.get_request_session()
|
||||
"""
|
||||
|
||||
def _create_test_request(self, session: SessionModel | None) -> Request:
|
||||
"""
|
||||
Создает запрос для тестирования
|
||||
|
||||
:param session: Модель сессии
|
||||
|
||||
:return: Объект запроса
|
||||
"""
|
||||
|
||||
return self.create_request(method=HttpMethod.GET, path="/test", auth=session)
|
||||
|
||||
# noinspection DuplicatedCode
|
||||
def test_get_request_session_authenticated(self):
|
||||
"""
|
||||
Получение сессии из аутентифицированного запроса
|
||||
"""
|
||||
|
||||
session = self.get_i_ivanov_session()
|
||||
request = self._create_test_request(session=session)
|
||||
result = RequestManager.get_request_session(request)
|
||||
|
||||
self.assertIsNotNone(result)
|
||||
self.assertIsInstance(result, SessionModel)
|
||||
self.assertEqual(result.token, SessionTestData.I_IVANOV_SESSION_TOKEN)
|
||||
self.assertEqual(str(result.account.id), str(AccountTestData.I_IVANOV_ID))
|
||||
|
||||
def test_get_request_session_unauthenticated(self):
|
||||
"""
|
||||
Запрос без аутентификации - возвращает None
|
||||
"""
|
||||
|
||||
request = self._create_test_request(session=None)
|
||||
result = RequestManager.get_request_session(request)
|
||||
|
||||
self.assertIsNone(result)
|
||||
|
||||
# noinspection DuplicatedCode
|
||||
def test_get_request_session_petrov(self):
|
||||
"""
|
||||
Получение сессии Петрова
|
||||
"""
|
||||
|
||||
session = self.get_p_petrov_session()
|
||||
request = self._create_test_request(session=session)
|
||||
result = RequestManager.get_request_session(request)
|
||||
|
||||
self.assertIsNotNone(result)
|
||||
self.assertIsInstance(result, SessionModel)
|
||||
self.assertEqual(result.token, SessionTestData.P_PETROV_SESSION_TOKEN)
|
||||
self.assertEqual(str(result.account.id), str(AccountTestData.P_PETROV_ID))
|
||||
Reference in New Issue
Block a user