Ejemplo n.º 1
0
    def test_changed_introduced_at(self):
        old, _, _ = self.get_metadata(module='old',
                                      code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/', 'api', introduced_at=1)

            @api
            def view():
                "Docs"
        """)

        new, locations, _ = self.get_metadata(module='new',
                                              code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/', 'api', introduced_at=2)

            @api
            def view():
                "Docs"
        """)

        msgs = list(lint.metadata_lint(old, new, locations))
        self.assertEqual(msgs[0].level, lint.ERROR)
        self.assertEqual('introduced_at', msgs[0].name)
        self.assertIn('changed from 1 to 2', msgs[0].msg)

        # new api shouldn't warn about introduced at
        msgs = list(lint.metadata_lint({}, new, locations))
        self.assertEqual(0, len(msgs))
Ejemplo n.º 2
0
    def test_missing_api_documentation(self):
        metadata, locations, path = self.get_metadata("""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/', 'api', introduced_at=1)

            @api
            def view():
                pass
        """)

        msgs = list(lint.metadata_lint(metadata, metadata, locations))
        self.assertEqual(msgs[0].level, lint.WARNING)
        self.assertEqual('doc', msgs[0].name),
        self.assertEqual('api', msgs[0].api_name),
        self.assertEqual(msgs[0].location['filename'], path)
        self.assertEqual(msgs[0].location['lineno'], 6)

        # test with new api
        msgs = list(lint.metadata_lint({}, metadata, locations))
        self.assertEqual(msgs[0].level, lint.ERROR)
        self.assertEqual('doc', msgs[0].name),
        self.assertEqual('api', msgs[0].api_name),
        self.assertEqual(msgs[0].location['filename'], path)
        self.assertEqual(msgs[0].location['lineno'], 6)
Ejemplo n.º 3
0
    def test_url_changed_is_error(self):
        old, _, _ = self.get_metadata(module='old',
                                      code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/', 'api', introduced_at=1)

            @api
            def view():
                "Docs"
        """)

        new, locations, _ = self.get_metadata(module='new',
                                              code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/other', 'api', introduced_at=1)

            @api
            def view():
                "Docs"
        """)

        msgs = list(lint.metadata_lint(old, new, locations))
        self.assertEqual(msgs[0].level, lint.ERROR)
        self.assertEqual('url', msgs[0].name)
        self.assertIn('/other', msgs[0].msg)
Ejemplo n.º 4
0
    def test_schema_removed_is_error(self):
        old, _, _ = self.get_metadata(module='old',
                                      code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/other', 'api', introduced_at=1)
            api.request_schema = {
                'type': 'object',
                'properties': {
                    'context': {'type': 'string', 'description': 'Context'}
                },
                'required': ['context']
            }

            @api
            def view():
                "Docs"
        """)

        new, locations, _ = self.get_metadata(module='new',
                                              code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/other', 'api', introduced_at=1)

            @api
            def view():
                "Docs"
        """)
        self.assertEqual(
            ['Request schema removed'],
            [i.msg for i in lint.metadata_lint(old, new, locations)])
Ejemplo n.º 5
0
    def test_method_added_is_ok(self):
        old, _, _ = self.get_metadata(module='old',
                                      code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/', 'api', introduced_at=1)

            @api
            def view():
                "Docs"
        """)

        new, locations, _ = self.get_metadata(module='new',
                                              code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api(
                '/', 'api', introduced_at=1, methods=['GET', 'POST'])

            @api
            def view():
                "Docs"
        """)

        self.assertEqual([], list(lint.metadata_lint(old, new, locations)))
Ejemplo n.º 6
0
def lint_cmd(cli_args, stream=sys.stdout):
    metadata = load_metadata(cli_args.metadata)
    import_metadata(cli_args.modules)
    current, locations = get_metadata().serialize()

    has_errors = False
    display_level = lint.WARNING
    error_level = lint.DOCUMENTATION

    if cli_args.strict:
        display_level = lint.WARNING
        error_level = lint.WARNING
    elif cli_args.quiet:
        display_level = lint.DOCUMENTATION

    for message in lint.metadata_lint(metadata, current, locations):
        if message.level >= display_level:
            stream.write('{}\n'.format(message))

        if message.level >= error_level:
            has_errors = True

    if cli_args.update:
        if not has_errors or cli_args.force:
            with open(cli_args.metadata.name, 'w') as f:
                json.dump(current, f, indent=2)

    return 1 if has_errors else 0
Ejemplo n.º 7
0
    def test_new_api_introduced_at_enforced(self):
        old, _, _ = self.get_metadata(module='old', code="""
            from acceptable import AcceptableService
            service = AcceptableService('myservice', 'group')
            api1 = service.api('/api1', 'api1', introduced_at=1)
            @api1
            def view():
                "Docs"
        """)

        new, locations, _ = self.get_metadata(module='new', code="""
            from acceptable import AcceptableService
            service = AcceptableService('myservice', 'group')
            api1 = service.api('/api1', 'api1', introduced_at=1)
            @api1
            def view1():
                "Docs"

            api2 = service.api('/api2', 'api2', introduced_at=1)
            @api2
            def view2():
                "Docs"
        """)
        self.assertEqual(
            ['introduced_at should be > 1'],
            [i.msg for i in lint.metadata_lint(old, new, locations)]
        )
Ejemplo n.º 8
0
    def test_changelog_required_for_revision_new_api(self):
        old, _, _ = self.get_metadata(module='old', code="""
        """)

        new, locations, _ = self.get_metadata(module='new',
                                              code="""
            from acceptable import *
            service = AcceptableService('myservice', 'group')

            api = service.api('/other', 'api', introduced_at=1)
            api.request_schema = {
                'type': 'object',
                'properties': {
                    'context': {
                        'type': 'string',
                        'introduced_at': 2,
                        'description': 'Context'
                    }
                },
            }

            @api
            def view():
                "Docs"
        """)
        self.assertEqual(
            ['No changelog entry for revision 2'],
            [i.msg for i in lint.metadata_lint(old, new, locations)])
Ejemplo n.º 9
0
    def test_not_modify(self):
        metadata, locations, path = self.get_metadata("""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/', 'api')

            @api
            def view():
                "Docs"
        """)

        self.assertIn('$version', metadata)
        orig = metadata.copy()
        list(lint.metadata_lint(metadata, metadata, locations))
        self.assertEqual(metadata, orig)
Ejemplo n.º 10
0
    def test_missing_introduced_at(self):
        metadata, locations, path = self.get_metadata("""
            from acceptable import *
            service = AcceptableService('myservice', 'group')
            api = service.api('/', 'api')

            @api
            def view():
                "Docs"
        """)

        msgs = list(lint.metadata_lint({}, metadata, locations))
        self.assertEqual(msgs[0].level, lint.ERROR)
        self.assertEqual('introduced_at', msgs[0].name),
        self.assertEqual('api', msgs[0].api_name),
        self.assertEqual(msgs[0].location['filename'], path)
        self.assertEqual(msgs[0].location['lineno'], 3)