Ejemplo n.º 1
0
    def test_render_cmd_with_documentation_builder(self):
        # documentation-builder is a strict snap, can only work out of $HOME
        home = os.environ['HOME']
        markdown_dir = self.useFixture(fixtures.TempDir(rootdir=home))
        html_dir = self.useFixture(fixtures.TempDir(rootdir=home))

        with tempfile.NamedTemporaryFile('w') as metadata:
            metadata.write(json.dumps(self.metadata()))
            metadata.flush()

            args = main.parse_args([
                'render',
                metadata.name,
                '--name=SERVICE',
                '--dir={}'.format(markdown_dir.path),
            ])
            main.render_cmd(args)

        build = [
            'documentation-builder',
            '--base-directory={}'.format(markdown_dir.path),
            '--output-path={}'.format(html_dir.path),
        ]
        try:
            subprocess.check_output(build)
        except subprocess.CalledProcessError as e:
            print(e.output)
            raise

        p = partial(os.path.join, html_dir.path)
        self.assertTrue(os.path.exists(p('en/group.html')))
        self.assertTrue(os.path.exists(p('en/index.html')))
Ejemplo n.º 2
0
    def test_render_cmd_with_templates(self):
        markdown_dir = self.useFixture(fixtures.TempDir())
        with tempfile.NamedTemporaryFile('w') as metadata:
            with tempfile.NamedTemporaryFile('w', dir=os.getcwd()) as template:
                metadata.write(json.dumps(self.metadata()))
                metadata.flush()

                template.write('TEMPLATE')
                template.flush()
                name = os.path.relpath(template.name)

                args = main.parse_args([
                    'render',
                    metadata.name,
                    '--name=SERVICE',
                    '--dir={}'.format(markdown_dir.path),
                    '--page-template=' + name,
                    '--index-template=' + name,
                ])
                main.render_cmd(args)

        p = partial(os.path.join, markdown_dir.path)
        with open(p('en/group.md')) as f:
            self.assertEqual(f.read(), 'TEMPLATE')
        with open(p('en/index.md')) as f:
            self.assertEqual(f.read(), 'TEMPLATE')
Ejemplo n.º 3
0
    def test_render_markdown_deprecated_at(self):
        args = main.parse_args(
            ['render', 'examples/api.json', '--name=SERVICE'])
        m = self.metadata()
        m['group']['apis']['api2']['deprecated_at'] = 2
        iterator = main.render_markdown(m, args)
        output = OrderedDict((str(k), v) for k, v in iterator)

        self.assertEqual(
            set([
                'en/group.md',
                'en/index.md',
                'en/metadata.yaml',
                'metadata.yaml',
            ]),
            set(output),
        )

        md = yaml.safe_load(output['en/metadata.yaml'])
        self.assertEqual(
            {
                'navigation': [
                    {
                        'location': 'index.md',
                        'title': 'Index'
                    },
                    {
                        'location': 'group.md',
                        'title': 'Group'
                    },
                ],
            }, md)
Ejemplo n.º 4
0
    def test_render_markdown_undocumented(self):
        args = main.parse_args(
            ['render', 'examples/api.json', '--name=SERVICE'])
        with contextlib.closing(args.metadata):
            m = self.metadata()
            m['group']['apis']['api2']['undocumented'] = True
            iterator = main.render_markdown(m, args)
            output = OrderedDict((str(k), v) for k, v in iterator)

            self.assertEqual(
                set([
                    'en/group.md',
                    'en/index.md',
                    'en/metadata.yaml',
                    'metadata.yaml',
                ]),
                set(output),
            )

            self.assertNotIn('api2', output['en/group.md'])

            md = yaml.safe_load(output['en/metadata.yaml'])
            self.assertEqual(
                {
                    'navigation': [
                        {
                            'location': 'index.md',
                            'title': 'Index'
                        },
                        {
                            'location': 'group.md',
                            'title': 'Group'
                        },
                    ],
                }, md)
Ejemplo n.º 5
0
    def test_lint_reads_file(self):
        with tempfile.NamedTemporaryFile('w') as api:
            api.write('hi')
            api.flush()
            args = main.parse_args(['lint', api.name, 'foo', 'bar'])

        self.assertEqual('hi', args.metadata.read())
        self.assertEqual(args.modules, ['foo', 'bar'])

        args.metadata.close()  # suppresses ResourceWarning
Ejemplo n.º 6
0
    def test_render_parses_file(self):
        with tempfile.NamedTemporaryFile('w') as api:
            api.write('hi')
            api.flush()
            args = main.parse_args(['render', '--name=name', api.name])

        self.assertTrue('hi', args.metadata.read())
        self.assertEqual('render', args.cmd)

        args.metadata.close()  # suppresses ResourceWarning
Ejemplo n.º 7
0
    def test_basic_api_changes(self):
        self.useFixture(CleanUpModuleImport('examples.api'))

        args = main.parse_args(['lint', 'examples/api.json', 'examples.api'], )

        output = io.StringIO()
        result = main.lint_cmd(args, stream=output)
        self.assertEqual(1, result) == 1
        lines = output.getvalue().splitlines()

        for actual, expected in zip(lines, EXPECTED_LINT_OUTPUT):
            self.assertIn(expected, actual)
Ejemplo n.º 8
0
    def test_version(self):
        self.useFixture(CleanUpModuleImport('examples.api'))

        args = main.parse_args(
            ['api-version', 'examples/api.json', 'examples.api'], )

        output = io.StringIO()
        result = main.version_cmd(args, stream=output)
        self.assertEqual(0, result) == 0
        self.assertEqual(
            'examples/api.json: 2\nexamples.api: 5\n',
            output.getvalue(),
        )
Ejemplo n.º 9
0
    def test_render_markdown_multiple_groups(self):
        args = main.parse_args(
            ['render', 'examples/api.json', '--name=SERVICE'])
        with contextlib.closing(args.metadata):
            metadata = self.metadata()
            metadata['group2'] = {
                'apis': {
                    'api2': metadata['group']['apis'].pop('api2')
                }
            }
            iterator = main.render_markdown(metadata, args)
            output = OrderedDict((str(k), v) for k, v in iterator)

            self.assertEqual(
                set([
                    'en/group.md',
                    'en/group2.md',
                    'en/index.md',
                    'en/metadata.yaml',
                    'metadata.yaml',
                ]),
                set(output),
            )

            top_level_md = yaml.safe_load(output['metadata.yaml'])
            self.assertEqual(
                {'site_title': 'SERVICE Documentation: version 2'},
                top_level_md,
            )

            md = yaml.safe_load(output['en/metadata.yaml'])
            self.assertEqual(
                {
                    'navigation': [
                        {
                            'location': 'index.md',
                            'title': 'Index'
                        },
                        {
                            'location': 'group.md',
                            'title': 'Group'
                        },
                        {
                            'location': 'group2.md',
                            'title': 'Group2'
                        },
                    ],
                }, md)
Ejemplo n.º 10
0
    def test_render_markdown_success(self):
        args = main.parse_args(
            ['render', 'examples/api.json', '--name=SERVICE'])

        iterator = main.render_markdown(self.metadata(), args)
        output = OrderedDict((str(k), v) for k, v in iterator)

        self.assertEqual(
            set([
                'en/group.md',
                'en/index.md',
                'en/metadata.yaml',
                'metadata.yaml',
            ]),
            set(output),
        )

        top_level_md = yaml.safe_load(output['metadata.yaml'])
        self.assertEqual(
            {'site_title': 'SERVICE Documentation: version 2'},
            top_level_md,
        )

        md = yaml.safe_load(output['en/metadata.yaml'])
        self.assertEqual(
            {
                'navigation': [
                    {
                        'location': 'index.md',
                        'title': 'Index'
                    },
                    {
                        'location': 'group.md',
                        'title': 'Group'
                    },
                ],
            }, md)
Ejemplo n.º 11
0
 def test_render_parses_stdin_with_no_metadata(self):
     stdin = io.StringIO('hi')
     args = main.parse_args(['render', '--name=name'], stdin=stdin)
     self.assertEqual('hi', args.metadata.read())
Ejemplo n.º 12
0
 def test_metadata_parses_files(self):
     args = main.parse_args(['metadata', 'foo', 'bar'])
     self.assertEqual(['foo', 'bar'], args.modules)
     self.assertEqual('metadata', args.cmd)