|
1 | | -import unittest |
| 1 | +from pathlib import Path |
2 | 2 |
|
| 3 | +import pytest |
| 4 | +from hbreader import FileInfo |
| 5 | +from pydantic import BaseModel |
| 6 | + |
| 7 | +from linkml_runtime.dumpers import yaml_dumper |
3 | 8 | from linkml_runtime.loaders import json_loader, yaml_loader |
4 | 9 | from tests.test_loaders_dumpers.environment import env |
5 | | -from tests.test_loaders_dumpers.loaderdumpertestcase import LoaderDumperTestCase |
6 | 10 | from tests.test_loaders_dumpers.models.books_normalized_pydantic import BookSeries |
7 | 11 | from tests.test_loaders_dumpers.models.kitchen_sink_pydantic import Dataset |
8 | 12 |
|
9 | 13 |
|
10 | | -class PydanticLoadersUnitTest(LoaderDumperTestCase): |
11 | | - env = env |
12 | | - |
13 | | - def test_yaml_loader_single(self): |
14 | | - """Load obo_sample.yaml, emit obo_sample_yaml.yaml and compare to obo_sample_output.yaml""" |
15 | | - self.loader_test("book_series_lotr.yaml", BookSeries, yaml_loader) |
16 | | - |
17 | | - def test_json_loader(self): |
18 | | - """Load obo_sample.json, emit obo_sample_json.yaml and check the results""" |
19 | | - self.loader_test("book_series_lotr.json", BookSeries, json_loader) |
20 | | - |
21 | | - def test_yaml_loader_kitchen_sink(self): |
22 | | - self.loader_test("kitchen_sink_normalized_inst_01.yaml", Dataset, yaml_loader) |
23 | | - |
24 | | - def test_json_loader_kitchen_sink(self): |
25 | | - self.loader_test("kitchen_sink_normalized_inst_01.json", Dataset, json_loader) |
26 | | - |
27 | | - |
28 | | -if __name__ == "__main__": |
29 | | - unittest.main() |
| 14 | +@pytest.mark.parametrize( |
| 15 | + "filename,model,loader", |
| 16 | + [ |
| 17 | + ("book_series_lotr.yaml", BookSeries, yaml_loader), |
| 18 | + ("book_series_lotr.json", BookSeries, json_loader), |
| 19 | + ("kitchen_sink_normalized_inst_01.yaml", Dataset, yaml_loader), |
| 20 | + ("kitchen_sink_normalized_inst_01.json", Dataset, json_loader), |
| 21 | + ], |
| 22 | +) |
| 23 | +def test_loader_basemodel(filename, model, loader): |
| 24 | + name = Path(filename).stem |
| 25 | + type = Path(filename).suffix.lstrip(".") |
| 26 | + expected_yaml_file = env.input_path(f"{name}_{type}.yaml") |
| 27 | + |
| 28 | + metadata = FileInfo() |
| 29 | + |
| 30 | + python_obj: BaseModel = loader.load(filename, model, metadata=metadata, base_dir=env.indir) |
| 31 | + |
| 32 | + # Load expected output |
| 33 | + with open(expected_yaml_file) as expf: |
| 34 | + expected = expf.read() |
| 35 | + |
| 36 | + got = yaml_dumper.dumps(python_obj) |
| 37 | + expected_trimmed = expected.replace("\r\n", "\n").strip() |
| 38 | + got_trimmed = got.replace("\r\n", "\n").strip() |
| 39 | + assert expected_trimmed == got_trimmed |
0 commit comments