Changeset 8a238e2 in flexoentity for tests/test_id_stress.py


Ignore:
Timestamp:
10/20/25 13:15:45 (3 months ago)
Author:
Enrico Schwass <ennoausberlin@…>
Branches:
master
Children:
3d65ce5
Parents:
045b864
Message:

skip some tests due to missing correct serialized entities

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/test_id_stress.py

    r045b864 r8a238e2  
    33Focus: collision avoidance, version ceiling, reproducibility.
    44"""
    5 import os
    6 import sys
    75import pytest
     6import random
    87
    9 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
    10 from flexoentity import FlexOID, EntityType, EntityState, FlexoEntity
     8from flexoentity import FlexOID, EntityType, EntityState
    119
     10from tests.conftest import DummyEntity
    1211
    1312# ──────────────────────────────────────────────────────────────────────────────
     
    1918    seeds = [f"question {i}" for i in range(10_000)]
    2019
    21     ids = []
    22     for seed in seeds:
    23         flexo_id = FlexOID.generate(domain, etype, estate, seed)
    24         ids.append(flexo_id)
     20    ids = [FlexOID.generate(domain, etype, estate, seed) for seed in seeds]
    2521
    2622    assert len(ids) == len(set(ids)), "ID collisions detected in bulk generation"
    2723
    28     def test_disambiguator_trigger():
    29         """
    30         Generating the same entity twice with same inputs yields identical ID.
    31         (No runtime disambiguation; IDs are deterministic by design.)
    32         """
    33         domain = "AF"
    34         etype = EntityType.QUESTION
    35         estate = EntityState.DRAFT
    36         text = "identical question text"
    37         id1 = FlexOID.generate(domain, etype, estate, text)
    38         id2 = FlexOID.generate(domain, etype, estate, text)
    39         # IDs must be identical, because we now enforce determinism, not randomization
    40         assert id1 == id2
    41         assert id1.signature == id2.signature
    42    
     24
     25def test_disambiguator_trigger():
     26    """
     27    Generating the same entity twice with same inputs yields identical ID.
     28    (No runtime disambiguation; IDs are deterministic by design.)
     29    """
     30    domain = "AF"
     31    etype = EntityType.QUESTION
     32    estate = EntityState.DRAFT
     33    text = "identical question text"
     34    id1 = FlexOID.generate(domain, etype, estate, text)
     35    id2 = FlexOID.generate(domain, etype, estate, text)
     36    # IDs must be identical, because we now enforce determinism, not randomization
     37    assert id1 == id2
     38    assert id1.signature == id2.signature
     39
     40
    4341def test_id_reproducibility_across_runs():
    4442    """
     
    6058def test_version_ceiling_enforcement():
    6159    """Simulate approaching @999 to trigger obsolescence guard."""
    62     entity = FlexoEntity("AF", EntityType.EXAM, "Final Exam 2025", EntityState.DRAFT)
     60    entity = DummyEntity(domain="AF", etype=EntityType.EXAM, state=EntityState.DRAFT, seed="Final Exam 2025")
    6361    entity.approve()
    6462    # artificially bump version number to near ceiling
    65 
    6663    entity.flexo_id = FlexOID.from_oid_and_version(entity.flexo_id, 998)
    6764
     
    8077    ensure all final IDs and fingerprints are unique and valid.
    8178    """
    82     import random
    83     texts = [f"random question {i}" for i in range(100)]
    84     entities = [FlexoEntity("AF", EntityType.QUESTION, t) for t in texts]
     79    entities = [DummyEntity(domain="AF", etype=EntityType.QUESTION, state=EntityState.DRAFT, seed=f"random question {i}") for i in range(100)]
    8580
    8681    for e in entities:
    8782        # random edit, approval, signing
    88         e.modify_content(e.text_seed + " updated")
     83        e._seed += " updated"
     84        e._update_fingerprint()
    8985        e.approve()
    9086        if random.random() > 0.3:
Note: See TracChangeset for help on using the changeset viewer.