Changeset View
Changeset View
Standalone View
Standalone View
swh/model/tests/test_model.py
Show First 20 Lines • Show All 790 Lines • ▼ Show 20 Lines | |||||
) | ) | ||||
def test_metadata_valid(): | def test_metadata_valid(): | ||||
"""Checks valid RawExtrinsicMetadata objects don't raise an error.""" | """Checks valid RawExtrinsicMetadata objects don't raise an error.""" | ||||
# Simplest case | # Simplest case | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, id=_origin_url, **_common_metadata_fields | type=MetadataTargetType.ORIGIN, target=_origin_url, **_common_metadata_fields | ||||
) | ) | ||||
# Object with an SWHID | # Object with an SWHID | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, id=_content_swhid, **_common_metadata_fields | type=MetadataTargetType.CONTENT, | ||||
target=_content_swhid, | |||||
**_common_metadata_fields, | |||||
) | ) | ||||
def test_metadata_to_dict(): | @pytest.mark.filterwarnings("ignore: RawExtrinsicMetadata `id`") | ||||
@pytest.mark.parametrize("argument_name", ["id", "target"]) | |||||
def test_metadata_to_dict(argument_name): | |||||
"""Checks valid RawExtrinsicMetadata objects don't raise an error.""" | """Checks valid RawExtrinsicMetadata objects don't raise an error.""" | ||||
common_fields = { | common_fields = { | ||||
"authority": {"type": "forge", "url": "https://forge.softwareheritage.org",}, | "authority": {"type": "forge", "url": "https://forge.softwareheritage.org"}, | ||||
"fetcher": {"name": "test-fetcher", "version": "0.0.1",}, | "fetcher": {"name": "test-fetcher", "version": "0.0.1",}, | ||||
"discovery_date": _common_metadata_fields["discovery_date"], | "discovery_date": _common_metadata_fields["discovery_date"], | ||||
"format": "json", | "format": "json", | ||||
"metadata": b'{"foo": "bar"}', | "metadata": b'{"foo": "bar"}', | ||||
} | } | ||||
m = RawExtrinsicMetadata( | m = RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, id=_origin_url, **_common_metadata_fields | type=MetadataTargetType.ORIGIN, | ||||
**{argument_name: _origin_url, **_common_metadata_fields}, | |||||
) | ) | ||||
assert m.to_dict() == { | assert m.to_dict() == { | ||||
"type": "origin", | "type": "origin", | ||||
"target": _origin_url, | |||||
"id": _origin_url, | "id": _origin_url, | ||||
**common_fields, | **common_fields, | ||||
} | } | ||||
assert RawExtrinsicMetadata.from_dict(m.to_dict()) == m | assert RawExtrinsicMetadata.from_dict(m.to_dict()) == m | ||||
m = RawExtrinsicMetadata( | m = RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, id=_content_swhid, **_common_metadata_fields | type=MetadataTargetType.CONTENT, | ||||
**{argument_name: _content_swhid, **_common_metadata_fields}, | |||||
) | ) | ||||
assert m.to_dict() == { | assert m.to_dict() == { | ||||
"type": "content", | "type": "content", | ||||
"target": "swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | |||||
"id": "swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | "id": "swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
**common_fields, | **common_fields, | ||||
} | } | ||||
assert RawExtrinsicMetadata.from_dict(m.to_dict()) == m | assert RawExtrinsicMetadata.from_dict(m.to_dict()) == m | ||||
def test_metadata_invalid_id(): | def test_metadata_invalid_target(): | ||||
"""Checks various invalid values for the 'id' field.""" | """Checks various invalid values for the 'target' field.""" | ||||
# SWHID for an origin | # SWHID for an origin | ||||
with pytest.raises(ValueError, match="expected an URL"): | with pytest.raises(ValueError, match="expected an URL"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, id=_content_swhid, **_common_metadata_fields | type=MetadataTargetType.ORIGIN, | ||||
target=_content_swhid, | |||||
**_common_metadata_fields, | |||||
) | ) | ||||
# SWHID for an origin (even when passed as string) | # SWHID for an origin (even when passed as string) | ||||
with pytest.raises(ValueError, match="expected an URL"): | with pytest.raises(ValueError, match="expected an URL"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | target="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# URL for a non-origin | # URL for a non-origin | ||||
with pytest.raises(ValueError, match="Expected SWHID, got a string"): | with pytest.raises(ValueError, match="Expected SWHID, got a string"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, id=_origin_url, **_common_metadata_fields | type=MetadataTargetType.CONTENT, | ||||
target=_origin_url, | |||||
**_common_metadata_fields, | |||||
) | ) | ||||
# SWHID passed as string instead of SWHID | # SWHID passed as string instead of SWHID | ||||
with pytest.raises(ValueError, match="Expected SWHID, got a string"): | with pytest.raises(ValueError, match="Expected SWHID, got a string"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | target="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Object type does not match the SWHID | # Object type does not match the SWHID | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Expected SWHID type 'revision', got 'content'" | ValueError, match="Expected SWHID type 'revision', got 'content'" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.REVISION, | type=MetadataTargetType.REVISION, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Non-core SWHID | # Non-core SWHID | ||||
with pytest.raises(ValueError, match="Expected core SWHID"): | with pytest.raises(ValueError, match="Expected core SWHID"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=SWHID( | target=SWHID( | ||||
object_type="content", | object_type="content", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata={"foo": "bar"}, | metadata={"foo": "bar"}, | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_naive_datetime(): | def test_metadata_naive_datetime(): | ||||
with pytest.raises(ValueError, match="must be a timezone-aware datetime"): | with pytest.raises(ValueError, match="must be a timezone-aware datetime"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
**{**_common_metadata_fields, "discovery_date": datetime.datetime.now()}, | **{**_common_metadata_fields, "discovery_date": datetime.datetime.now()}, | ||||
) | ) | ||||
def test_metadata_validate_context_origin(): | def test_metadata_validate_context_origin(): | ||||
"""Checks validation of RawExtrinsicMetadata.origin.""" | """Checks validation of RawExtrinsicMetadata.origin.""" | ||||
# Origins can't have an 'origin' context | # Origins can't have an 'origin' context | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Unexpected 'origin' context for origin object" | ValueError, match="Unexpected 'origin' context for origin object" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
origin=_origin_url, | origin=_origin_url, | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# but all other types can | # but all other types can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
origin=_origin_url, | origin=_origin_url, | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# SWHIDs aren't valid origin URLs | # SWHIDs aren't valid origin URLs | ||||
with pytest.raises(ValueError, match="SWHID used as context origin URL"): | with pytest.raises(ValueError, match="SWHID used as context origin URL"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
origin="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | origin="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_validate_context_visit(): | def test_metadata_validate_context_visit(): | ||||
"""Checks validation of RawExtrinsicMetadata.visit.""" | """Checks validation of RawExtrinsicMetadata.visit.""" | ||||
# Origins can't have a 'visit' context | # Origins can't have a 'visit' context | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Unexpected 'visit' context for origin object" | ValueError, match="Unexpected 'visit' context for origin object" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
visit=42, | visit=42, | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# but all other types can | # but all other types can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
origin=_origin_url, | origin=_origin_url, | ||||
visit=42, | visit=42, | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Missing 'origin' | # Missing 'origin' | ||||
with pytest.raises(ValueError, match="'origin' context must be set if 'visit' is"): | with pytest.raises(ValueError, match="'origin' context must be set if 'visit' is"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
visit=42, | visit=42, | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# visit id must be positive | # visit id must be positive | ||||
with pytest.raises(ValueError, match="Nonpositive visit id"): | with pytest.raises(ValueError, match="Nonpositive visit id"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
origin=_origin_url, | origin=_origin_url, | ||||
visit=-42, | visit=-42, | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_validate_context_snapshot(): | def test_metadata_validate_context_snapshot(): | ||||
"""Checks validation of RawExtrinsicMetadata.snapshot.""" | """Checks validation of RawExtrinsicMetadata.snapshot.""" | ||||
# Origins can't have a 'snapshot' context | # Origins can't have a 'snapshot' context | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Unexpected 'snapshot' context for origin object" | ValueError, match="Unexpected 'snapshot' context for origin object" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
snapshot=SWHID( | snapshot=SWHID( | ||||
object_type="snapshot", | object_type="snapshot", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# but content can | # but content can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
snapshot=SWHID( | snapshot=SWHID( | ||||
object_type="snapshot", object_id="94a9ed024d3859793618152ea559a168bbcbb5e2" | object_type="snapshot", object_id="94a9ed024d3859793618152ea559a168bbcbb5e2" | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Non-core SWHID | # Non-core SWHID | ||||
with pytest.raises(ValueError, match="Expected core SWHID"): | with pytest.raises(ValueError, match="Expected core SWHID"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
snapshot=SWHID( | snapshot=SWHID( | ||||
object_type="snapshot", | object_type="snapshot", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata={"foo": "bar"}, | metadata={"foo": "bar"}, | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# SWHID type doesn't match the expected type of this context key | # SWHID type doesn't match the expected type of this context key | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Expected SWHID type 'snapshot', got 'content'" | ValueError, match="Expected SWHID type 'snapshot', got 'content'" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
snapshot=SWHID( | snapshot=SWHID( | ||||
object_type="content", | object_type="content", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_validate_context_release(): | def test_metadata_validate_context_release(): | ||||
"""Checks validation of RawExtrinsicMetadata.release.""" | """Checks validation of RawExtrinsicMetadata.release.""" | ||||
# Origins can't have a 'release' context | # Origins can't have a 'release' context | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Unexpected 'release' context for origin object" | ValueError, match="Unexpected 'release' context for origin object" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
release=SWHID( | release=SWHID( | ||||
object_type="release", | object_type="release", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# but content can | # but content can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
release=SWHID( | release=SWHID( | ||||
object_type="release", object_id="94a9ed024d3859793618152ea559a168bbcbb5e2" | object_type="release", object_id="94a9ed024d3859793618152ea559a168bbcbb5e2" | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Non-core SWHID | # Non-core SWHID | ||||
with pytest.raises(ValueError, match="Expected core SWHID"): | with pytest.raises(ValueError, match="Expected core SWHID"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
release=SWHID( | release=SWHID( | ||||
object_type="release", | object_type="release", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata={"foo": "bar"}, | metadata={"foo": "bar"}, | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# SWHID type doesn't match the expected type of this context key | # SWHID type doesn't match the expected type of this context key | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Expected SWHID type 'release', got 'content'" | ValueError, match="Expected SWHID type 'release', got 'content'" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
release=SWHID( | release=SWHID( | ||||
object_type="content", | object_type="content", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_validate_context_revision(): | def test_metadata_validate_context_revision(): | ||||
"""Checks validation of RawExtrinsicMetadata.revision.""" | """Checks validation of RawExtrinsicMetadata.revision.""" | ||||
# Origins can't have a 'revision' context | # Origins can't have a 'revision' context | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Unexpected 'revision' context for origin object" | ValueError, match="Unexpected 'revision' context for origin object" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
revision=SWHID( | revision=SWHID( | ||||
object_type="revision", | object_type="revision", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# but content can | # but content can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
revision=SWHID( | revision=SWHID( | ||||
object_type="revision", object_id="94a9ed024d3859793618152ea559a168bbcbb5e2" | object_type="revision", object_id="94a9ed024d3859793618152ea559a168bbcbb5e2" | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Non-core SWHID | # Non-core SWHID | ||||
with pytest.raises(ValueError, match="Expected core SWHID"): | with pytest.raises(ValueError, match="Expected core SWHID"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
revision=SWHID( | revision=SWHID( | ||||
object_type="revision", | object_type="revision", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata={"foo": "bar"}, | metadata={"foo": "bar"}, | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# SWHID type doesn't match the expected type of this context key | # SWHID type doesn't match the expected type of this context key | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Expected SWHID type 'revision', got 'content'" | ValueError, match="Expected SWHID type 'revision', got 'content'" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
revision=SWHID( | revision=SWHID( | ||||
object_type="content", | object_type="content", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_validate_context_path(): | def test_metadata_validate_context_path(): | ||||
"""Checks validation of RawExtrinsicMetadata.path.""" | """Checks validation of RawExtrinsicMetadata.path.""" | ||||
# Origins can't have a 'path' context | # Origins can't have a 'path' context | ||||
with pytest.raises(ValueError, match="Unexpected 'path' context for origin object"): | with pytest.raises(ValueError, match="Unexpected 'path' context for origin object"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
path=b"/foo/bar", | path=b"/foo/bar", | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# but content can | # but content can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
path=b"/foo/bar", | path=b"/foo/bar", | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_validate_context_directory(): | def test_metadata_validate_context_directory(): | ||||
"""Checks validation of RawExtrinsicMetadata.directory.""" | """Checks validation of RawExtrinsicMetadata.directory.""" | ||||
# Origins can't have a 'directory' context | # Origins can't have a 'directory' context | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Unexpected 'directory' context for origin object" | ValueError, match="Unexpected 'directory' context for origin object" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.ORIGIN, | type=MetadataTargetType.ORIGIN, | ||||
id=_origin_url, | target=_origin_url, | ||||
directory=SWHID( | directory=SWHID( | ||||
object_type="directory", | object_type="directory", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# but content can | # but content can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
directory=SWHID( | directory=SWHID( | ||||
object_type="directory", | object_type="directory", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Non-core SWHID | # Non-core SWHID | ||||
with pytest.raises(ValueError, match="Expected core SWHID"): | with pytest.raises(ValueError, match="Expected core SWHID"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
directory=SWHID( | directory=SWHID( | ||||
object_type="directory", | object_type="directory", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata={"foo": "bar"}, | metadata={"foo": "bar"}, | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# SWHID type doesn't match the expected type of this context key | # SWHID type doesn't match the expected type of this context key | ||||
with pytest.raises( | with pytest.raises( | ||||
ValueError, match="Expected SWHID type 'directory', got 'content'" | ValueError, match="Expected SWHID type 'directory', got 'content'" | ||||
): | ): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | type=MetadataTargetType.CONTENT, | ||||
id=_content_swhid, | target=_content_swhid, | ||||
directory=SWHID( | directory=SWHID( | ||||
object_type="content", | object_type="content", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
), | ), | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
def test_metadata_id_attr(): | |||||
"""Checks the legacy id attribute on RawExtrinsicMetadata objects""" | |||||
# Simplest case | |||||
meta = RawExtrinsicMetadata( | |||||
type=MetadataTargetType.ORIGIN, target=_origin_url, **_common_metadata_fields | |||||
) | |||||
assert meta is not None | |||||
with pytest.deprecated_call() as messages: | |||||
assert meta.id == _origin_url | |||||
assert "RawExtrinsicMetadata `id`" in str(messages[0].message) |