Changeset View
Changeset View
Standalone View
Standalone View
swh/model/tests/test_model.py
Show First 20 Lines • Show All 904 Lines • ▼ Show 20 Lines | |||||
@given(strategies.directories(raw_manifest=none())) | @given(strategies.directories(raw_manifest=none())) | ||||
def test_directory_raw_manifest(directory): | def test_directory_raw_manifest(directory): | ||||
assert "raw_manifest" not in directory.to_dict() | assert "raw_manifest" not in directory.to_dict() | ||||
raw_manifest = b"foo" | raw_manifest = b"foo" | ||||
id_ = hashlib.new("sha1", raw_manifest).digest() | id_ = hashlib.new("sha1", raw_manifest).digest() | ||||
# Forgot to update the id -> error | |||||
directory2 = attr.evolve(directory, raw_manifest=raw_manifest) | directory2 = attr.evolve(directory, raw_manifest=raw_manifest) | ||||
assert directory2.to_dict()["raw_manifest"] == raw_manifest | assert directory2.to_dict()["raw_manifest"] == raw_manifest | ||||
with pytest.raises(ValueError, match="does not match recomputed hash"): | with pytest.raises(ValueError, match="does not match recomputed hash"): | ||||
directory2.check() | directory2.check() | ||||
# id set to the right value -> ok | |||||
directory2 = attr.evolve(directory, raw_manifest=raw_manifest, id=id_) | directory2 = attr.evolve(directory, raw_manifest=raw_manifest, id=id_) | ||||
assert directory2.id is not None | assert directory2.id is not None | ||||
assert directory2.id == id_ != directory.id | assert directory2.id == id_ != directory.id | ||||
assert directory2.to_dict()["raw_manifest"] == raw_manifest | assert directory2.to_dict()["raw_manifest"] == raw_manifest | ||||
directory2.check() | directory2.check() | ||||
# id implicitly set to the right value -> ok | |||||
directory3 = directory.evolve(raw_manifest=raw_manifest) | |||||
assert directory3.id is not None | |||||
assert directory3.id == id_ != directory.id | |||||
assert directory3.to_dict()["raw_manifest"] == raw_manifest | |||||
directory3.check() | |||||
@given(strategies.directories(raw_manifest=none())) | |||||
def test_directory_evolve(directory): | |||||
directory.check() | |||||
# Add an entry (while making sure it is not a duplicate) | |||||
longest_entry_name = max((entry.name for entry in directory.entries), key=len) | |||||
entries = ( | |||||
*directory.entries, | |||||
DirectoryEntry( | |||||
name=longest_entry_name + b"x", | |||||
type="file", | |||||
target=b"\x00" * 20, | |||||
perms=0, | |||||
), | |||||
) | |||||
directory2 = directory.evolve(entries=entries) | |||||
assert directory2.id != directory, "directory.evolve() did not update the id" | |||||
directory2.check() | |||||
with pytest.raises(TypeError, match="use attr.evolve"): | |||||
directory.evolve(id=b"\x00" * 20) | |||||
with pytest.raises(TypeError, match="unexpected keyword argument"): | |||||
directory.evolve(foo=b"") | |||||
def test_directory_entry_name_validation(): | def test_directory_entry_name_validation(): | ||||
with pytest.raises(ValueError, match="valid directory entry name."): | with pytest.raises(ValueError, match="valid directory entry name."): | ||||
DirectoryEntry(name=b"foo/", type="dir", target=b"\x00" * 20, perms=0), | DirectoryEntry(name=b"foo/", type="dir", target=b"\x00" * 20, perms=0), | ||||
def test_directory_duplicate_entry_name(): | def test_directory_duplicate_entry_name(): | ||||
entries = ( | entries = ( | ||||
▲ Show 20 Lines • Show All 859 Lines • Show Last 20 Lines |