diff --git a/tests/sources/test_transformer.py b/tests/sources/test_transformer.py index d11854b..51c8d3c 100644 --- a/tests/sources/test_transformer.py +++ b/tests/sources/test_transformer.py @@ -46,7 +46,24 @@ def test_create_dates_and_locations_from_publishers_success(): } -def test_create_locations_from_spatial_subjects(): +def test_create_dates_and_locations_from_publishers_when_fields_are_none_success(): + fields = { + "publishers": [ + timdex.Publisher(name="Publisher", date="Date", location="Location") + ], + "dates": None, + "locations": None, + } + assert Transformer.create_dates_and_locations_from_publishers(fields) == { + "publishers": [ + timdex.Publisher(name="Publisher", date="Date", location="Location") + ], + "dates": [timdex.Date(kind="Publication date", value="Date")], + "locations": [timdex.Location(value="Location", kind="Place of Publication")], + } + + +def test_create_locations_from_spatial_subjects_success(): fields = { "subjects": [ timdex.Subject( @@ -70,6 +87,31 @@ def test_create_locations_from_spatial_subjects(): } +def test_create_locations_from_spatial_subjects_when_field_is_none_success(): + fields = { + "subjects": [ + timdex.Subject( + value=["Some city, Some country"], kind="Dublin Core; Spatial" + ), + timdex.Subject(value=["City 1", "City 2"], kind="Dublin Core; Spatial"), + ], + "locations": None, + } + assert Transformer.create_locations_from_spatial_subjects(fields) == { + "subjects": [ + timdex.Subject( + value=["Some city, Some country"], kind="Dublin Core; Spatial" + ), + timdex.Subject(value=["City 1", "City 2"], kind="Dublin Core; Spatial"), + ], + "locations": [ + timdex.Location(value="Some city, Some country", kind="Place Name"), + timdex.Location(value="City 1", kind="Place Name"), + timdex.Location(value="City 2", kind="Place Name"), + ], + } + + def test_xmltransformer_initializes_with_expected_attributes(oai_pmh_records): transformer = XMLTransformer("cool-repo", oai_pmh_records) assert transformer.source == "cool-repo" diff --git a/transmogrifier/sources/transformer.py b/transmogrifier/sources/transformer.py index 2a3207c..ccda60e 100644 --- a/transmogrifier/sources/transformer.py +++ b/transmogrifier/sources/transformer.py @@ -384,13 +384,17 @@ def create_dates_and_locations_from_publishers(fields: dict) -> dict: publisher_date = timdex.Date( kind="Publication date", value=publisher.date ) - if publisher_date not in fields.setdefault("dates", []): + if fields.get("dates") is None: + fields["dates"] = [] + if publisher_date not in fields["dates"]: fields["dates"].append(publisher_date) if publisher.location: publisher_location = timdex.Location( kind="Place of Publication", value=publisher.location ) - if publisher_location not in fields.setdefault("locations", []): + if fields.get("locations") is None: + fields["locations"] = [] + if publisher_location not in fields["locations"]: fields["locations"].append(publisher_location) return fields @@ -414,6 +418,8 @@ def create_locations_from_spatial_subjects(fields: dict) -> dict: for subject in spatial_subjects: for place_name in subject.value: subject_location = timdex.Location(value=place_name, kind="Place Name") - if subject_location not in fields.setdefault("locations", []): + if fields.get("locations") is None: + fields["locations"] = [] + if subject_location not in fields["locations"]: fields["locations"].append(subject_location) return fields