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)
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', []) })
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'])
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))
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('/'), })
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)
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), })
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), })
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('/'), })
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)
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)
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)
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)
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), }
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'])
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'])
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)
def test_get_description(self): generator = DocumentationGenerator() description = generator.__get_description__(MockApiView()) self.assertEqual('A Test View', description)
def test_get_serializer_fields_api_with_no_serializer(self): docgen = DocumentationGenerator() fields = docgen.__get_serializer_fields__(None) self.assertIsNone(fields)
def test_get_serializer_fields(self): docgen = DocumentationGenerator() fields = docgen.__get_serializer_fields__(CommentSerializer) self.assertEqual(3, len(fields))