source: flexoentity/tests/test_id_lifecycle.py@ 859e2b1

main unify_backends
Last change on this file since 859e2b1 was 8a238e2, checked in by Enrico Schwass <ennoausberlin@…>, 4 months ago

skip some tests due to missing correct serialized entities

  • Property mode set to 100644
File size: 2.4 KB
RevLine 
[59342ce]1import pytest
2
3from flexoentity import FlexOID, FlexoEntity, EntityType, EntityState
4
[8a238e2]5def test_initial_state(entity):
6 assert entity.state == EntityState.DRAFT
7 assert entity.flexo_id.version == 1
8 assert len(entity.flexo_id.signature) == 16 # blake2s digest_size=8 → 16 hex
9 assert FlexoEntity.verify_integrity(entity)
[59342ce]10
11
[8a238e2]12def test_approval_bumps_version(entity):
13 entity.approve()
14 assert entity.state == EntityState.APPROVED
15 assert entity.flexo_id.version == 2
[59342ce]16
17
[8a238e2]18def test_signing_bumps_version(entity):
19 entity.approve()
20 v_before = entity.flexo_id
21 entity.sign()
22 assert entity.state == EntityState.APPROVED_AND_SIGNED
23 assert entity.flexo_id != v_before
[59342ce]24
25
[8a238e2]26def test_publish_bumps_version(entity):
27 entity.approve()
28 entity.sign()
29 v_before = entity.flexo_id.version
30 entity.publish()
31 assert entity.state == EntityState.PUBLISHED
32 assert entity.flexo_id.version == v_before + 1
[59342ce]33
34
[8a238e2]35def test_modify_content_changes_fingerprint(entity):
36 old_signature = entity.flexo_id.signature
37 entity._seed = "Rephrased content" # simulate text change
38 entity._update_fingerprint()
39 assert entity.flexo_id.signature != old_signature
[59342ce]40
41
[8a238e2]42def test_no_version_bump_on_draft_edits(entity):
43 entity._seed = "Draft edit only"
44 entity._update_fingerprint()
45 assert entity.flexo_id.version == 1
[59342ce]46
47
[8a238e2]48def test_version_bump_after_edit_and_sign(entity):
49 entity.approve()
50 v1 = entity.flexo_id
51 entity._seed = "Changed content"
52 entity.sign()
53 assert entity.flexo_id != v1
[59342ce]54
55
[8a238e2]56def test_integrity_check_passes_and_fails(entity):
57 entity.approve()
58 assert FlexoEntity.verify_integrity(entity)
[59342ce]59 # simulate tampering
[8a238e2]60 entity._seed = "Tampered text"
61 assert not FlexoEntity.verify_integrity(entity)
[59342ce]62
63
[8a238e2]64def test_obsolete_state(entity):
65 entity.approve()
66 entity.sign()
67 entity.publish()
68 entity.obsolete()
69 assert entity.state == EntityState.OBSOLETE
[59342ce]70
71
[8a238e2]72def test_clone_new_base_resets_lineage(entity):
73 entity.approve()
74 entity.sign()
75 entity.publish()
76 entity.obsolete()
77 old_id = entity.flexo_id
78 entity.clone_new_base()
79 assert entity.flexo_id != old_id
80 assert entity.state == EntityState.DRAFT
81 assert entity.flexo_id.version == 1
[59342ce]82
83
[8a238e2]84def test_mass_version_increments_until_obsolete(entity):
85 entity.approve()
[59342ce]86 for _ in range(FlexOID.MAX_VERSION - 2):
[8a238e2]87 entity.sign()
[59342ce]88 with pytest.raises(RuntimeError, match="mark obsolete"):
[8a238e2]89 entity.sign()
Note: See TracBrowser for help on using the repository browser.