Skip to content

Commit

Permalink
feat(Metadata): check if title property is defined
Browse files Browse the repository at this point in the history
  • Loading branch information
lemoustachiste committed Jul 12, 2022
1 parent 7444fac commit 265df12
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
28 changes: 22 additions & 6 deletions cert_issuer/models/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,24 @@ def validate_metadata_structure(metadata):
Not defining such property will result in errors in the rendering of the metadata property in the UI projects.
""")

if not 'displayOrder' in metadata:
if 'displayOrder' not in metadata:
logging.warning("""
The metadata object provided with the certificate does not include a `displayOrder` property.
Not defining such property will result in errors in the rendering of the metadata property in the UI projects.
""")
return
else:
verify_display_order_properties(metadata['displayOrder'], metadata)
verify_display_order_properties(metadata)


def verify_display_order_properties(display_order, metadata):
def verify_display_order_properties(metadata):
display_order = metadata['displayOrder']
checked_groups = []
for item in display_order:
path = item.split('.')
group = path[0]
if not group in metadata:
if not group in checked_groups:
if group not in metadata:
if group not in checked_groups:
# \033[1m%s\033[0m: display property name in bold
logging.warning(
"`metadata.displayOrder` property references a group named: \033[1m%s\033[0m which does not exist in metadata object.",
Expand All @@ -44,11 +45,26 @@ def verify_display_order_properties(display_order, metadata):
checked_groups.append(group)
else:
property = path[1]
if not property in metadata[group]:
if property not in metadata[group]:
logging.warning(
"`metadata.displayOrder` property references a property named: \033[1m%s\033[0m which does not exist in group: \033[1m%s\033[0m.",
property,
group
)
else:
verify_title_is_set(property, group, metadata)

pass


def verify_title_is_set(property, group, metadata):
if 'schema' not in metadata:
return
schema = metadata['schema']

if 'title' not in schema['properties'][group]['properties'][property]:
logging.warning(
"""No title has been defined for property: \x1b[1m{0}\x1b[0m in group: \x1b[1m{1}\x1b[0m.
Title should be defined under path `schema.properties.{1}.properties.{0}.title`""".format(property, group)
)
pass
20 changes: 20 additions & 0 deletions tests/models/test_metadata_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,23 @@ def test_json_schema_validation_display_order(self):
)
)
logging.warning.unspy()

def test_json_schema_validation_property_title(self):
spy = SpyAgency()
spy.spy_on(logging.warning)
metadata_string = "{\"schema\":{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"displayOrder\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"certificate\":{\"order\":[],\"type\":\"object\",\"properties\":{\"dean\":{\"type\":\"string\"},\"issuingInstitution\":{\"title\":\"Issuing Institution\",\"type\":\"string\",\"default\":\"Learning Machine Technologies, Inc.\"}}},\"recipient\":{}}},\"certificate\":{\"issuingInstitution\":\"Learning Machine Technologies, Inc.\",\"dean\":\"John Rambo\"},\"recipient\":{},\"displayOrder\":[\"certificate.issuingInstitution\", \"certificate.dean\"]}"
try:
validate_metadata_structure(json.loads(metadata_string))
except Exception as e:
print(e)
logging.warning.unspy()
assert False
return

print(logging.warning.calls[0].args)
self.assertTrue(
logging.warning.calls[0].called_with(
"""No title has been defined for property: \x1b[1mdean\x1b[0m in group: \x1b[1mcertificate\x1b[0m.\n Title should be defined under path `schema.properties.certificate.properties.dean.title`"""
)
)
logging.warning.unspy()

0 comments on commit 265df12

Please sign in to comment.