Skip to content
Snippets Groups Projects
Select Git revision
  • fa4376fb5611e2d2fcbf854023356f266c9a9ec1
  • main default protected
  • f-utility-json
  • f-remove-deprecation-warning
  • dev
  • f-docs-pylib
  • f-parse-value
  • f-compare
  • f-string-ids
  • f-217-set-special-property
  • f-filesystem-import
  • f-filesystem-link
  • f-filesystem-directory
  • f-filesystem-core
  • f-filesystem-cleanup
  • f-check-merge-entities
  • f-compare-enid
  • f-select-subproperties
  • v0.18.0
  • v0.17.0
  • v0.16.0
  • v0.15.1
  • v0.15.0
  • v0.14.0
  • v0.13.2
  • v0.13.1
  • v0.13.0
  • linkahead-rename-step-2
  • linkahead-rename-step-1
  • v0.12.0
  • v0.11.2
  • v0.11.1
  • v0.11.0
  • v0.10.0
  • v0.9.0
  • v0.8.0
  • v0.7.4
  • v0.7.3
38 results

test_state.py

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")])