Esempio n. 1
0
def context(request: RestRequest) -> Dict:
    """
    Creates a context dict for the serializers.

    See https://stackoverflow.com/a/34444082
    """
    r = RestRequest(request._request)
    r.accepted_renderer = JSONRenderer
    return {'request': r}
Esempio n. 2
0
    def _create_dummy_request(self, path="/") -> Request:
        wsgi_request = APIRequestFactory().get(path)

        # Give access to all fields, so these can all be dumped.
        wsgi_request.user_scopes = UserScopes(query_params={},
                                              request_scopes=[])
        wsgi_request.user_scopes.has_any_scope = lambda *scopes: True
        wsgi_request.user_scopes.has_all_scopes = lambda *scopes: True

        # Wrap in DRF request object, like the view would have done.
        drf_request = Request(wsgi_request)
        drf_request.accepted_renderer = HALJSONRenderer()

        # Add what DSOViewMixin would have added
        drf_request.accept_crs = None
        drf_request.response_content_crs = None
        return drf_request
Esempio n. 3
0
def test_fields_limit_works(api_rf, movie, fields):
    """Prove that serializer can limit output fields."""
    django_request = api_rf.get("/", {"fields": fields})
    drf_request = Request(django_request)
    drf_request.accepted_renderer = HALJSONRenderer()

    queryset = Movie.objects.all()
    serializer = MovieSerializer(many=True,
                                 instance=queryset,
                                 context={"request": drf_request})
    paginator = DSOPageNumberPagination()
    paginator.paginate_queryset(queryset, drf_request)
    response = paginator.get_paginated_response(serializer.data)

    # Since response didn't to through APIView.finalize_response(), fix that:
    response.accepted_renderer = drf_request.accepted_renderer
    response.accepted_media_type = drf_request.accepted_renderer.media_type
    response.renderer_context = {"request": drf_request}
    data = read_response_json(response.render())

    assert data == {
        "_links": {
            "self": {
                "href": drf_request.build_absolute_uri()
            },
        },
        "_embedded": {
            "movie": [{
                "name": "foo123"
            }]
        },
        "page": {
            "number": 1,
            "size": 20
        },
    }
    assert response["X-Pagination-Page"] == "1"
    assert response["X-Pagination-Limit"] == "20"
Esempio n. 4
0
 def test_removes_url_fields_if_accepted_renderer_is_not_browsable_api(
         self):
     drf_request = Request(HttpRequest())
     drf_request.accepted_renderer = JSONRenderer()
     serializer = _SerializerWithUrlFields(context={'request': drf_request})
     self.assertEqual(1, len(serializer.fields))
Esempio n. 5
0
 def test_keeps_url_fields_if_accepted_renderer_is_browsable_api(self):
     drf_request = Request(HttpRequest())
     drf_request.accepted_renderer = BrowsableAPIRenderer()
     serializer = _SerializerWithUrlFields(context={'request': drf_request})
     self.assertEqual(3, len(serializer.fields))
Esempio n. 6
0
def to_drf_request(api_request):
    """Turns an API request into a DRF request."""
    request = Request(api_request)
    request.accepted_renderer = HALJSONRenderer()
    return request