Здравствуйте!
Кастомный метод REST Api
class UserViewSet(viewsets.ModelViewSet):
...
...
@detail_route(methods=['POST'], permission_classes=[IsAuthenticated])
def set_password(self, request, pk=None):
user = self.get_object()
serializer = user_serializers.SetPasswordSerializer(data=request.data, context={'request': request})
if serializer.is_valid():
user.set_password(serializer.data['new_password'])
user.save()
if user.check_password(serializer.data['new_password']):
return Response({'status': 'success'}, status=status.HTTP_200_OK)
else:
return Response({'status': 'error'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
else:
return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Тестирую это:
class SetPasswordAPITest(APITestCase):
def setUp(self):
self.superuser = create_superuser()
def test_set_password(self):
user = create_user_test1()
data = {
'current_password': 'test1',
'new_password': 'updatedPassword',
're_new_password': 'updatedPassword'
}
self.client.login(username='test1', password='test1')
response = self.client.post(reverse('user-set-password', args=[user.id]), data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertTrue(user.check_password('updatedPassword'))
От сервера ответ 200, то есть check_password во вьюхе возвращает True, но в тесте метод возвращает False.
Сразу оговорюсь, что модель юзера кастомная, если понадобится выложу