diff --git a/passerelle/base/templatetags/passerelle.py b/passerelle/base/templatetags/passerelle.py index 71467189..89836ba4 100644 --- a/passerelle/base/templatetags/passerelle.py +++ b/passerelle/base/templatetags/passerelle.py @@ -208,13 +208,13 @@ def render_json_schema(schema): s += format_html('\n

{}

', description) s += ' ' - def render_property_schema(key, sub): + def render_property_schema(key, html, sub): nonlocal s required = key in required_keys sub_description = sub.pop('description', '') sub_title = sub.pop('title', '') - s += format_html('
  • {0}', key) + s += format_html('
  • {0}', html) if required: s += format_html('*', _('required')) if description or sub: @@ -238,7 +238,7 @@ def render_json_schema(schema): keys = sorted(properties, key=lambda key: key.lower()) for key in keys: sub = properties.get(key, {}).copy() - render_property_schema(format_html('{0}', key), sub) + render_property_schema(key, format_html('{0}', key), sub) if one_of and one_of[0].get('required'): s += many_of('oneOf', one_of) @@ -250,7 +250,7 @@ def render_json_schema(schema): pattern_key = format_html('/{0}/', key) else: pattern_key = format_html('any') - render_property_schema(pattern_key, sub) + render_property_schema(key, pattern_key, sub) s += '' if properties or pattern_properties: diff --git a/tests/test_templatetags.py b/tests/test_templatetags.py index d90c7fd8..62181fba 100644 --- a/tests/test_templatetags.py +++ b/tests/test_templatetags.py @@ -18,6 +18,7 @@ import inspect from django.apps import apps from django.utils import translation +from pyquery import PyQuery as pq from passerelle.base.templatetags.passerelle import render_body_schemas, render_json_schema @@ -78,6 +79,13 @@ def test_render_pattern_description(): assert 'abc' not in render_json_schema(schema) and 'efg' in render_json_schema(schema) +def test_render_required_properties(): + schema = {'type': 'object', 'required': ['filename'], 'properties': {'filename': {'type': 'string'}}} + html = render_json_schema(schema) + assert pq(html)('li span.required') + assert pq(html)('li').text() == 'filename* : string' + + def test_render_oneof_property_required(): schema = { 'type': 'object', diff --git a/tox.ini b/tox.ini index dc77d43c..1236646b 100644 --- a/tox.ini +++ b/tox.ini @@ -80,6 +80,7 @@ deps = pylint-django django-webtest<1.9.3 pytest-freezegun + pyquery responses mohawk ldaptools