Example #1
0
 def test_append_in_order(monkeypatch):
     monkeypatch.setattr(Action, "set_info_streamer", MagicMock())
     ap = ActionsPipeline()
     action1 = Action()
     action2 = Action()
     ap.append(action1)
     ap.append(action2)
     assert ap.actions == [action1, action2]
Example #2
0
 def test__action():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"))
     action2 = Action(shared_result.gen_action("b"))
     ap.append(action1)
     ap.append(action2)
     ap.do()
     assert shared_result.result == "ab"
Example #3
0
 def test_simulate_until_error_undo():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"),
                      shared_result.gen_action("c"))
     ap.append(action1)
     action1_name = action1.get_name("action")
     with pytest.raises(ActionException):
         ap.simulate_until([(action1_name, {}), ("garbage", {})])
Example #4
0
 def test_undo_notify_exception(monkeypatch):
     notif_mock = MagicMock()
     monkeypatch.setattr(Action, "notify", notif_mock)
     action = Action(None, MagicMock(side_effect=Exception))
     try:
         action.undo()
     except Exception:
         pass
     assert notif_mock.call_count == 2
Example #5
0
 def test_actions_are_accessible():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"))
     action2 = Action(shared_result.gen_action("b"))
     ap.append(action1)
     ap.append(action2)
     assert ap.actions[1]  # This should have no impact.
     ap.do()
     assert shared_result.result == "ab"
Example #6
0
 def test_set_info_streamer(monkeypatch):
     ap = ActionsPipeline()
     action1 = Action()
     action2 = Action()
     ap.append(action1)
     ap.append(action2)
     set_mock_1 = MagicMock()
     set_mock_2 = MagicMock()
     monkeypatch.setattr(action1, "set_info_streamer", set_mock_1)
     monkeypatch.setattr(action2, "set_info_streamer", set_mock_2)
     ap.set_info_streamer(InfoStreamer())
     assert set_mock_1.called and set_mock_2.called
Example #7
0
 def test__rollback_action():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"),
                      shared_result.gen_action("c"))
     action2 = Action(shared_result.gen_action("b"),
                      shared_result.gen_action("d"))
     ap.append(action1)
     ap.append(action2)
     ap.do()
     ap.undo()
     assert shared_result.result == "abdc"
Example #8
0
 def test_simulate_until():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"),
                      shared_result.gen_action("c"))
     action2 = Action(shared_result.gen_action("b"),
                      shared_result.gen_action("d"))
     ap.append(action1)
     ap.append(action2)
     action1_name = action1.get_name("action")
     ap.simulate_until([(action1_name, {})])
     ap.do()
     ap.undo()
     assert shared_result.result == "bdc"
Example #9
0
 def test__rollback_action_partial():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"),
                      shared_result.gen_action("c"))
     action2 = Action(MagicMock(side_effect=Exception()),
                      shared_result.gen_action("d"))
     ap.append(action1)
     ap.append(action2)
     try:
         ap.do()
     except Exception:
         pass
     ap.undo()
     assert shared_result.result == "adc"
Example #10
0
 def test_add_context_manager_inner(action_type, function_to_call, result):
     ac = Action(lambda: 10, lambda: -10)
     csm = SharedContextManager()
     ac.add_context_manager(action_type, csm.gen_context_manager("b", "a"))
     ac.add_context_manager(action_type,
                            csm.gen_context_manager("b2", "a2"))
     ac.add_context_manager(action_type,
                            csm.gen_context_manager("b3", "a3"),
                            inner=True)
     getattr(ac, function_to_call)()
     assert csm.result == result
Example #11
0
 def test_copy():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"),
                      shared_result.gen_action("c"))
     ap.append(action1)
     ap2 = copy(ap)
     ap.do()
     ap2.do()
     assert shared_result.result == "aa"
Example #12
0
def test_context_manager_retry():
    mock_action = MagicMock(side_effect=Exception)
    action = Action(mock_action)

    @action.action_context_manager
    @contextmanager
    def retry_do_3_times_if_it_fails(action):
        try:
            yield
        except Exception:
            action.retries = getattr(action, "retries", 0) + 1
            if action.retries < 3:
                action.do()
            else:
                raise

    with pytest.raises(Exception):
        action.do()

    assert mock_action.call_count == 3
Example #13
0
def test_classic_context_manager():
    # Purpose of this test is to check that classic context manager works too
    action = Action(action_fct=lambda: 10)

    @action.action_context_manager
    class ContextManager(object):
        def __init__(self, action):
            self.action = action

        def __enter__(self):
            # May use self.action
            pass

        def __exit__(self, *args, **kwargs):
            # May use self.action
            pass

    ContextManager.__enter__ = MagicMock()
    ContextManager.__exit__ = MagicMock()
    action.do()
    assert ContextManager.__enter__.called
    assert ContextManager.__exit__.called
Example #14
0
 def test_simulate_until_partial():
     ap = ActionsPipeline()
     shared_result = SharedResultAction()
     action1 = Action(shared_result.gen_action("a"),
                      shared_result.gen_action("c"))
     action2 = Action(shared_result.gen_action("b"),
                      shared_result.gen_action("d"))
     ap.append(action1)
     ap.append(action2)
     # Mandatory to redefine names unless they all have the same name and simulate can't work fine.
     action1.set_name("action", "action1")
     action1.set_name("rollback", "rollback1")
     ap.simulate_until([("action1", {}), ("rollback1", {})])
     ap.undo()
     assert shared_result.result == ""
Example #15
0
 def test_rollback_context_manager(monkeypatch):
     monkeypatch.setattr(Action, "add_context_manager", MagicMock())
     action = Action()
     assert action.rollback_context_manager(MagicMock())
Example #16
0
 def test_add_context_manager_bad_side():
     with pytest.raises(ActionException):
         Action().add_context_manager("bad_side", "osef")
Example #17
0
 def test_get_name_not_set(monkeypatch, action_side):
     format_fct_name_mock = MagicMock()
     monkeypatch.setattr("pysyphe.actions._format_fct_name",
                         format_fct_name_mock)
     Action().get_name(action_side)
     assert format_fct_name_mock.called
Example #18
0
 def test_set_info_streamer_none():
     with pytest.raises(ActionException):
         Action().set_info_streamer(None)
Example #19
0
 def test_set_info_streamer():
     Action().set_info_streamer(InfoStreamer())
Example #20
0
 def test_init_with_list():
     action = Action()
     action2 = Action()
     ap = ActionsPipeline([action, action2])
     assert ap.actions[0] == action and ap.actions[1] == action2
Example #21
0
 def test_copy():
     a = Action(lambda: 10, lambda: -10)
     a.add_context_manager("action", MagicMock())
     a.add_context_manager("rollback", MagicMock())
     assert copy(a)
Example #22
0
 def test_simulate():
     Action(lambda: 10, lambda: -10).simulate()
Example #23
0
 def test_init():
     assert Action()
Example #24
0
 def test_init_2():
     assert Action(lambda: 10, lambda: -10)
Example #25
0
 def test_get_name_bad_side():
     with pytest.raises(ActionException):
         Action().get_name("bad_side")
Example #26
0
 def test_name():
     a = Action(lambda: 10)
     a.name = "yolo"
     assert a.name == "yolo"
Example #27
0
 def test_append(monkeypatch):
     monkeypatch.setattr(Action, "set_info_streamer", MagicMock())
     ap = ActionsPipeline()
     action = Action()
     ap.append(action)
     assert ap.actions[0] == action
Example #28
0
 def test_notify(monkeypatch, action_side, step, kwargs):
     send_info_mock = MagicMock()
     monkeypatch.setattr(InfoStreamer, "send_info", send_info_mock)
     kwargs = kwargs or {}
     Action(lambda: 10, lambda: 10).notify(action_side, step, **kwargs)
     assert send_info_mock.called
Example #29
0
 def test_set_name_bad_side():
     with pytest.raises(ActionException):
         Action().set_name("bad_side", "osef")
Example #30
0
 def test_rollback_name():
     a = Action(lambda: 10)
     a.rollback_name = "yolo"
     assert a.rollback_name == "yolo"