Exemplo n.º 1
0
 def test_firing_event_successfully(self):
     start_state = State(name='start')
     busy_state  = State(name='busy')
     do_work_event = Event(name='do_work', source_states=[start_state], destination_state=busy_state)
     
     fsm = StateMachine(states=[start_state, busy_state], events=[do_work_event], initial_state=start_state)
     fsm.activate()
     
     assert fsm.fire_event(do_work_event)
Exemplo n.º 2
0
 def test_can_fire_event_with_name_failure(self):
     start_state = State(name='start')
     busy_state  = State(name='busy')
     do_work_event = Event(name='do_work', source_states=[busy_state], destination_state=busy_state)
     
     fsm = StateMachine(states=[start_state, busy_state], events=[do_work_event], initial_state=start_state)
     fsm.activate()
     
     assert fsm.can_fire_event_with_name('do_work') == False
Exemplo n.º 3
0
 def test_state_machine_is_in_correct_state(self):
     start_state = State(name='start')
     busy_state  = State(name='busy')
     do_work_event = Event(name='do_work', source_states=[start_state], destination_state=busy_state)
     
     fsm = StateMachine(states=set([start_state, busy_state]), 
                        events=set([do_work_event]), 
                        initial_state=start_state)
     
     fsm.activate()
     
     assert fsm.in_state(start_state)
Exemplo n.º 4
0
 def test_in_state_by_name_for_wrong_current_state(self):
     start_state = State(name='start')
     busy_state  = State(name='busy')
     do_work_event = Event(name='do_work', source_states=[start_state], destination_state=busy_state)
     
     fsm = StateMachine(states=set([start_state, busy_state]), 
                        events=set([do_work_event]), 
                        initial_state=start_state)
     
     fsm.activate()
     
     assert fsm.in_state_by_name('busy') == False
Exemplo n.º 5
0
 def test_firing_event_with_name_with_invalid_event_name(self):
     start_state = State(name='start')
     busy_state  = State(name='busy')
     do_work_event = Event(name='do_work', source_states=[start_state], destination_state=busy_state)
     
     fsm = StateMachine(states=[start_state, busy_state], events=[do_work_event], initial_state=busy_state)
     fsm.activate()
     
     with pytest.raises(StateMachineEventError) as context:
         fsm.fire_event_with_name('do_work')
     
     expected_exception = context.value
     assert expected_exception.identifier == STATE_MACHINE.INVALID_EVENT_IDENTIFIER
Exemplo n.º 6
0
    def test_did_enter_state_callback_is_invoked(self):
        did_enter_mock = Mock()
        callbacks = StateCallbacks(did_enter_state=did_enter_mock)
        start_state = State(name='start', callbacks=callbacks)
        busy_state  = State(name='busy')
        do_work_event = Event(name='do_work', source_states=[start_state], destination_state=busy_state)

        fsm = StateMachine(states=[start_state, busy_state],
                           events=[do_work_event],
                           initial_state=start_state)

        fsm.activate()

        did_enter_mock.assert_called()
Exemplo n.º 7
0
 def test_in_state_by_name_for_an_invalid_state(self):
     start_state = State(name='start')
     busy_state  = State(name='busy')
     do_work_event = Event(name='do_work', source_states=[start_state], destination_state=busy_state)
     
     fsm = StateMachine(states=set([start_state, busy_state]), 
                        events=set([do_work_event]), 
                        initial_state=start_state)
     
     fsm.activate()
     
     with pytest.raises(StateMachineError) as context:
         fsm.in_state_by_name('stop')
     
     expected_exception = context.value
     assert expected_exception.identifier == STATE_MACHINE.STATE_NOT_FOUND_IDENTIFIER
Exemplo n.º 8
0
    def test_event_did_fire_callback(self):
        start_state = State(name='start')
        busy_state = State(name='busy')
        did_fire_mock = Mock()

        do_work_info = EventCallbacks(did_fire_event=did_fire_mock)
        do_work_event = Event(name='do_work',
                              source_states=[start_state],
                              destination_state=busy_state,
                              callbacks=do_work_info)

        fsm = StateMachine(states=set([start_state, busy_state]),
                           events=set([do_work_event]),
                           initial_state=start_state)

        fsm.activate()

        assert fsm.is_active
        assert fsm.fire_event(do_work_event)
        did_fire_mock.assert_called()
Exemplo n.º 9
0
    def test_event_should_fire_callback(self):
        start_state = State(name='start')
        busy_state = State(name='busy')

        def should_fire_callback(transition):
            return True

        do_work_info = EventCallbacks(should_fire_event=should_fire_callback)
        do_work_event = Event(name='do_work',
                              source_states=[start_state],
                              destination_state=busy_state,
                              callbacks=do_work_info)

        fsm = StateMachine(states=set([start_state, busy_state]),
                           events=set([do_work_event]),
                           initial_state=start_state)

        fsm.activate()

        assert fsm.is_active
        assert fsm.fire_event(do_work_event)
Exemplo n.º 10
0
 def test_firing_event_that_is_declined(self):
     
     def decline_event(transition):
         return False
     
     start_state = State(name='start')
     busy_state  = State(name='busy')
     
     do_work_info  = EventCallbacks(should_fire_event=decline_event)
     do_work_event = Event(name='do_work',
                           source_states=[start_state], 
                           destination_state=busy_state, 
                           callbacks=do_work_info)
     
     fsm = StateMachine(states=[start_state, busy_state], events=[do_work_event], initial_state=start_state)
     fsm.activate()
     
     with pytest.raises(StateMachineEventError) as context_manager:
         fsm.fire_event(do_work_event)
     
     expected_exception = context_manager.value
     assert expected_exception.identifier == STATE_MACHINE.DECLINED_EVENT_IDENTIFIER