示例#1
0
def test_non_unique_states_invalid(app):
    state_machine = StateMachine(
        name='example',
        feeds=[],
        webhooks=[],
        states=[
            Gate(
                name='start',
                triggers=[],
                next_states=ConstantNextState('gate1'),
                exit_condition=ExitConditionProgram('false'),
            ),
            Gate(
                name='gate1',
                triggers=[],
                next_states=ConstantNextState('start'),
                exit_condition=ExitConditionProgram('false'),
            ),
            Gate(
                name='gate1',
                triggers=[],
                next_states=NoNextStates(),
                exit_condition=ExitConditionProgram('false'),
            ),
        ],
    )
    with pytest.raises(ValidationError):
        _validate_state_machine(app, state_machine)
示例#2
0
def test_nonexistent_node_destination_invalid(app):
    state_machine = StateMachine(
        name='example',
        feeds=[],
        webhooks=[],
        states=[
            Gate(
                name='start',
                triggers=[],
                next_states=ContextNextStates(
                    path='foo.bar',
                    destinations=[
                        ContextNextStatesOption(
                            state='nonexistent',
                            value='1',
                        ),
                        ContextNextStatesOption(
                            state='end',
                            value='2',
                        ),
                    ],
                    default='end',
                ),
                exit_condition=ExitConditionProgram('false'),
            ),
            Gate(
                name='end',
                triggers=[],
                next_states=NoNextStates(),
                exit_condition=ExitConditionProgram('false'),
            ),
        ],
    )
    with pytest.raises(ValidationError):
        _validate_state_machine(app, state_machine)
示例#3
0
def test_label_in_deleted_state_invalid(app, create_label):
    create_label('foo', 'test_machine', {})  # Created in "start" implicitly
    state_machine = StateMachine(
        name='test_machine',
        feeds=[],
        webhooks=[],
        states=[
            # Note: state "start" from "test_machine" is gone.
            Gate(
                name='end',
                triggers=[],
                next_states=NoNextStates(),
                exit_condition=ExitConditionProgram('false'),
            ),
        ],
    )
    with pytest.raises(ValidationError):
        _validate_state_machine(app, state_machine)
示例#4
0
def test_disconnected_state_machine_invalid(app):
    state_machine = StateMachine(
        name='example',
        feeds=[],
        webhooks=[],
        states=[
            Gate(
                name='start',
                triggers=[],
                next_states=NoNextStates(),
                exit_condition=ExitConditionProgram('false'),
            ),
            Gate(
                name='end',
                triggers=[],
                next_states=NoNextStates(),
                exit_condition=ExitConditionProgram('false'),
            ),
        ],
    )
    with pytest.raises(ValidationError):
        _validate_state_machine(app, state_machine)
示例#5
0
def test_valid(app):
    _validate_state_machine(
        app,
        StateMachine(
            name='example',
            feeds=[],
            webhooks=[],
            states=[
                Gate(
                    name='start',
                    triggers=[],
                    next_states=ConstantNextState('end'),
                    exit_condition=ExitConditionProgram('false'),
                ),
                Gate(
                    name='end',
                    triggers=[],
                    next_states=NoNextStates(),
                    exit_condition=ExitConditionProgram('false'),
                ),
            ],
        ))
示例#6
0
def test_label_in_deleted_state_on_per_state_machine_basis(
    app,
    create_label,
):
    create_label('foo', 'test_machine', {})  # Created in "start" implicitly
    state_machine = StateMachine(
        name='other_machine',
        feeds=[],
        webhooks=[],
        states=[
            # Note: state "start" is not present, but that we're in a different
            # state machine.
            Gate(
                name='end',
                triggers=[],
                next_states=NoNextStates(),
                exit_condition=ExitConditionProgram('false'),
            ),
        ],
    )

    # Should not care about our label as it is in a different state machine.
    _validate_state_machine(app, state_machine)