Ejemplo n.º 1
0
def test_get_resource_name():
    view = APIView()
    context = {'view': view}
    with override_settings(JSON_API_FORMAT_TYPES=None):
        assert 'APIViews' == utils.get_resource_name(context), 'not formatted'

    context = {'view': view}
    with override_settings(JSON_API_FORMAT_TYPES='dasherize'):
        assert 'api-views' == utils.get_resource_name(
            context), 'derived from view'

    view.model = get_user_model()
    assert 'users' == utils.get_resource_name(
        context), 'derived from view model'

    view.resource_name = 'custom'
    assert 'custom' == utils.get_resource_name(context), 'manually set on view'

    view.response = Response(status=403)
    assert 'errors' == utils.get_resource_name(context), 'handles 4xx error'

    view.response = Response(status=500)
    assert 'errors' == utils.get_resource_name(context), 'handles 500 error'

    view = GenericAPIView()
    view.serializer_class = ResourceSerializer
    context = {'view': view}
    assert 'users' == utils.get_resource_name(
        context), 'derived from serializer'

    view.serializer_class.Meta.resource_name = 'rcustom'
    assert 'rcustom' == utils.get_resource_name(context), 'set on serializer'

    view = GenericAPIView()
    view.serializer_class = NonModelResourceSerializer
    context = {'view': view}
    assert 'users' == utils.get_resource_name(
        context), 'derived from non-model serializer'
Ejemplo n.º 2
0
 def test_render_no_pagination3(self):
     obj = {'results': [{'foo': 'bar'}, {'spam': 'eggs'}]}
     renderer = DatatablesRenderer()
     view = APIView()
     view._datatables_total_count = 4
     view._datatables_filtered_count = 2
     request = view.initialize_request(
         self.factory.get('/api/foo/?format=datatables&draw=1'))
     content = renderer.render(obj, 'application/json', {
         'request': request,
         'view': view
     })
     expected = {
         'recordsTotal': 4,
         'recordsFiltered': 2,
         'data': [{
             'foo': 'bar'
         }, {
             'spam': 'eggs'
         }],
         'draw': 1
     }
     self.assertEquals(json.loads(content.decode('utf-8')), expected)
Ejemplo n.º 3
0
def test_auth_data_no_org_or_resource(api_client, data_source, hsa_params_factory):
    hsa_params = {
        "username": "******",
        "data_source": data_source,
    }
    params = hsa_params_factory(**hsa_params)

    # Create a fake DRF request
    request_factory = APIRequestFactory()
    http_request = request_factory.get("/", params)
    request = APIView().initialize_request(http_request)

    auth = HaukiSignedAuthentication()
    (authenticated_user, auth) = auth.authenticate(request)

    assert authenticated_user.id is not None
    assert authenticated_user.username == "test_user"

    assert auth.user == authenticated_user
    assert auth.user_origin.data_source == data_source
    assert auth.has_organization_rights is False
    assert auth.organization is None
    assert auth.resource is None
Ejemplo n.º 4
0
def test_auth_data_resource_data_source_id(
    api_client,
    data_source,
    resource_factory,
    resource_origin_factory,
    hsa_params_factory,
):
    resource = resource_factory()
    resource_origin = resource_origin_factory(
        resource=resource, data_source=data_source, origin_id="12345"
    )

    hsa_params = {
        "username": "******",
        "data_source": data_source,
        "resource": "{}:{}".format(
            resource_origin.data_source.id, resource_origin.origin_id
        ),
    }
    params = hsa_params_factory(**hsa_params)

    # Create a fake DRF request
    request_factory = APIRequestFactory()
    http_request = request_factory.get("/", params)
    request = APIView().initialize_request(http_request)

    auth = HaukiSignedAuthentication()
    (authenticated_user, auth) = auth.authenticate(request)

    assert authenticated_user.id is not None
    assert authenticated_user.username == "test_user"

    assert auth.user == authenticated_user
    assert auth.user_origin.data_source == data_source
    assert auth.has_organization_rights is False
    assert auth.organization is None
    assert auth.resource == resource
Ejemplo n.º 5
0
    def test_is_owner(self):
        # Get should return true even for unauthenticated requests
        request = self.factory.get(reverse('user-detail', args=[self.user.pk]))
        view_method = UserViewset.as_view({'get': 'list'})
        perm = IsOwnerOrReadOnly()
        self.assertTrue(
            perm.has_object_permission(request, view_method,
                                       self.user.profile))

        # Put should return false if the wrong guest is authenticated
        other_user = User.objects.create_user(username="******",
                                              email="*****@*****.**",
                                              password="******")
        view = BingoCardViewset.as_view({'put': 'update'})
        request = APIRequestFactory().put(
            reverse('user-detail', args=[self.user.pk]),
            instance=self.user,
            data={'username': '******'},
        )
        force_authenticate(request, user=other_user)
        request = APIView().initialize_request(request)

        self.assertFalse(
            perm.has_object_permission(request, view_method, self.card))
Ejemplo n.º 6
0
 def request(method, *args, **kwargs):
     request = getattr(APIRequestFactory(), method)(*args, **kwargs)
     return APIView().initialize_request(request)
Ejemplo n.º 7
0
from django.core.paginator import EmptyPage, InvalidPage, Page, Paginator
from django.db.models import Q
from django.shortcuts import render
from django.views import View
from django.http import QueryDict
from rest_framework import permissions, status
from rest_framework.response import Response
from rest_framework.views import APIView

class {{cookiecutter.project_name}}APIView(APIView):
    def prepare_parameters(self, params: QueryDict) -> dict:
        new_params = {}
        # This converts a query dict into a normal dictionary
        # However, it preserves lists if a list of query parameters is given
        params = {k: v[0] if len(v) == 1 else v for k, v in params.lists()}

        for key, value in params.items():
            if value in ["true", "True"]:
                new_params[key] = True
            elif value in ["false", "False"]:
                new_params[key] = False
            else:
                new_params[key] = value

        return new_params

class {{cookiecutter.project_name}}BaseListView({{cookiecutter.project_name}}APIView):
    def get_query_filter(self, request) -> Q:
        raise NotImplementedError("This is an abstract method!")

    def get_pagination_info(self, request) -> (int, int):
Ejemplo n.º 8
0
    def test_can_create_serializer(self):
        ds = Dataset.objects.get(pk=1)
        names = DatasetNameField(field1_en='en1', field2_en='en2')
        names.save()
        setattr(ds, "names", names)
        p1 = Polygon(((0, 0), (0, 1), (1, 1), (0, 0)))
        p2 = Polygon(((1, 1), (1, 2), (2, 2), (1, 1)))
        mpoly = MultiPolygon(p1, p2)
        polygon = MapPolygon(lat='42.7302',
                             lon='73.6788',
                             field1=1.0,
                             field2=2.0,
                             mpoly=mpoly,
                             dataset=ds)
        polygon.save()

        df1 = DataField(dataset=ds,
                        field_type='I',
                        field_name='int_data',
                        field_en='test1')
        df1.save()
        df2 = DataField(dataset=ds,
                        field_type='F',
                        field_name='float_data',
                        field_en='test2')
        df2.save()
        df3 = DataField(dataset=ds,
                        field_type='C',
                        field_name='char_data',
                        field_en='test3')
        df3.save()

        tag1 = Tag(dataset=ds, tag="tag1")
        tag1.save()
        tag2 = Tag(dataset=ds, tag="tag2")
        tag2.save()
        tag3 = Tag(dataset=ds, tag="tag3")
        tag3.save()

        element1 = DataElement(mapelement=polygon, datafield=df1, int_data=23)
        element1.save()
        element2 = DataElement(mapelement=polygon,
                               datafield=df2,
                               float_data=2.34)
        element2.save()
        element3 = DataElement(mapelement=polygon,
                               datafield=df3,
                               char_data='abc')
        element3.save()

        request = HttpRequest()
        qdict = QueryDict('', mutable=True)
        qdict.update({'tags': 'tag1,tag2,tag3'})
        qdict.update({'street': '8th St', 'city': 'Troy', 'state': 'NY'})
        qdict.update({
            'max_lat': '52.5',
            'min_lat': '18.9',
            'max_lon': '108.1',
            'min_lon': '22.1'
        })
        qdict.update({'radius': 5, 'center': '42.7302,73.6788'})
        request.GET = qdict
        # convert the HTTP Request object to a REST framework Request object
        self.request = APIView().initialize_request(request)
        serializer = CountPointsSerializer(context={'request': self.request})
        count = serializer.get_count(polygon)
        self.assertEqual(count['test1'], 23)
        self.assertEqual(count['test2'], 2.34)
        self.assertEqual(count['en2'], 2.0)
Ejemplo n.º 9
0
 def test_returns_none_if_pk_is_missing(self):
     serializer = Serializer()
     view = APIView()
     view.kwargs = {}
     serializer.context['view'] = view
     self.assertIsNone(get_entity_pk(serializer))
Ejemplo n.º 10
0
 def test_get_request_filters(self):
     """ Verify the method removes query parameters with empty values """
     request = APIRequestFactory().get('/?q=')
     request = APIView().initialize_request(request)
     filters = HaystackRequestFilterMixin.get_request_filters(request)
     assert filters == {}
Ejemplo n.º 11
0
def oauth2_user(value):
    return APIView().initialize_request(value).user
Ejemplo n.º 12
0
class BlogViewSet(viewsets.ModelViewSet):
    permission_classes = (IsAuthenticated,)
    apiView = APIView()
    queryset = Blog.objects.all().order_by('title')
    serializer_class = BlogSerializer
Ejemplo n.º 13
0
 def test_get_object_permission(self):
     # TODO: add real tests after logic is determined in permission
     req = self.factory.get('/')
     req.session = self.session
     view = APIView()
     self.assertTrue(self.permission.has_object_permission(req, view))
Ejemplo n.º 14
0
 def test_set_custom_inspector_class_via_settings(self):
     with override_settings(REST_FRAMEWORK={'DEFAULT_SCHEMA_CLASS': 'tests.test_schemas.CustomViewInspector'}):
         view = APIView()
         assert isinstance(view.schema, CustomViewInspector)
Ejemplo n.º 15
0
 def _get_request(self, *args, **kwargs):
     req = self.factory.get(*args, **kwargs)
     return APIView().initialize_request(req)
Ejemplo n.º 16
0
def test_get_resource_name_with_errors(status_code):
    view = APIView()
    context = {"view": view}
    view.response = Response(status=status_code)
    assert "errors" == get_resource_name(context)
Ejemplo n.º 17
0
 def perform_authentication(self, request):
     myview = APIView()
     init_request = myview.initialize_request(request)
     myview.perform_authentication(init_request)
     return init_request.user.username
Ejemplo n.º 18
0
 def test_apiview_schema_descriptor(self):
     view = APIView()
     assert hasattr(view, 'schema')
     assert isinstance(view.schema, AutoSchema)
Ejemplo n.º 19
0
 def get_request(self, endpoint):
     # create an instance of a GET request.
     raw_request = self.request_factory.get(endpoint)
     drf_request = APIView().initialize_request(raw_request)
     return drf_request
Ejemplo n.º 20
0
 def test_returns_pk_value_if_present(self):
     serializer = Serializer()
     view = APIView()
     view.kwargs = {'pk': 'foo'}
     serializer.context['view'] = view
     self.assertEqual('foo', get_entity_pk(serializer))
Ejemplo n.º 21
0
def view():
    return APIView()