Django unit test IntegrityError handling

У меня есть TransactionManagementError в моем Django unittest attemption. Вот моя модель:

class Like(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
post = models.ForeignKey('Post', on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)

class Meta:
    constraints = [models.UniqueConstraint(fields=['user', 'post'])]

Вот мой тестовый вид:

class LikeCreateDestroyAPIView(APIView):
permission_classes = (permissions.IsAuthenticated,)

def get(self, *args, **kwargs):
    try:
        like = Like.objects.create(user=self.request.user, post=Post.objects.get(pk=self.kwargs['post_id']))
        reply = 'like created'
        status = 201
    except IntegrityError:
        like_to_delete = Like.objects.get(user=self.request.user, post=Post.objects.get(pk=self.kwargs['post_id']))
        like = copy.deepcopy(like_to_delete)
        like_to_delete.delete()
        reply = 'like deleted'
        status = 204
    except Post.DoesNotExist:
        return Response({'status': "Post doesn't exist"}, status=404)

    return Response({reply: model_to_dict(like)}, status=status)

Вот мой модульный тест, наследующий от rest_framework.test.APITestCase. Я пытаюсь получить лайк от уже понравившегося пользователя (успешно добавил лайк этому пользователю до теста), поэтому это нарушает ограничение целостности модели Like.

   # Authorized by liked user
    response3 = self.client.get(
        reverse("like-create-api", args=[self.test_post_11.id]),
        HTTP_AUTHORIZATION=f"JWT {self.access_token_user1}"
    )

    self.assertEqual(response3.status_code, 204)

Может ли кто-нибудь помочь советом?

Так что я просто изменил LikeCreateDestroyAPIView, чтобы избежать IntegrityError. Так что теперь тест пройден. Но в любом случае интересно, почему тест нарушает ошибку и как решить такое исключение в тестировании.

Вернуться на верх