source: flexoentity/tests/test_id_lifecycle.py@ 8a238e2

Last change on this file since 8a238e2 was 8a238e2, checked in by Enrico Schwass <ennoausberlin@…>, 3 months ago

skip some tests due to missing correct serialized entities

  • Property mode set to 100644
File size: 2.4 KB
Line 
1import pytest
2
3from flexoentity import FlexOID, FlexoEntity, EntityType, EntityState
4
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)
10
11
12def test_approval_bumps_version(entity):
13 entity.approve()
14 assert entity.state == EntityState.APPROVED
15 assert entity.flexo_id.version == 2
16
17
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
24
25
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
33
34
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
40
41
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
46
47
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
54
55
56def test_integrity_check_passes_and_fails(entity):
57 entity.approve()
58 assert FlexoEntity.verify_integrity(entity)
59 # simulate tampering
60 entity._seed = "Tampered text"
61 assert not FlexoEntity.verify_integrity(entity)
62
63
64def test_obsolete_state(entity):
65 entity.approve()
66 entity.sign()
67 entity.publish()
68 entity.obsolete()
69 assert entity.state == EntityState.OBSOLETE
70
71
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
82
83
84def test_mass_version_increments_until_obsolete(entity):
85 entity.approve()
86 for _ in range(FlexOID.MAX_VERSION - 2):
87 entity.sign()
88 with pytest.raises(RuntimeError, match="mark obsolete"):
89 entity.sign()
Note: See TracBrowser for help on using the repository browser.