Skip to content

Commit 8bb676e

Browse files
committed
feat: test public methods like graph_from_dataset
1 parent d1e6c81 commit 8bb676e

1 file changed

Lines changed: 60 additions & 72 deletions

File tree

Lines changed: 60 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,103 @@
1+
import pytest
12
import rdflib
23

34
from ckanext.dcat.profiles import SCHEMA
4-
5+
from ckanext.dcat.utils import resource_uri
56
from ckanext.switzerland.dcat.profiles import SwissSchemaOrgProfile
67

78

8-
def _profile():
9+
def _tagged_lang_values(graph, subject, predicate):
10+
"""helper for language-tagged literals on ``predicate``."""
11+
return [
12+
(str(o.language), str(o))
13+
for o in graph.objects(subject, predicate)
14+
if getattr(o, "language", None)
15+
]
16+
17+
18+
@pytest.fixture
19+
def profile():
920
return SwissSchemaOrgProfile(rdflib.Graph())
1021

1122

12-
def test_basic_fields_map_fluent_description():
13-
"""
14-
Make sure SwissSchemaOrgProfile maps multilang descriptions to schema:description.
15-
"""
16-
profile = _profile()
23+
def test_graph_from_dataset_maps_multilang_description_and_title(profile):
1724
dataset_ref = rdflib.URIRef("http://example.org/dataset/1")
18-
1925
dataset_dict = {
2026
"name": "ds",
2127
"title": {"de": "Titel", "fr": "Titre"},
2228
"description": {"de": "DE text", "fr": "FR texte"},
2329
"resources": [],
2430
}
2531

26-
profile._basic_fields_graph(dataset_ref, dataset_dict)
32+
profile.graph_from_dataset(dataset_dict, dataset_ref)
2733

28-
translated_values = [
29-
(str(o.language), str(o))
30-
for o in profile.g.objects(dataset_ref, SCHEMA.description)
31-
if getattr(o, "language", None)
32-
]
33-
assert ("de", "DE text") in translated_values
34-
assert ("fr", "FR texte") in translated_values
34+
assert ("de", "DE text") in _tagged_lang_values(
35+
profile.g, dataset_ref, SCHEMA.description
36+
)
37+
assert ("fr", "FR texte") in _tagged_lang_values(
38+
profile.g, dataset_ref, SCHEMA.description
39+
)
40+
assert ("de", "Titel") in _tagged_lang_values(profile.g, dataset_ref, SCHEMA.name)
41+
assert ("fr", "Titre") in _tagged_lang_values(profile.g, dataset_ref, SCHEMA.name)
3542

3643

37-
def test_basic_fields_map_fluent_title():
38-
profile = _profile()
44+
def test_graph_from_dataset_empty_description_dict_emits_no_tagged_description(
45+
profile,
46+
):
3947
dataset_ref = rdflib.URIRef("http://example.org/dataset/1")
4048
dataset_dict = {
4149
"name": "ds",
42-
"title": {"de": "Titel", "it": "Titolo"},
50+
"description": {},
4351
"resources": [],
4452
}
45-
profile._basic_fields_graph(dataset_ref, dataset_dict)
46-
translated_values = [
47-
(str(o.language), str(o))
48-
for o in profile.g.objects(dataset_ref, SCHEMA.name)
49-
if getattr(o, "language", None)
50-
]
51-
assert ("de", "Titel") in translated_values
52-
assert ("it", "Titolo") in translated_values
5353

54+
profile.graph_from_dataset(dataset_dict, dataset_ref)
5455

55-
def test_empty_description_dict_emits_no_description_literals():
56-
"""Multilingual serialization skips empty dicts (same rules as DCAT profile)."""
57-
profile = _profile()
58-
dataset_ref = rdflib.URIRef("http://example.org/dataset/1")
59-
profile._basic_fields_graph(
60-
dataset_ref,
61-
{
62-
"name": "ds",
63-
"description": {},
64-
"resources": [],
65-
},
66-
)
67-
assert list(profile.g.objects(dataset_ref, SCHEMA.description)) == []
56+
assert _tagged_lang_values(profile.g, dataset_ref, SCHEMA.description) == []
6857

6958

70-
def test_description_empty_string_lang_skipped_whitespace_kept():
59+
def test_graph_from_dataset_description_empty_lang_skipped_whitespace_kept(profile):
7160
"""
7261
Empty value for ``fr`` is skipped. Whitespace-only ``de`` is truthy, so a
7362
language-tagged literal is emitted (``MultiLangProfile`` does not strip).
7463
"""
75-
profile = _profile()
7664
dataset_ref = rdflib.URIRef("http://example.org/dataset/2")
77-
profile._basic_fields_graph(
78-
dataset_ref,
79-
{
80-
"name": "ds",
81-
"description": {"de": " ", "en": "Kept", "fr": ""},
82-
"resources": [],
83-
},
84-
)
85-
translated_values = [
86-
(str(o.language), str(o))
87-
for o in profile.g.objects(dataset_ref, SCHEMA.description)
88-
if getattr(o, "language", None)
89-
]
65+
dataset_dict = {
66+
"name": "ds",
67+
"description": {"de": " ", "en": "Kept", "fr": ""},
68+
"resources": [],
69+
}
70+
71+
profile.graph_from_dataset(dataset_dict, dataset_ref)
72+
73+
translated_values = _tagged_lang_values(profile.g, dataset_ref, SCHEMA.description)
9074
assert set(translated_values) == {("de", " "), ("en", "Kept")}
9175

9276

93-
def test_distribution_basic_fields_multilang_name_and_description():
94-
profile = _profile()
95-
distribution = rdflib.URIRef("http://example.org/dist/1")
77+
def test_graph_from_dataset_maps_multilang_resource_title_and_description(profile):
78+
resource_uri_str = "http://example.org/resource/1"
9679
resource_dict = {
80+
"id": "res-1",
81+
"uri": resource_uri_str,
82+
"url": "http://example.org/data.csv",
9783
"title": {"de": "Ressource", "fr": "Ressource FR"},
9884
"description": {"de": "Beschreibung"},
9985
}
100-
profile._distribution_basic_fields_graph(distribution, resource_dict)
86+
dataset_ref = rdflib.URIRef("http://example.org/dataset/3")
87+
dataset_dict = {
88+
"name": "ds",
89+
"title": {"de": "Dataset"},
90+
"resources": [resource_dict],
91+
}
10192

102-
name_translated_values = [
103-
(str(o.language), str(o))
104-
for o in profile.g.objects(distribution, SCHEMA.name)
105-
if getattr(o, "language", None)
106-
]
107-
assert ("de", "Ressource") in name_translated_values
108-
assert ("fr", "Ressource FR") in name_translated_values
93+
assert resource_uri(resource_dict) == resource_uri_str
94+
distribution = rdflib.URIRef(resource_uri_str)
10995

110-
desc_translated_values = [
111-
(str(o.language), str(o))
112-
for o in profile.g.objects(distribution, SCHEMA.description)
113-
if getattr(o, "language", None)
114-
]
115-
assert desc_translated_values == [("de", "Beschreibung")]
96+
profile.graph_from_dataset(dataset_dict, dataset_ref)
97+
98+
name_values = _tagged_lang_values(profile.g, distribution, SCHEMA.name)
99+
assert ("de", "Ressource") in name_values
100+
assert ("fr", "Ressource FR") in name_values
101+
102+
desc_values = _tagged_lang_values(profile.g, distribution, SCHEMA.description)
103+
assert set(desc_values) == {("de", "Beschreibung")}

0 commit comments

Comments
 (0)