Exemplo n.º 1
0
    def test_get_allowed_methods(self):
        """
        Tests a ModelViewSet's allowed methods. If the path includes something like {pk},
        consider it an object view, otherwise, a list view
        """
        from django.contrib.auth.models import User

        class MyViewSet(ModelViewSet):
            serializer_class = CommentSerializer
            model = User

        docgen = DocumentationGenerator()

        # Test a list endpoint
        allowed_methods = docgen.__get_allowed_methods__(
            MyViewSet, '/api/endpoint')
        self.assertEqual(2, len(allowed_methods))
        self.assertIn('POST', allowed_methods)
        self.assertIn('GET', allowed_methods)

        # Test an object endpoint
        allowed_methods = docgen.__get_allowed_methods__(
            MyViewSet, '/api/endpoint/{pk}')
        self.assertEqual(4, len(allowed_methods))
        self.assertIn('POST', allowed_methods)
        self.assertIn('PATCH', allowed_methods)
        self.assertIn('DELETE', allowed_methods)
        self.assertIn('GET', allowed_methods)
Exemplo n.º 2
0
    def get(self, request, *args, **kwargs):
        path = request.path
        path = path[:request.path.find('/api-docs')]
        apis = self.get_apis(path)
        generator = DocumentationGenerator(for_user=request.user)

        info = copy.deepcopy(rfs.SWAGGER_SETTINGS.get('info', {
            'contact': {},
            'description': '',
            'license': {'name': ''},
            'termsOfService': '',
            'title': '',
            'version': '',
        }))

        if 'version' not in info or info['version'] == '':
            matches = version_re.search(path)
            if matches is not None:
                info['version'] = matches.groups()[0]

        return Response({
            'swagger': '2.0',
            'basePath': path,
            'paths': generator.generate(apis),
            'definitions': generator.get_models(apis),
            'info': info,
            'tags': rfs.SWAGGER_SETTINGS.get('tags', [])
        })
Exemplo n.º 3
0
    def test_build_body_parameters(self):
        class SerializedAPI(ListCreateAPIView):
            serializer_class = CommentSerializer

        docgen = DocumentationGenerator()
        params = docgen.__build_body_parameters__(SerializedAPI)

        self.assertEqual('CommentSerializer', params['name'])
Exemplo n.º 4
0
    def test_build_form_parameters(self):
        class SerializedAPI(ListCreateAPIView):
            serializer_class = CommentSerializer

        docgen = DocumentationGenerator()
        params = docgen.__build_form_parameters__(SerializedAPI, 'POST')

        self.assertEqual(len(CommentSerializer().get_fields()), len(params))
Exemplo n.º 5
0
    def get(self, request, path):
        apis = self.get_api_for_resource(path)
        generator = DocumentationGenerator()

        return Response({
            'apis': generator.generate(apis),
            'models': generator.get_models(apis),
            'basePath': self.api_full_uri.rstrip('/'),
        })
Exemplo n.º 6
0
    def test_get_method_generic_api_view(self):
        class MyListView(ListCreateAPIView):
            """
            My comment
            """
            pass

        generator = DocumentationGenerator()
        method_docs = generator.__get_method_docs__(MyListView(), 'POST')

        self.assertEqual("My comment", method_docs)
Exemplo n.º 7
0
 def get(self, request, path, *args, **kwargs):
     apis = self.get_apis_for_resource(path)
     generator = DocumentationGenerator(for_user=request.user)
     return Response({
         'apiVersion': rfs.SWAGGER_SETTINGS.get('api_version', ''),
         'swaggerVersion': '1.2',
         'basePath': self.api_full_uri.rstrip('/'),
         'resourcePath': '/' + path,
         'apis': generator.generate(apis),
         'models': generator.get_models(apis),
     })
Exemplo n.º 8
0
    def get(self, request, path):
        apis = self.get_api_for_resource(path)
        generator = DocumentationGenerator()

        return Response({
            'apiVersion': SWAGGER_SETTINGS.get('api_version', ''),
            'swaggerVersion': '1.2',
            'basePath': get_full_base_path(request),
            'resourcePath': path,
            'apis': generator.generate(apis),
            'models': generator.get_models(apis),
        })
Exemplo n.º 9
0
    def get(self, request, path):
        apis = self.get_api_for_resource(path)
        generator = DocumentationGenerator()

        return Response({
            'apiVersion': SWAGGER_SETTINGS.get('api_version', ''),
            'swaggerVersion': '1.2',
            "resourcePath": "/{}".format(path),
            'apis': generator.generate(apis),
            'models': generator.get_models(apis),
            'basePath': self.api_full_uri.rstrip('/'),
        })
Exemplo n.º 10
0
    def test_get_serializer_set(self):
        class SerializedAPI(ListCreateAPIView):
            serializer_class = CommentSerializer

        urlparser = UrlParser()
        url_patterns = patterns('', url(r'my-api/', SerializedAPI.as_view()))
        apis = urlparser.get_apis(url_patterns)

        docgen = DocumentationGenerator()
        serializers = docgen.__get_serializer_set__(apis)

        self.assertIn(CommentSerializer, serializers)
Exemplo n.º 11
0
    def test_get_operations_with_no_methods(self):
        class AnAPIView(APIView):
            pass

        api = {
            'path': 'a-path/',
            'callback': AnAPIView,
            'pattern': patterns('')
        }
        docgen = DocumentationGenerator()
        operations = docgen.__get_operations__(api)

        self.assertEqual([], operations)
Exemplo n.º 12
0
    def test_strip_params_from_docstring(self):
        class AnAPIView(APIView):
            """
            My comments are here

            param -- my param
            """
            pass

        docgen = DocumentationGenerator()
        docstring = docgen.__strip_params_from_docstring__(trim_docstring(AnAPIView.__doc__))

        self.assertEqual("My comments are here<br/><br/>", docstring)
Exemplo n.º 13
0
    def test_get_method_docs(self):
        class TestApiView(APIView):
            def get(self, *args):
                """
                Here are my comments
                """

            pass

        generator = DocumentationGenerator()
        docs_get = generator.__get_method_docs__(TestApiView(), 'GET')

        self.assertEqual("Here are my comments", docs_get)
Exemplo n.º 14
0
    def get_api_declaration(self, path, urlconf):
        api_full_uri = SWAGGER_SETTINGS.get('api_full_uri')

        apis = self.get_api_for_resource(path, urlconf=urlconf)
        generator = DocumentationGenerator()

        return {
            'apiVersion': SWAGGER_SETTINGS.get('api_version', ''),
            'swaggerVersion': '1.2',
            'basePath': api_full_uri.rstrip('/'),
            'resourcePath': '/' + path,
            'apis': generator.generate(apis),
            'models': generator.get_models(apis),
        }
Exemplo n.º 15
0
    def test_get_operations(self):
        class AnAPIView(APIView):
            def post(self, *args, **kwargs):
                pass

        api = {
            'path': 'a-path/',
            'callback': AnAPIView,
            'pattern': patterns('')
        }
        docgen = DocumentationGenerator()
        operations = docgen.__get_operations__(api)

        self.assertEqual('POST', operations[0]['httpMethod'])
Exemplo n.º 16
0
    def test_build_form_parameters_allowable_values(self):

        class MySerializer(serializers.Serializer):
            content = serializers.CharField(max_length=200, min_length=10, default="Vandalay Industries")
            a_read_only_field = serializers.BooleanField(read_only=True)

        class MyAPIView(ListCreateAPIView):
            serializer_class = MySerializer

        docgen = DocumentationGenerator()
        params = docgen.__build_form_parameters__(MyAPIView, 'POST')

        self.assertEqual(1, len(params))  # Read only field is ignored
        param = params[0]

        self.assertEqual('content', param['name'])
        self.assertEqual('form', param['paramType'])
        self.assertEqual(True, param['required'])
        self.assertEqual(200, param['allowableValues']['max'])
        self.assertEqual(10, param['allowableValues']['min'])
        self.assertEqual('Vandalay Industries', param['defaultValue'])
Exemplo n.º 17
0
    def test_strip_params_from_docstring_multiline(self):
        class TestView(APIView):
            """
            Creates a new user.
            Returns: token - auth token

            email -- e-mail address
            password -- password, optional
            city -- city, optional
            street -- street, optional
            number -- house number, optional
            zip_code -- zip code 10 chars, optional
            phone -- phone number in US format (XXX-XXX-XXXX), optional
            """
            pass

        docgen = DocumentationGenerator()
        docstring = docgen.__strip_params_from_docstring__(TestView.__doc__)
        expected = 'Creates a new user.<br/>Returns: token - auth token<br/>'

        self.assertEqual(expected, docstring)
Exemplo n.º 18
0
    def test_get_description(self):
        generator = DocumentationGenerator()
        description = generator.__get_description__(MockApiView())

        self.assertEqual('A Test View', description)
Exemplo n.º 19
0
    def test_get_serializer_fields_api_with_no_serializer(self):
        docgen = DocumentationGenerator()
        fields = docgen.__get_serializer_fields__(None)

        self.assertIsNone(fields)
Exemplo n.º 20
0
    def test_get_serializer_fields(self):
        docgen = DocumentationGenerator()
        fields = docgen.__get_serializer_fields__(CommentSerializer)

        self.assertEqual(3, len(fields))