Django RequestFactory не сохраняет пользователя - PullRequest
0 голосов
/ 25 мая 2020

Я проверяю, может ли пользователь API POST просматривать, если пользователь может передать разрешение IsAuthenticated. После запуска теста я получаю сообщение об ошибке: AssertionError: 401 != 201.

Когда permission_classes = (permissions.IsAuthenticated,) закомментировано и тест запускается снова, я обнаруживаю, что request.user оказывается AnonymousUser. Тем не менее, у меня есть User, созданный и прикрепленный к запросу, как показано ниже.

Я не уверен, что вызывает это, и хочу понять, как я могу передать экземпляр User в запрос.

Примечание - я пытаюсь сделать это в Django API тестирования, а не использовать Django REST Framework.

tests.py

class TestUserPreferencesResource(TestCase):
    '''Verify that a User is capable of setting preferences for their profile'''

    @classmethod
    def setUpTestData(cls):

        cls.user = User.objects.create_user('Mock', password="secret")

        cls.user_prefs = json.dumps({
            "age": ['Baby', 'Adult'],
            "gender": ['Male'],
            "size": ["Medium", "Large"]
        })

        cls.factory = RequestFactory()
        cls.credentials = b64encode(b"Mock:secret").decode("ascii")


    def test_user_preferences_settings(self):
        request = self.factory.post(
            reverse("pref-settings"),
            data=self.user_prefs,
            content_type="application/json",
            headers = {
                "Authorization": f"Basic {self.credentials}"
            },
        )
        request.user = self.user
        print(request.user)
        response = UserPrefView.as_view()(request)
        self.assertEqual(response.status_code, 201)

views.py


class UserPrefView(
        CreateModelMixin,
        UpdateModelMixin,
        GenericAPIView):

    queryset = UserPref.objects.all()
    permission_classes = (permissions.IsAuthenticated,)
    serilaizer_class = serializers.UserPreferenceSerializer

    def post(self, request, format=None):
        import pdb; pdb.set_trace()
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save(user=request.user)
        return Response(serializer.data)

...