Skip to content

Commit ef2fdbc

Browse files
committed
feat(fao-open-knowledge): add unit tests for FAO Open Knowledge models and metadata validation
1 parent 85acbe9 commit ef2fdbc

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed

tests/source_models/__init__.py

Whitespace-only changes.
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import json
2+
import unittest
3+
4+
from welearn_datastack.data.source_models.fao_open_knowledge import Item, Bundle
5+
6+
7+
class TestFAOOpenKnowledgeCollector(unittest.TestCase):
8+
def setUp(self):
9+
self.fao_item_json = """{
10+
"id": "fbb8e632-fbcb-4e0f-8d5d-149954a0cda8",
11+
"uuid": "fbb8e632-fbcb-4e0f-8d5d-149954a0cda8",
12+
"name": "Resilient and inclusive rural transformation",
13+
"handle": "20.500.14283/cd8162en",
14+
"metadata": {
15+
"dc.contributor.author": [
16+
{
17+
"value": "Davis, B.; Bhalla, G.;",
18+
"language": "",
19+
"authority": null,
20+
"confidence": -1,
21+
"place": 0
22+
}
23+
]
24+
},
25+
"inArchive": true,
26+
"discoverable": true,
27+
"withdrawn": false,
28+
"lastModified": "2026-02-01T17:19:29.441+00:00",
29+
"entityType": null,
30+
"type": "item",
31+
"_links": {
32+
"bundles": {
33+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/bundles"
34+
},
35+
"mappedCollections": {
36+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/mappedCollections"
37+
},
38+
"owningCollection": {
39+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/owningCollection"
40+
},
41+
"relationships": {
42+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/relationships"
43+
},
44+
"version": {
45+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/version"
46+
},
47+
"templateItemOf": {
48+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/templateItemOf"
49+
},
50+
"thumbnail": {
51+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/thumbnail"
52+
},
53+
"relateditemlistconfigs": {
54+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8/relateditemlistconfigs"
55+
},
56+
"self": {
57+
"href": "https://openknowledge.fao.org/server/api/core/items/fbb8e632-fbcb-4e0f-8d5d-149954a0cda8"
58+
}
59+
}
60+
}"""
61+
self.item_as_dict = json.loads(self.fao_item_json)
62+
63+
self.fao_bundle_json = """
64+
{
65+
"uuid": "f1860866-a97a-432a-8dbe-d3d62f58ee85",
66+
"name": "ORIGINAL",
67+
"handle": null,
68+
"metadata": {
69+
"dc.title": [
70+
{
71+
"value": "ORIGINAL",
72+
"language": null,
73+
"authority": null,
74+
"confidence": -1,
75+
"place": 0
76+
}
77+
]
78+
},
79+
"type": "bundle",
80+
"_links": {
81+
"item": {
82+
"href": "https://openknowledge.fao.org/server/api/core/bundles/f1860866-a97a-432a-8dbe-d3d62f58ee85/item"
83+
},
84+
"bitstreams": {
85+
"href": "https://openknowledge.fao.org/server/api/core/bundles/f1860866-a97a-432a-8dbe-d3d62f58ee85/bitstreams"
86+
},
87+
"primaryBitstream": {
88+
"href": "https://openknowledge.fao.org/server/api/core/bundles/f1860866-a97a-432a-8dbe-d3d62f58ee85/primaryBitstream"
89+
},
90+
"self": {
91+
"href": "https://openknowledge.fao.org/server/api/core/bundles/f1860866-a97a-432a-8dbe-d3d62f58ee85"
92+
}
93+
}
94+
}"""
95+
96+
self.bundle_as_dict = json.loads(self.fao_bundle_json)
97+
98+
self.fao_metadata_entry = """{
99+
"dc.contributor.author": [
100+
{
101+
"value": "Davis, B.; Bhalla, G.;",
102+
"language": "",
103+
"authority": null,
104+
"confidence": -1,
105+
"place": 0
106+
}
107+
]
108+
}"""
109+
110+
self.metadata_entry_as_dict = json.loads(self.fao_metadata_entry)
111+
112+
def test_item_model(self):
113+
item = Item.model_validate(self.item_as_dict)
114+
self.assertEqual(item.id, "fbb8e632-fbcb-4e0f-8d5d-149954a0cda8")
115+
self.assertEqual(item.name, "Resilient and inclusive rural transformation")
116+
self.assertIn("dc.contributor.author", item.metadata)
117+
self.assertEqual(len(item.metadata["dc.contributor.author"]), 1)
118+
self.assertEqual(
119+
item.metadata["dc.contributor.author"][0]["value"], "Davis, B.; Bhalla, G.;"
120+
)
121+
122+
def test_bundle_model(self):
123+
bundle = Bundle.model_validate(self.bundle_as_dict)
124+
self.assertEqual(bundle.uuid, "f1860866-a97a-432a-8dbe-d3d62f58ee85")
125+
self.assertEqual(bundle.name, "ORIGINAL")
126+
self.assertIn("dc.title", bundle.metadata)
127+
self.assertEqual(len(bundle.metadata["dc.title"]), 1)
128+
self.assertEqual(bundle.metadata["dc.title"][0]["value"], "ORIGINAL")
129+
130+
def test_metadata_entry(self):
131+
metadata_entry = self.metadata_entry_as_dict
132+
self.assertIn("dc.contributor.author", metadata_entry)
133+
self.assertEqual(len(metadata_entry["dc.contributor.author"]), 1)
134+
self.assertEqual(
135+
metadata_entry["dc.contributor.author"][0]["value"],
136+
"Davis, B.; Bhalla, G.;",
137+
)

0 commit comments

Comments
 (0)