Skip to content

Commit c62747f

Browse files
Merge pull request #441 from vladistan/convert-test-dumpers-to-pytest
Convert test dumpers to pytest
2 parents 79c53de + 25ab0fc commit c62747f

File tree

1 file changed

+132
-115
lines changed

1 file changed

+132
-115
lines changed
Lines changed: 132 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
2-
import unittest
32
from typing import cast
43

4+
import pytest
55
from rdflib import SKOS, Literal, Namespace
66

77
from linkml_runtime.dumpers import json_dumper, rdf_dumper, yaml_dumper
@@ -16,125 +16,142 @@
1616
LD_11_SSL_SVR,
1717
LD_11_SVR,
1818
)
19-
from tests.test_loaders_dumpers.loaderdumpertestcase import LoaderDumperTestCase
19+
from tests.test_loaders_dumpers.environment import env
2020
from tests.test_loaders_dumpers.models.termci_schema import ConceptReference, ConceptSystem, Package
2121

2222
OBO = Namespace("http://purl.obolibrary.org/obo/")
2323
NCIT = Namespace("http://purl.obolibrary.org/obo/NCI_")
2424

2525

26-
class DumpersTestCase(LoaderDumperTestCase):
27-
pass
28-
29-
@classmethod
30-
def setUpClass(cls) -> None:
31-
"""Generate a small sample TermCI instance for testing purposes"""
32-
LoaderDumperTestCase.setUpClass()
33-
e1 = ConceptReference(
34-
OBO.NCI_C147796,
35-
code="C147796",
36-
defined_in=OBO,
37-
designation="TSCYC - Being Frightened of Men",
38-
definition="Trauma Symptom Checklist for Young Children (TSCYC) Please indicate how often"
39-
" the child has done, felt, or experienced each of the following things in "
40-
"the last month: Being frightened of men.",
41-
narrower_than=OBO.NCI_C147557,
42-
reference=OBO.NCI_C147796,
43-
)
44-
e2 = ConceptReference(
45-
OBO.NCI_C147557,
46-
code="C147557",
47-
defined_in=OBO,
48-
designation="TSCYC Questionnaire Question",
49-
definition="A question associated with the TSCYC questionnaire.",
50-
narrower_than=OBO.NCI_C91102,
51-
)
52-
c1 = ConceptSystem(OBO, "OBO", contents=[e1, e2])
53-
cls.test_package = Package([c1])
54-
55-
def test_yaml_dumper(self):
56-
"""Test the yaml emitter"""
57-
# TODO: Once this is entered into the BiolinkML test package, compare this to input/obo_test.yaml
58-
self.dump_test("obo_sample.yaml", lambda out_fname: yaml_dumper.dump(self.test_package, out_fname))
59-
self.dumps_test("obo_sample.yaml", lambda: yaml_dumper.dumps(self.test_package))
60-
61-
def test_json_dumper(self):
62-
"""Test the json emitter"""
63-
# TODO: Same as test_yaml_dumper
64-
self.dump_test("obo_sample.json", lambda out_fname: json_dumper.dump(self.test_package, out_fname))
65-
66-
obo_json_obj = cast(Package, as_json_object(self.test_package))
67-
self.assertEqual(OBO, obo_json_obj.system[0].namespace)
68-
self.assertEqual("C147796", obo_json_obj.system[0].contents[0].code)
69-
70-
self.dumps_test("obo_sample.json", lambda: json_dumper.dumps(self.test_package))
71-
self.dump_test(
72-
"obo_sample_context.json",
73-
lambda out_fname: json_dumper.dump(
74-
self.test_package, out_fname, GITHUB_LD10_CONTEXT + "termci_schema.context.jsonld"
75-
),
76-
)
77-
self.dumps_test(
78-
"obo_sample_context.json",
79-
lambda: json_dumper.dumps(self.test_package, GITHUB_LD11_CONTEXT + "termci_schema_inlined.context.jsonld"),
80-
)
81-
82-
@unittest.skipIf(True, "This needs an enhanced (https://github.com/hsolbrig/pyld) version of pyld")
83-
def test_rdf_dumper(self):
84-
"""Test the rdf dumper"""
85-
contexts = os.path.join(LD_11_DIR, "termci_schema_inlined.context.jsonld")
86-
self.dump_test(
87-
"obo_sample.ttl",
88-
lambda out_file: rdf_dumper.dump(self.test_package, out_file, contexts),
89-
comparator=ClickTestCase.rdf_comparator,
26+
@pytest.fixture(scope="module")
27+
def test_package():
28+
"""Generate a small sample TermCI instance for testing purposes"""
29+
e1 = ConceptReference(
30+
OBO.NCI_C147796,
31+
code="C147796",
32+
defined_in=OBO,
33+
designation="TSCYC - Being Frightened of Men",
34+
definition="Trauma Symptom Checklist for Young Children (TSCYC) Please indicate how often"
35+
" the child has done, felt, or experienced each of the following things in "
36+
"the last month: Being frightened of men.",
37+
narrower_than=OBO.NCI_C147557,
38+
reference=OBO.NCI_C147796,
39+
)
40+
e2 = ConceptReference(
41+
OBO.NCI_C147557,
42+
code="C147557",
43+
defined_in=OBO,
44+
designation="TSCYC Questionnaire Question",
45+
definition="A question associated with the TSCYC questionnaire.",
46+
narrower_than=OBO.NCI_C91102,
47+
)
48+
c1 = ConceptSystem(OBO, "OBO", contents=[e1, e2])
49+
return Package([c1])
50+
51+
52+
def dump_test(filename: str, dumper, comparator=None) -> bool:
53+
"""
54+
Invoke the dumper passing it the output file name and then compare the result to an expected output
55+
"""
56+
actual_file = env.actual_path(filename)
57+
expected_file = env.expected_path("dump", filename)
58+
59+
dumper(actual_file)
60+
61+
with open(actual_file) as actual_f:
62+
actual = actual_f.read()
63+
return env.eval_single_file(expected_file, actual, comparator=comparator)
64+
65+
66+
def dumps_test(filename: str, dumper, comparator=None) -> bool:
67+
"""
68+
Invoke the string dumper and evaluate the results
69+
"""
70+
actual = dumper()
71+
expected_file = env.expected_path("dumps", filename)
72+
return env.eval_single_file(expected_file, actual, comparator=comparator)
73+
74+
75+
def test_yaml_dumper(test_package):
76+
"""Test the yaml emitter"""
77+
# TODO: Once this is entered into the BiolinkML test package, compare this to input/obo_test.yaml
78+
dump_test("obo_sample.yaml", lambda out_fname: yaml_dumper.dump(test_package, out_fname))
79+
dumps_test("obo_sample.yaml", lambda: yaml_dumper.dumps(test_package))
80+
81+
82+
def test_json_dumper(test_package):
83+
"""Test the json emitter"""
84+
# TODO: Same as test_yaml_dumper
85+
dump_test("obo_sample.json", lambda out_fname: json_dumper.dump(test_package, out_fname))
86+
87+
obo_json_obj = cast(Package, as_json_object(test_package))
88+
assert obo_json_obj.system[0].namespace == OBO
89+
assert obo_json_obj.system[0].contents[0].code == "C147796"
90+
91+
dumps_test("obo_sample.json", lambda: json_dumper.dumps(test_package))
92+
dump_test(
93+
"obo_sample_context.json",
94+
lambda out_fname: json_dumper.dump(
95+
test_package, out_fname, GITHUB_LD10_CONTEXT + "termci_schema.context.jsonld"
96+
),
97+
)
98+
dumps_test(
99+
"obo_sample_context.json",
100+
lambda: json_dumper.dumps(test_package, GITHUB_LD11_CONTEXT + "termci_schema_inlined.context.jsonld"),
101+
)
102+
103+
104+
@pytest.mark.skip(reason="This needs an enhanced (https://github.com/hsolbrig/pyld) version of pyld")
105+
def test_rdf_dumper(test_package):
106+
"""Test the rdf dumper"""
107+
contexts = os.path.join(LD_11_DIR, "termci_schema_inlined.context.jsonld")
108+
dump_test(
109+
"obo_sample.ttl",
110+
lambda out_file: rdf_dumper.dump(test_package, out_file, contexts),
111+
comparator=ClickTestCase.rdf_comparator,
112+
)
113+
114+
g = rdf_dumper.as_rdf_graph(test_package, contexts)
115+
assert OBO[""] in g.subjects()
116+
assert NCIT.C147796 in g.subjects()
117+
assert Literal("C147796") in g.objects(NCIT.C147796, SKOS.notation)
118+
119+
dumps_test(
120+
"obo_sample.ttl",
121+
lambda: rdf_dumper.dumps(test_package, contexts),
122+
comparator=ClickTestCase.rdf_comparator,
123+
)
124+
125+
# Build a vanilla jsonld image for subsequent testing
126+
fname = "obo_sample.jsonld"
127+
dump_test(
128+
fname,
129+
lambda out_file: rdf_dumper.dump(test_package, out_file, contexts, fmt="json-ld"),
130+
comparator=lambda e, a: ClickTestCase.rdf_comparator(e, a, fmt="json-ld"),
131+
)
132+
with open(env.expected_path("dump", fname)) as f:
133+
txt = f.read()
134+
with open(env.input_path("obo_sample.jsonld"), "w") as f:
135+
f.write(txt)
136+
137+
138+
@pytest.mark.skip(reason="Waiting until PyLD learns to handle relative context URI's")
139+
def test_nested_contexts(test_package):
140+
"""Test JSON-LD with fully nested contexts"""
141+
from tests.test_loaders_dumpers.loaderdumpertestcase import LoaderDumperTestCase
142+
143+
context_servers = []
144+
for possible_server in [LD_11_SVR, LD_11_SSL_SVR]:
145+
svr = LoaderDumperTestCase.check_context_servers([possible_server])
146+
if svr:
147+
context_servers.append(svr)
148+
149+
if not context_servers:
150+
pytest.skip(
151+
f"*****> Nested contexts test skipped - no servers found on sockets {HTTP_TEST_PORT} or {HTTPS_TEST_PORT}"
90152
)
91153

92-
g = rdf_dumper.as_rdf_graph(self.test_package, contexts)
93-
self.assertIn(OBO[""], g.subjects())
94-
self.assertIn(NCIT.C147796, g.subjects())
95-
self.assertIn(Literal("C147796"), g.objects(NCIT.C147796, SKOS.notation))
96-
97-
self.dumps_test(
98-
"obo_sample.ttl",
99-
lambda: rdf_dumper.dumps(self.test_package, contexts),
100-
comparator=ClickTestCase.rdf_comparator,
101-
)
102-
103-
# Build a vanilla jsonld image for subsequent testing
104-
fname = "obo_sample.jsonld"
105-
self.dump_test(
106-
fname,
107-
lambda out_file: rdf_dumper.dump(self.test_package, out_file, contexts, fmt="json-ld"),
108-
comparator=lambda e, a: ClickTestCase.rdf_comparator(e, a, fmt="json-ld"),
109-
)
110-
with open(self.env.expected_path("dump", fname)) as f:
111-
txt = f.read()
112-
with open(self.env.input_path("obo_sample.jsonld"), "w") as f:
113-
f.write(txt)
114-
115-
@unittest.skip("Waiting until PyLD learns to handle relative context URI's")
116-
def test_nested_contexts(self):
117-
"""Test JSON-LD with fully nested contexts"""
118-
119-
context_servers = []
120-
for possible_server in [LD_11_SVR, LD_11_SSL_SVR]:
121-
svr = self.check_context_servers([possible_server])
122-
if svr:
123-
context_servers.append(svr)
124-
125-
if not context_servers:
126-
raise unittest.SkipTest(
127-
f"*****> Nested contexts test skipped - no servers found on sockets "
128-
f"{HTTP_TEST_PORT} or {HTTPS_TEST_PORT}"
129-
)
130-
131-
for context_base in context_servers:
132-
nested_context = context_base + "Package.context.jsonld"
133-
self.dump_test(
134-
"obo_sample_nested.ttl", lambda out_file: rdf_dumper.dump(self.test_package, out_file, nested_context)
135-
)
136-
self.dumps_test("obo_sample_nested.ttl", lambda: rdf_dumper.dumps(self.test_package, nested_context))
137-
138-
139-
if __name__ == "__main__":
140-
unittest.main()
154+
for context_base in context_servers:
155+
nested_context = context_base + "Package.context.jsonld"
156+
dump_test("obo_sample_nested.ttl", lambda out_file: rdf_dumper.dump(test_package, out_file, nested_context))
157+
dumps_test("obo_sample_nested.ttl", lambda: rdf_dumper.dumps(test_package, nested_context))

0 commit comments

Comments
 (0)