|
9 | 9 | import re |
10 | 10 |
|
11 | 11 | import pytest |
| 12 | +from rdflib import Graph, Literal, XSD |
12 | 13 |
|
13 | 14 | from ted_sws.notice_packager.adapters.template_generator import TemplateGenerator |
| 15 | +from ted_sws.notice_packager.model.metadata import PackagerMetadata |
14 | 16 | from tests import TEST_DATA_PATH |
15 | 17 |
|
16 | 18 |
|
@@ -57,3 +59,43 @@ def test_mets2action_mets_xml_generator_with_wrong_action(template_sample_metada |
57 | 59 | template_sample_metadata.mets.type = "wrong_action" |
58 | 60 | with pytest.raises(ValueError): |
59 | 61 | TemplateGenerator.mets2action_mets_xml_generator(template_sample_metadata) |
| 62 | + |
| 63 | + |
| 64 | +def test_mets_dmd_rdf_has_work_id_after_generation(template_sample_metadata: PackagerMetadata, |
| 65 | + work_id_predicate: str): |
| 66 | + """Test that generated METS DMD RDF contains a work_id predicate.""" |
| 67 | + mets_dmd_rdf: str = TemplateGenerator.mets_xml_dmd_rdf_generator(template_sample_metadata) |
| 68 | + mets_graph: Graph = Graph().parse(data=mets_dmd_rdf, format="xml") |
| 69 | + |
| 70 | + work_id_predicate_exists: bool = mets_graph.query( |
| 71 | + f""" ASK WHERE {{ ?subject <{work_id_predicate}> ?object . }} """).askAnswer |
| 72 | + |
| 73 | + assert work_id_predicate_exists |
| 74 | + |
| 75 | + |
| 76 | +def test_mets_dmd_rdf_has_work_id_as_string_after_generation(template_sample_metadata: PackagerMetadata, |
| 77 | + work_id_predicate: str): |
| 78 | + """Test that work_id in METS DMD RDF is of type xsd:string.""" |
| 79 | + mets_dmd_rdf: str = TemplateGenerator.mets_xml_dmd_rdf_generator(template_sample_metadata) |
| 80 | + mets_graph: Graph = Graph().parse(data=mets_dmd_rdf, format="xml") |
| 81 | + string_datatype = XSD.string |
| 82 | + |
| 83 | + work_id_predicate_exists: bool = mets_graph.query( |
| 84 | + f""" ASK WHERE {{ ?subject <{work_id_predicate}> ?object . FILTER(datatype(?object) = <{string_datatype}>) }} """).askAnswer |
| 85 | + |
| 86 | + assert work_id_predicate_exists |
| 87 | + |
| 88 | + |
| 89 | +def test_mets_dmd_rdf_has_correct_work_id_value_after_generation(template_sample_metadata: PackagerMetadata, |
| 90 | + work_id_predicate: str): |
| 91 | + """Test that work_id value in METS DMD RDF matches the metadata work URI.""" |
| 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 | + |
| 95 | + assert template_sample_metadata.work.uri |
| 96 | + work_id_value_literal = Literal(template_sample_metadata.work.uri, datatype=XSD.string) |
| 97 | + |
| 98 | + work_id_is_same: bool = mets_graph.query( |
| 99 | + f""" ASK WHERE {{ ?subject <{work_id_predicate}> {work_id_value_literal.n3()} . }} """).askAnswer |
| 100 | + |
| 101 | + assert work_id_is_same |
0 commit comments