Exemplo n.º 1
0
def test_manager_will_export_data_into_the_file():
    with tempfile.NamedTemporaryFile(mode="r+",
                                     **TEMPFILE_OPTIONS) as import_file:
        with tempfile.NamedTemporaryFile(mode="w+",
                                         **TEMPFILE_OPTIONS,
                                         delete=False) as export_file:  # NOQA

            for _ in range(3):
                state = generate_state_data()
                state_dump = json.dumps(state) + TEMPFILE_OPTIONS["newline"]
                import_file.write(state_dump)

            import_file.seek(0)
            manager = HistoryManager()
            manager.ImportHistoryFromFile(import_file)

            assert manager.SavedStates == 3

            manager.ExportHistoryToFile(export_file)
            export_file.close()

            with open(export_file.name) as result_file:
                assert len(result_file.read().splitlines()) == 3

            export_file._closer.delete = True
            export_file._closer.close()
Exemplo n.º 2
0
def test_get_state_to_history_manager():
    manager = HistoryManager()
    states_amount = 10
    fill_history_manager(manager, states_amount)

    assert manager.SavedStates == states_amount
    assert manager.GetState(0) == manager._data[0].GetDump()
Exemplo n.º 3
0
def test_removing_old_state_wont_be_applied_when_history_manager_is_empty():
    manager = HistoryManager()

    assert manager.SavedStates == 0

    manager.RemoveOldState()
    assert manager.SavedStates == 0
Exemplo n.º 4
0
def test_get_state_raises_an_index_error_for_too_big_index():
    manager = HistoryManager()
    states_amount = 10
    fill_history_manager(manager, states_amount)

    assert manager.SavedStates == states_amount
    with pytest.raises(IndexError):
        manager.GetState(states_amount + 1)
Exemplo n.º 5
0
def test_add_new_state():
    manager = HistoryManager()
    new_state = generate_state_data()

    assert manager.SavedStates == 0

    manager.AddState(new_state)
    assert manager.GetState(0) == new_state
Exemplo n.º 6
0
def test_manager_wont_import_data_from_the_closed_file():
    with tempfile.NamedTemporaryFile(mode="r+",
                                     **TEMPFILE_OPTIONS) as import_file:
        import_file.close()
        manager = HistoryManager()
        manager.ImportHistoryFromFile(import_file)

        assert manager.SavedStates == 0
Exemplo n.º 7
0
def test_remove_old_state():
    manager = HistoryManager()
    states_amount = 10
    fill_history_manager(manager, states_amount)

    assert manager.SavedStates == states_amount

    manager.RemoveOldState()
    assert manager.SavedStates == states_amount - 1
Exemplo n.º 8
0
def test_add_new_state_with_removing_old_state():
    manager = HistoryManager()
    fill_history_manager(manager, manager.MAX_STATES)

    assert manager.SavedStates == manager.MAX_STATES

    new_state = generate_state_data()
    oldest_state = manager._data[-1]

    manager.AddState(new_state)
    assert manager.SavedStates == manager.MAX_STATES
    assert oldest_state not in manager._data
    assert manager.GetState(0) == new_state
Exemplo n.º 9
0
def test_manager_will_import_data_from_a_file():
    with tempfile.NamedTemporaryFile(mode="r+",
                                     **TEMPFILE_OPTIONS) as import_file:
        for _ in range(3):
            state = generate_state_data()
            state_dump = json.dumps(state) + TEMPFILE_OPTIONS["newline"]
            import_file.write(state_dump)

        import_file.seek(0)
        manager = HistoryManager()
        manager.ImportHistoryFromFile(import_file)

        assert manager.SavedStates == 3
Exemplo n.º 10
0
    def __init__(self, parent, app_directory=None, *args, **kwargs):
        super(HistoryPanel, self).__init__(parent, *args, **kwargs)
        self.app_directory = app_directory

        self.grid = wx.GridBagSizer(DEFAULT_VERTICAL_GAP,
                                    DEFAULT_HORIZONTAL_GAP)
        self.search_input = None
        self.history_entries = None
        self.history_manager = HistoryManager(self.app_directory)

        self.InitUI()
        self.BindUI()
        self.ShowFullHistory()
Exemplo n.º 11
0
def test_manager_will_export_data_into_the_default_file():
    with tempfile.TemporaryDirectory() as app_directory:
        manager = HistoryManager(app_directory)

        for _ in range(3):
            state_data = generate_state_data()
            manager.AddState(state_data)

        assert manager.SavedStates == 3

        manager.ExportHistoryToDefaultFile()

        with open(manager._history_filepath) as result_file:
            assert len(result_file.read().splitlines()) == 3
Exemplo n.º 12
0
def test_new_history_manager_is_empty():
    manager = HistoryManager()
    assert manager.SavedStates == 0
Exemplo n.º 13
0
class HistoryPanel(wx.Panel):
    STATE_STRING_REPR = "{index} Exchange={exchange}; routing_key={routing_key}"
    MINIMAL_COLUMN_WIDTH = 50

    def __init__(self, parent, app_directory=None, *args, **kwargs):
        super(HistoryPanel, self).__init__(parent, *args, **kwargs)
        self.app_directory = app_directory

        self.grid = wx.GridBagSizer(DEFAULT_VERTICAL_GAP,
                                    DEFAULT_HORIZONTAL_GAP)
        self.search_input = None
        self.history_entries = None
        self.history_manager = HistoryManager(self.app_directory)

        self.InitUI()
        self.BindUI()
        self.ShowFullHistory()

    def InitUI(self):
        self.search_input = wx.SearchCtrl(self)
        self.search_input.ShowCancelButton(True)
        self.grid.Add(self.search_input,
                      pos=(0, 0),
                      flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT,
                      border=DEFAULT_GAP)

        self.history_entries = ResizableListCtrl(
            self,
            columns=[
                "Old requests",
            ],
            style=ResizableListCtrl.DEFAULT_LIST_CTRL_STYLE | wx.LC_NO_HEADER)
        size = self.history_entries.GetSize()
        size.width = self.MINIMAL_COLUMN_WIDTH
        self.history_entries.SetMinSize(size)
        self.grid.Add(self.history_entries,
                      pos=(1, 0),
                      flag=wx.EXPAND | wx.ALL,
                      border=DEFAULT_GAP)

        self.grid.AddGrowableCol(0)
        self.grid.AddGrowableRow(1)
        self.SetSizer(self.grid)

    def BindUI(self):
        self.search_input.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN,
                               self.OnSearchByKeyword)
        self.search_input.Bind(wx.EVT_SEARCHCTRL_CANCEL_BTN,
                               self.OnCancelSearchByKeyword)
        self.history_entries.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnLoadState)
        pub.subscribe(self.OnSaveState, SAVE_STATE_TOPIC)
        pub.subscribe(self.OnCloseApplication, CLOSE_APPLICATION_TOPIC)

    def RefreshListCtrl(self, indices):
        self.history_entries.DeleteAllItems()

        saved_states_count = self.history_manager.SavedStates
        for index in indices:
            state = self.history_manager.GetState(index)
            formatted_state = self.STATE_STRING_REPR.format(
                index=saved_states_count - index,
                exchange=state["request_exchange"],
                routing_key=state["request_routing_key"])
            self.history_entries.InsertItem(index, formatted_state)

    def ShowFullHistory(self):
        matched_indices = range(self.history_manager.SavedStates)
        self.RefreshListCtrl(matched_indices)

    def GetStateIndicesByKeyword(self, keyword):
        matched_state_indices = []

        for index in range(self.history_manager.SavedStates):
            state = self.history_manager.GetState(index)
            match_in_exchange = keyword in state["request_exchange"]
            match_in_routing_key = keyword in state["request_routing_key"]
            if match_in_exchange or match_in_routing_key:
                matched_state_indices.append(index)

        return matched_state_indices

    def OnSaveState(self, message):
        self.history_manager.AddState(message)
        self.ShowFullHistory()

    def OnLoadState(self, event):
        index = self.history_entries.GetFirstSelected()
        state = self.history_manager.GetState(index)
        pub.sendMessage(LOAD_STATE_TOPIC, message=state)
        event.Skip()

    def OnSearchByKeyword(self, event):
        keyword = event.GetString().strip()

        if keyword in [wx.EmptyString, ""]:
            self.ShowFullHistory()
            event.Skip()
            return

        matched_state_indices = self.GetStateIndicesByKeyword(keyword)
        self.RefreshListCtrl(matched_state_indices)
        event.Skip()

    def OnCancelSearchByKeyword(self, event):
        self.search_input.Clear()
        self.ShowFullHistory()
        event.Skip()

    def OnCloseApplication(self, message):
        self.history_manager.ExportHistoryToDefaultFile()