Skip to content
Snippets Groups Projects
Select Git revision
  • 48b6c9eb9a324f1beacaa125e23857b0d0d7fc1d
  • main default
  • new protected
3 results

pyproject.toml

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    test_state.py 2.40 KiB
    import pytest
    import linkahead as db
    from linkahead import State, Transition
    from linkahead.common.models import parse_xml, ACL
    from lxml import etree
    
    
    def test_state_xml():
        state = State(model="model1", name="state1")
        xml = etree.tostring(state.to_xml())
    
        assert xml == b'<State name="state1" model="model1"/>'
        state = State.from_xml(etree.fromstring(xml))
        assert state.name == "state1"
        assert state.model == "model1"
    
        assert xml == etree.tostring(state.to_xml())
    
    
    def test_entity_xml():
        r = db.Record()
        assert r.state is None
        r.state = State(model="model1", name="state1")
    
        xml = etree.tostring(r.to_xml())
        assert xml == b'<Record><State name="state1" model="model1"/></Record>'
    
        r = parse_xml(xml)
        assert r.state == State(model="model1", name="state1")
    
    
    def test_description():
        xml = b'<State name="state1" model="model1"/>'
        state = State.from_xml(etree.fromstring(xml))
        assert state.description is None
    
        with pytest.raises(AttributeError):
            state.description = "test"
    
        xml = b'<State name="state1" model="model1" description="test2"/>'
        state = State.from_xml(etree.fromstring(xml))
        assert state.description == "test2"
    
    
    def test_id():
        xml = b'<State name="state1" model="model1"/>'
        state = State.from_xml(etree.fromstring(xml))
        assert state.id is None
    
        with pytest.raises(AttributeError):
            state.id = "2345"
    
        xml = b'<State name="state1" model="model1" id="1234"/>'
        state = State.from_xml(etree.fromstring(xml))
        assert state.id == "1234"
    
    
    def test_create_state_acl():
        acl = ACL()
        acl.grant(role="role1", permission="DO:IT")
        acl.grant(role="?OWNER?", permission="DO:THAT")
        state_acl = State.create_state_acl(acl)
        assert state_acl.get_permissions_for_role("?STATE?role1?") == {"DO:IT"}
        assert state_acl.get_permissions_for_role("?STATE??OWNER??") == {"DO:THAT"}
    
    
    def test_transitions():
        xml = b'<State name="state1" model="model1"/>'
        state = State.from_xml(etree.fromstring(xml))
        assert state.transitions is None
    
        with pytest.raises(AttributeError):
            state.transitions = []
    
        xml = b'<State name="state1" model="model1" id="1234"><Transition name="t1"><FromState name="state1"/><ToState name="state2"/></Transition></State>'
        state = State.from_xml(etree.fromstring(xml))
        assert state.transitions == set([Transition(name="t1", from_state="state1", to_state="state2")])