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')))
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')
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)
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)
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
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
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)
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(), )
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)
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)
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())
def test_metadata_parses_files(self): args = main.parse_args(['metadata', 'foo', 'bar']) self.assertEqual(['foo', 'bar'], args.modules) self.assertEqual('metadata', args.cmd)