Changeset 5c72356 in flexoentity for tests


Ignore:
Timestamp:
11/02/25 18:49:14 (2 months ago)
Author:
Enrico Schwass <ennoausberlin@…>
Branches:
master
Children:
bf30018
Parents:
8aa20c7
Message:

fix tests due to simplifying state and type

Location:
tests
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • tests/conftest.py

    r8aa20c7 r5c72356  
    44from dataclasses import dataclass, field
    55from typing import List
    6 from flexoentity import FlexoEntity, EntityType, EntityState, Domain
     6from flexoentity import FlexOID, FlexoEntity, EntityType, EntityState, Domain
    77
    88@pytest.fixture
     
    3737class SingleChoiceQuestion(FlexoEntity):
    3838    """A minimal stub to test FlexoEntity integration."""
     39    ENTITY_TYPE = EntityType.ITEM
     40
    3941    text: str = ""
    4042    options: List[AnswerOption] = field(default_factory=list)
    4143
     44    def __post_init__(self):
     45        # If no FlexOID yet, generate a draft ID now.
     46        if not getattr(self, "flexo_id", None):
     47            domain_code = (
     48                self.domain.domain if isinstance(self.domain, Domain) else "GEN"
     49            )
     50            self.flexo_id = FlexOID.safe_generate(
     51                domain=domain_code,
     52                entity_type=EntityType.ITEM.value,     # 'I'
     53                estate=EntityState.DRAFT.value,        # 'D'
     54                text=self.text_seed or self.text,
     55                version=1,
     56            )
    4257
    4358    @classmethod
    4459    def default(cls):
    45         return cls(domain=Domain(domain="GEN",
    46                                  entity_type=EntityType.DOMAIN,
    47                                  state=EntityState.DRAFT),
    48                    state=EntityState.DRAFT, entity_type=EntityType.ITEM)
     60        return cls(domain=Domain(domain="GEN"))
    4961
    5062    def to_dict(self):
     
    6880    @classmethod
    6981    def from_dict(cls, data):
    70         obj = cls(
     82        obj = cls(domain=Domain(domain="GEN"),
    7183            text=data.get("text", ""),
    7284            options=[AnswerOption.from_dict(o) for o in data.get("options", [])],
     
    7486        # restore FlexoEntity core fields
    7587        obj.domain = data.get("domain")
    76         obj.entity_type = EntityType[data.get("etype")] if "etype" in data else EntityType.ITEM
    77         obj.state = EntityState[data.get("state")] if "state" in data else EntityState.DRAFT
    7888        if "flexo_id" in data:
    79             from flexoentity import FlexOID
    8089            obj.flexo_id = FlexOID.parsed(data["flexo_id"])
    8190        return obj
     
    8796@pytest.fixture
    8897def sample_question():
    89     return SingleChoiceQuestion(domain=Domain.default(),
    90                                text="What is 2 + 2?",
    91                                options=[],
    92                                entity_type=EntityType.ITEM,
    93                                state=EntityState.DRAFT)
     98    q = SingleChoiceQuestion(domain=Domain.default(),
     99                             text="What is 2 + 2?",
     100                             options=[])
     101    q._update_fingerprint()
     102    return q
  • tests/test_id_lifecycle.py

    r8aa20c7 r5c72356  
    2020    assert q.flexo_id.version == 1
    2121
    22 
    23 def test_signing_bumps_version(sample_question):
     22def test_signing_does_not_bump_version(sample_question):
    2423    q = sample_question
    2524    q.approve()
    26     v_before = str(q.flexo_id)
     25    before = q.flexo_id
    2726    q.sign()
     27    after = q.flexo_id
     28
     29    # state changed
    2830    assert q.state == EntityState.APPROVED_AND_SIGNED
    29     assert str(q.flexo_id) != v_before
     31
     32    # version unchanged
     33    assert before.version == after.version
     34
     35    # only suffix letter differs
     36    assert before.prefix == after.prefix
     37    assert before.state_code == "A"
     38    assert after.state_code == "S"
    3039
    3140
    32 def test_publish_bumps_version(sample_question):
     41def test_publish_does_not_bump_version(sample_question):
    3342    q = sample_question
    3443    q.approve()
     
    3746    q.publish()
    3847    assert q.state == EntityState.PUBLISHED
    39     assert q.flexo_id.version == v_before + 1
     48    assert q.flexo_id.version == v_before
    4049
    4150
     
    7079    # simulate tampering
    7180    q.text = "Tampered text"
     81    print(FlexoEntity.debug_integrity(q))
    7282    assert not FlexoEntity.verify_integrity(q)
    7383
     
    112122    for _ in range(FlexOID.MAX_VERSION - 1):
    113123        q.bump_version()
     124
     125    # Next one must raise
    114126    with pytest.raises(RuntimeError, match="mark obsolete"):
    115         q.sign()
     127        q.bump_version()
  • tests/test_id_stress.py

    r8aa20c7 r5c72356  
    8282
    8383
    84 def test_version_ceiling_enforcement(sample_question):
    85     """Simulate approaching @999 to trigger obsolescence guard."""
    86     q = sample_question
    87     q.approve()
    88 
    89     # artificially bump version number to near ceiling
    90     q.flexo_id = FlexOID.from_oid_and_version(q.flexo_id, 998)
    91 
    92     # 998 → 999 is allowed
    93     q.sign()
    94     assert q.flexo_id.version == 999
    95 
    96     # 999 → 1000 should raise RuntimeError
    97     with pytest.raises(ValueError):
    98         q.publish()
    99 
    100 
    10184def test_massive_lifecycle_simulation(sample_question):
    10285    """
Note: See TracChangeset for help on using the changeset viewer.