Допустим у меня есть некая АПИ (сильно упрощено):
api.py:
from some.app import some_external_check
class SomeViewSet(GenericViewSet):
...
@action(detail=False, methods=['POST'], permission_classes=(permissions.IsAuthenticated, ))
def somefunc(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
result = some_external_check(serializer.validated_data) # <-- вот тут надо пропатчить результат вызова на определенное значение
...
# какие-то вычисления дальше
return Response(someresult)
И я делаю тест для нее:
tests.py:
from unittest.mock import Mock, patch
from rest_framework import status
from rest_framework.test import APITestCase, APIClient
class SomeAPITest(APITestCase):
...
def test_somefunc(self):
my_client = APIClient()
my_client.credentials(HTTP_AUTHORIZATION=f'Token {SOMETOKEN}')
...
response = my_client.post(reverse('some-url-for-somefunc-api'), data=data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
# тут тестирую результат вызова
...
Так вот - как с помощью Mock или любой другой библиотеки написать тест не внедряясь в сам код, чтобы патчился вызов функции some_external_check с возвратом некоторого определенного значения в целях дальнейшего тестирования?
И как это вообще правильно делается?