def test_ignores_undecorated_functions(self):
     observed = _build_doubles.extract_schemas_from_source(
         dedent('''
         def my_view():
             pass
         '''))
     self.assertEqual([], observed)
    def test_can_extract_multiple_names_for_one_view(self):
        # This is helpful when in the process of renaming a view.
        [schema1, schema2] = _build_doubles.extract_schemas_from_source(
            dedent('''

            service = AcceptableService('vendor')

            old_api = service.api('/old', 'old')
            new_api = service.api('/new', 'new')

            @old_api.view(introduced_at='1.0')
            @new_api.view(introduced_at='1.0')
            @validate_body({'type': 'object'})
            @validate_output({'type': 'array'})
            def my_view():
                """Documentation."""
            '''))

        self.assertEqual('old', schema1.view_name)
        self.assertEqual('/old', schema1.url)
        self.assertEqual('1.0', schema1.version)
        self.assertEqual(['GET'], schema1.methods)
        self.assertEqual('Documentation.', schema1.doc)
        self.assertEqual({'type': 'object'}, schema1.input_schema)
        self.assertEqual({'type': 'array'}, schema1.output_schema)
        self.assertEqual('new', schema2.view_name)
        self.assertEqual('/new', schema2.url)
        self.assertEqual('1.0', schema2.version)
        self.assertEqual(['GET'], schema2.methods)
        self.assertEqual('Documentation.', schema2.doc)
        self.assertEqual({'type': 'object'}, schema2.input_schema)
        self.assertEqual({'type': 'array'}, schema2.output_schema)
    def test_can_specify_version_as_arg(self):
        [schema] = _build_doubles.extract_schemas_from_source(
            dedent('''

            service = AcceptableService('vendor')

            root_api = service.api('/foo', 'root')

            @root_api.view('1.5')
            def my_view():
                """Documentation."""
            '''))

        self.assertEqual('1.5', schema.version)
    def test_can_extract_multiple_versioned_schemas(self):
        [schema1, schema2] = _build_doubles.extract_schemas_from_source(
            dedent('''

            service = AcceptableService('vendor')

            root_api = service.api('/foo', 'root')

            @root_api.view(introduced_at='1.1')
            def my_view():
                """Documentation."""


            @root_api.view(introduced_at='1.2')
            def my_view():
                """Documentation."""
            '''))

        self.assertEqual('1.1', schema1.version)
    def test_can_extract_acceptable_view_no_docstring(self):
        [schema] = _build_doubles.extract_schemas_from_source(
            dedent('''

            service = AcceptableService('vendor')

            root_api = service.api('/', 'root')

            @root_api.view(introduced_at='1.0')
            def my_view():
                pass
            '''))

        self.assertEqual('root', schema.view_name)
        self.assertEqual('/', schema.url)
        self.assertEqual('1.0', schema.version)
        self.assertEqual(['GET'], schema.methods)
        self.assertEqual(None, schema.doc)
        self.assertEqual(None, schema.input_schema)
        self.assertEqual(None, schema.output_schema)
    def test_can_extract_version_with_kwarg(self):
        [schema] = _build_doubles.extract_schemas_from_source(
            dedent('''

            service = AcceptableService('vendor')

            root_api = service.api('/foo', 'root')

            @root_api.view(introduced_at='1.1')
            def my_view():
                """Documentation."""
            '''))

        self.assertEqual('root', schema.view_name)
        self.assertEqual('/foo', schema.url)
        self.assertEqual('1.1', schema.version)
        self.assertEqual(['GET'], schema.methods)
        self.assertEqual('Documentation.', schema.doc)
        self.assertEqual(None, schema.input_schema)
        self.assertEqual(None, schema.output_schema)
    def test_can_extract_schema_with_input_schema(self):
        [schema] = _build_doubles.extract_schemas_from_source(
            dedent('''

            service = AcceptableService('vendor')

            root_api = service.api('/', 'root')

            @root_api.view(introduced_at='1.0')
            @validate_body({'type': 'object'})
            def my_view():
                """Documentation."""
            '''))

        self.assertEqual('root', schema.view_name)
        self.assertEqual('/', schema.url)
        self.assertEqual('1.0', schema.version)
        self.assertEqual(['GET'], schema.methods)
        self.assertEqual({'type': 'object'}, schema.input_schema)
        self.assertEqual('Documentation.', schema.doc)
        self.assertEqual(None, schema.output_schema)
 def test_returns_empty_list_on_empty_source(self):
     self.assertEqual([], _build_doubles.extract_schemas_from_source(''))
 def test_handles_other_assignments(self):
     self.assertEqual(
         [], _build_doubles.extract_schemas_from_source('foo = {}'))