Changeset View
Changeset View
Standalone View
Standalone View
swh/model/tests/test_model.py
Show All 10 Lines | |||||
from hypothesis import given | from hypothesis import given | ||||
from hypothesis.strategies import binary | from hypothesis.strategies import binary | ||||
import pytest | import pytest | ||||
from swh.model.hashutil import MultiHash, hash_to_bytes, hash_to_hex | from swh.model.hashutil import MultiHash, hash_to_bytes, hash_to_hex | ||||
import swh.model.hypothesis_strategies as strategies | import swh.model.hypothesis_strategies as strategies | ||||
from swh.model.identifiers import ( | from swh.model.identifiers import ( | ||||
SWHID, | SWHID, | ||||
ExtendedSWHID, | |||||
content_identifier, | content_identifier, | ||||
directory_identifier, | directory_identifier, | ||||
origin_identifier, | origin_identifier, | ||||
parse_swhid, | |||||
release_identifier, | release_identifier, | ||||
revision_identifier, | revision_identifier, | ||||
snapshot_identifier, | snapshot_identifier, | ||||
) | ) | ||||
from swh.model.model import ( | from swh.model.model import ( | ||||
BaseModel, | BaseModel, | ||||
Content, | Content, | ||||
Directory, | Directory, | ||||
MetadataAuthority, | MetadataAuthority, | ||||
MetadataAuthorityType, | MetadataAuthorityType, | ||||
MetadataFetcher, | MetadataFetcher, | ||||
MetadataTargetType, | |||||
MissingData, | MissingData, | ||||
Origin, | Origin, | ||||
OriginVisit, | OriginVisit, | ||||
OriginVisitStatus, | OriginVisitStatus, | ||||
Person, | Person, | ||||
RawExtrinsicMetadata, | RawExtrinsicMetadata, | ||||
Release, | Release, | ||||
Revision, | Revision, | ||||
▲ Show 20 Lines • Show All 760 Lines • ▼ Show 20 Lines | def test_object_type_is_final(): | ||||
check_final(BaseModel) | check_final(BaseModel) | ||||
_metadata_authority = MetadataAuthority( | _metadata_authority = MetadataAuthority( | ||||
type=MetadataAuthorityType.FORGE, url="https://forge.softwareheritage.org", | type=MetadataAuthorityType.FORGE, url="https://forge.softwareheritage.org", | ||||
) | ) | ||||
_metadata_fetcher = MetadataFetcher(name="test-fetcher", version="0.0.1",) | _metadata_fetcher = MetadataFetcher(name="test-fetcher", version="0.0.1",) | ||||
_content_swhid = parse_swhid("swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2") | _content_swhid = ExtendedSWHID.from_string( | ||||
"swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2" | |||||
) | |||||
_origin_url = "https://forge.softwareheritage.org/source/swh-model.git" | _origin_url = "https://forge.softwareheritage.org/source/swh-model.git" | ||||
_origin_swhid = ExtendedSWHID.from_string( | |||||
"swh:1:ori:94a9ed024d3859793618152ea559a168bbcbb5e2" | |||||
) | |||||
_dummy_qualifiers = {"origin": "https://example.com", "lines": "42"} | _dummy_qualifiers = {"origin": "https://example.com", "lines": "42"} | ||||
_common_metadata_fields = dict( | _common_metadata_fields = dict( | ||||
discovery_date=datetime.datetime.now(tz=datetime.timezone.utc), | discovery_date=datetime.datetime.now(tz=datetime.timezone.utc), | ||||
authority=_metadata_authority, | authority=_metadata_authority, | ||||
fetcher=_metadata_fetcher, | fetcher=_metadata_fetcher, | ||||
format="json", | format="json", | ||||
metadata=b'{"origin": "https://example.com", "lines": "42"}', | metadata=b'{"origin": "https://example.com", "lines": "42"}', | ||||
) | ) | ||||
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(target=_origin_swhid, **_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, | target=_content_swhid, **_common_metadata_fields, | ||||
target=_content_swhid, | |||||
**_common_metadata_fields, | |||||
) | ) | ||||
def test_metadata_to_dict(): | def test_metadata_to_dict(): | ||||
"""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'{"origin": "https://example.com", "lines": "42"}', | "metadata": b'{"origin": "https://example.com", "lines": "42"}', | ||||
} | } | ||||
m = RawExtrinsicMetadata( | m = RawExtrinsicMetadata(target=_origin_swhid, **_common_metadata_fields,) | ||||
type=MetadataTargetType.ORIGIN, target=_origin_url, **_common_metadata_fields, | |||||
) | |||||
assert m.to_dict() == { | assert m.to_dict() == { | ||||
"type": "origin", | "target": str(_origin_swhid), | ||||
"target": _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(target=_content_swhid, **_common_metadata_fields,) | ||||
type=MetadataTargetType.CONTENT, | |||||
target=_content_swhid, | |||||
**_common_metadata_fields, | |||||
) | |||||
assert m.to_dict() == { | assert m.to_dict() == { | ||||
"type": "content", | |||||
"target": "swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | "target": "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_target(): | def test_metadata_invalid_target(): | ||||
"""Checks various invalid values for the 'target' field.""" | """Checks various invalid values for the 'target' field.""" | ||||
# SWHID for an origin | |||||
with pytest.raises(ValueError, match="expected an URL"): | |||||
RawExtrinsicMetadata( | |||||
type=MetadataTargetType.ORIGIN, | |||||
target=_content_swhid, | |||||
**_common_metadata_fields, | |||||
) | |||||
# SWHID for an origin (even when passed as string) | |||||
with pytest.raises(ValueError, match="expected an URL"): | |||||
RawExtrinsicMetadata( | |||||
type=MetadataTargetType.ORIGIN, | |||||
target="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | |||||
**_common_metadata_fields, | |||||
) | |||||
# URL for a non-origin | |||||
with pytest.raises(ValueError, match="Expected SWHID, got a string"): | |||||
RawExtrinsicMetadata( | |||||
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="target must be.*ExtendedSWHID"): | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | |||||
target="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | target="swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
**_common_metadata_fields, | **_common_metadata_fields, | ||||
) | ) | ||||
# Object type does not match the SWHID | |||||
with pytest.raises( | |||||
ValueError, match="Expected SWHID type 'revision', got 'content'" | |||||
): | |||||
RawExtrinsicMetadata( | |||||
type=MetadataTargetType.REVISION, | |||||
target=_content_swhid, | |||||
**_common_metadata_fields, | |||||
) | |||||
# Non-core SWHID | |||||
with pytest.raises(ValueError, match="Expected core SWHID"): | |||||
RawExtrinsicMetadata( | |||||
type=MetadataTargetType.CONTENT, | |||||
target=SWHID( | |||||
object_type="content", | |||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | |||||
metadata=_dummy_qualifiers, | |||||
), | |||||
**_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, | target=_origin_swhid, | ||||
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, | target=_origin_swhid, origin=_origin_url, **_common_metadata_fields, | ||||
target=_origin_url, | |||||
origin=_origin_url, | |||||
**_common_metadata_fields, | |||||
) | ) | ||||
# but all other types can | # but all other types can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | target=_content_swhid, origin=_origin_url, **_common_metadata_fields, | ||||
target=_content_swhid, | |||||
origin=_origin_url, | |||||
**_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, | |||||
target=_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, | target=_origin_swhid, visit=42, **_common_metadata_fields, | ||||
target=_origin_url, | |||||
visit=42, | |||||
**_common_metadata_fields, | |||||
) | ) | ||||
# but all other types can | # but all other types can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | target=_content_swhid, origin=_origin_url, visit=42, **_common_metadata_fields, | ||||
target=_content_swhid, | |||||
origin=_origin_url, | |||||
visit=42, | |||||
**_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, | target=_content_swhid, visit=42, **_common_metadata_fields, | ||||
target=_content_swhid, | |||||
visit=42, | |||||
**_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, | |||||
target=_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, | target=_origin_swhid, | ||||
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, | |||||
target=_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, | |||||
target=_content_swhid, | target=_content_swhid, | ||||
snapshot=SWHID( | snapshot=SWHID( | ||||
object_type="snapshot", | object_type="snapshot", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata=_dummy_qualifiers, | metadata=_dummy_qualifiers, | ||||
), | ), | ||||
**_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, | |||||
target=_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, | target=_origin_swhid, | ||||
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, | |||||
target=_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, | |||||
target=_content_swhid, | target=_content_swhid, | ||||
release=SWHID( | release=SWHID( | ||||
object_type="release", | object_type="release", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata=_dummy_qualifiers, | metadata=_dummy_qualifiers, | ||||
), | ), | ||||
**_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, | |||||
target=_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, | target=_origin_swhid, | ||||
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, | |||||
target=_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, | |||||
target=_content_swhid, | target=_content_swhid, | ||||
revision=SWHID( | revision=SWHID( | ||||
object_type="revision", | object_type="revision", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata=_dummy_qualifiers, | metadata=_dummy_qualifiers, | ||||
), | ), | ||||
**_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, | |||||
target=_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, | target=_origin_swhid, path=b"/foo/bar", **_common_metadata_fields, | ||||
target=_origin_url, | |||||
path=b"/foo/bar", | |||||
**_common_metadata_fields, | |||||
) | ) | ||||
# but content can | # but content can | ||||
RawExtrinsicMetadata( | RawExtrinsicMetadata( | ||||
type=MetadataTargetType.CONTENT, | target=_content_swhid, path=b"/foo/bar", **_common_metadata_fields, | ||||
target=_content_swhid, | |||||
path=b"/foo/bar", | |||||
**_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, | target=_origin_swhid, | ||||
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, | |||||
target=_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, | |||||
target=_content_swhid, | target=_content_swhid, | ||||
directory=SWHID( | directory=SWHID( | ||||
object_type="directory", | object_type="directory", | ||||
object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | object_id="94a9ed024d3859793618152ea559a168bbcbb5e2", | ||||
metadata=_dummy_qualifiers, | metadata=_dummy_qualifiers, | ||||
), | ), | ||||
**_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, | |||||
target=_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, | ||||
) | ) |