mercredi 20 novembre 2019

Django REST testing - how to specify pk argument referring to the model instance created in setUp function

I have a model "Article" and I want to test if authorized user can GET an individual article. The testing class is:

class TestPost(APITestCase):
    def setUp(self):
        self.factory = APIRequestFactory()
        self.user = User.objects.create_user(
            username='Name', email='test@company.com', password='secret')
        self.article = Article.objects.create(
            author = 'Author', title = 'Article title', body = 'Body content ...')

     def test_detail_user(self):
        request = self.factory.get(reverse('article_id', kwargs={'pk': 1}))
        request.user = self.user
        response = ArticleDetail.as_view()(request, pk=1)
        self.assertEqual(response.status_code, 200,
                        f'Expected Response Code 200 - OK, received {response.status_code} instead.')

The URL pattern is:

path('<int:pk>/', ArticleDetail.as_view(), name = 'article_id'),

And when running tests I get the following error:

f'Expected Response Code 200 - OK, received {response.status_code} instead.')
AssertionError: 404 != 200 : Expected Response Code 200 - OK, received 404 instead.

I suppose the problem is in the specified 'pk', but I cannot figure out how to specify pk without stating an exact figure of 1. How can I refer to the article created in setUp function instead?

Aucun commentaire:

Enregistrer un commentaire