dimanche 17 janvier 2021

Testing a query parameter in django restframework

I am testing a query parameter in djnago restframework to retrieve the detail of an object. The query works in the browser but not the test. I think I am not calling the response correctly with:

    response = self.client.get(reverse('quote-requests:get-calculator-detail', kwargs={'calculator_code': self.calc1.calculator_code}))

the apps urls.py

       
    from django.contrib import admin
    from django.urls import path, include

    urlpatterns = [
        path('api/v1/quote-requests/', include('quote_requests.urls')),
    ]

which includes the quotes.urls.py


    from django.urls import path, include
    from rest_framework.routers import DefaultRouter

    from quote_requests import views 

    router = DefaultRouter()
    router.register('get-calculator', views.CalculatorCodeDetailViewSet, basename='get-calculator')

    app_name = 'quote-requests'

    urlpatterns = [
        path('', include(router.urls)),
    ]

The viewset is:


    class CalculatorCodeDetailViewSet(viewsets.ReadOnlyModelViewSet):

        serializer_class        = CalculatorCodeSerializer

        lookup_field            = ('calculator_code')
        
        def get_queryset(self):
            return (
                Calculator.objects.filter(
                    calculator_code = self.request.query_params.get('calculator_code',)
                    )
            )

The CalculatorCodeSerializer is:

    class CalculatorCodeSerializer(serializers.ModelSerializer):


        class Meta:
            model = Calculator
            fields = (
                'name',
                'calculator_code',
                )

The test is:


    def test_retrieving_calculator_detail_with_calculator_code(self):
            ''' test retrieving detail of a calculator '''
            self.calc1 = Calculator.objects.create(
                name                =  "Calculator 1000",
                calculator_code     = "HH1000",
            )

            response = self.client.get(reverse('quote-requests:get-calculator-detail', kwargs={'calculator_code': self.calc1.calculator_code}))

            serializer = CalculatorCodeSerializer(self.calc1)

            self.assertEqual(response.data, serializer.data)

This yields the error:


    Traceback (most recent call last):
    File "/app/quote_requests/tests/test_calculators_api.py", line 149, in test_retrieving_calculator_detail_with_calculator_code
        self.assertEqual(response.data, serializer.data)
    AssertionError: {'detail': ErrorDetail(string='Not found.',[14 chars]nd')} != {'name': 'Calculator 1000', 'calculator_cod[368 chars].25'}


When checking the browser link:


    http://localhost:8000/api/v1/quote-requests/get-calculator/?calculator_code=HH1000

This works but test fails. Any help setting up the properly would be appreciated.

Aucun commentaire:

Enregistrer un commentaire