|
11 | 11 | from xml.etree.ElementTree import ParseError |
12 | 12 |
|
13 | 13 | import pytest |
| 14 | +from rdflib import Graph, Literal, XSD |
14 | 15 |
|
15 | 16 | from ted_sws.notice_packager.adapters.template_generator import TemplateGenerator |
16 | 17 | from ted_sws.notice_packager.model.metadata import PackagerMetadata |
@@ -72,3 +73,42 @@ def test_mets2action_mets_xml_generator_with_wrong_action(template_sample_metada |
72 | 73 | # |
73 | 74 | # # Parse to check if xml is well-formed (HTML-safe sequences or elements) |
74 | 75 | # ElementTree.fromstring(mets_dmd_rdf) |
| 76 | + |
| 77 | +def test_mets_dmd_rdf_has_work_id_after_generation(template_sample_metadata: PackagerMetadata, |
| 78 | + work_id_predicate: str): |
| 79 | + """Test that generated METS DMD RDF contains a work_id predicate.""" |
| 80 | + mets_dmd_rdf: str = TemplateGenerator.mets_xml_dmd_rdf_generator(template_sample_metadata) |
| 81 | + mets_graph: Graph = Graph().parse(data=mets_dmd_rdf, format="xml") |
| 82 | + |
| 83 | + work_id_predicate_exists: bool = mets_graph.query( |
| 84 | + f""" ASK WHERE {{ ?subject <{work_id_predicate}> ?object . }} """).askAnswer |
| 85 | + |
| 86 | + assert work_id_predicate_exists |
| 87 | + |
| 88 | + |
| 89 | +def test_mets_dmd_rdf_has_work_id_as_string_after_generation(template_sample_metadata: PackagerMetadata, |
| 90 | + work_id_predicate: str): |
| 91 | + """Test that work_id in METS DMD RDF is of type xsd:string.""" |
| 92 | + mets_dmd_rdf: str = TemplateGenerator.mets_xml_dmd_rdf_generator(template_sample_metadata) |
| 93 | + mets_graph: Graph = Graph().parse(data=mets_dmd_rdf, format="xml") |
| 94 | + string_datatype = XSD.string |
| 95 | + |
| 96 | + work_id_predicate_exists: bool = mets_graph.query( |
| 97 | + f""" ASK WHERE {{ ?subject <{work_id_predicate}> ?object . FILTER(datatype(?object) = <{string_datatype}>) }} """).askAnswer |
| 98 | + |
| 99 | + assert work_id_predicate_exists |
| 100 | + |
| 101 | + |
| 102 | +def test_mets_dmd_rdf_has_correct_work_id_value_after_generation(template_sample_metadata: PackagerMetadata, |
| 103 | + work_id_predicate: str): |
| 104 | + """Test that work_id value in METS DMD RDF matches the metadata work URI.""" |
| 105 | + mets_dmd_rdf: str = TemplateGenerator.mets_xml_dmd_rdf_generator(template_sample_metadata) |
| 106 | + mets_graph: Graph = Graph().parse(data=mets_dmd_rdf, format="xml") |
| 107 | + |
| 108 | + assert template_sample_metadata.work.uri |
| 109 | + work_id_value_literal = Literal(template_sample_metadata.work.uri, datatype=XSD.string) |
| 110 | + |
| 111 | + work_id_is_same: bool = mets_graph.query( |
| 112 | + f""" ASK WHERE {{ ?subject <{work_id_predicate}> {work_id_value_literal.n3()} . }} """).askAnswer |
| 113 | + |
| 114 | + assert work_id_is_same |
0 commit comments