Source code for unit.wxgui.frames.mainframe.alertcontroller

# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Timeline is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Timeline.  If not, see <http://www.gnu.org/licenses/>.


import wx

from unittest.mock import Mock

from timelinelib.calendar.gregorian.time import GregorianDelta
from timelinelib.calendar.gregorian.timetype import GregorianTimeType
from timelinelib.canvas.data.memorydb.db import MemoryDB
from timelinelib.test.cases.unit import UnitTestCase
from timelinelib.test.utils import an_event
from timelinelib.wxgui.frames.mainframe.mainframe import AlertController


[docs]class describe_alert_controller(UnitTestCase):
[docs] def test_display_events_alerts(self): def assert_prequisites(): self.assertFalse(self.event.get_data("alert") is None) def assert_dialog_calls(dlg): expected_text = "Trigger time: %s\n\nEvent: %s\n\nTime to go" % ( self.now, self.event.get_label(GregorianTimeType())) dlg.SetText.assert_called_with(expected_text) dlg.SetWindowStyleFlag.assert_called_with(wx.STAY_ON_TOP) dlg.ShowModal.assert_called_with() dlg.Destroy.assert_called_with() def assert_event_data(): self.assertTrue(self.event.get_data("alert") is None) dlg = self.a_dialog_mock() assert_prequisites() self.controller._display_events_alerts_dialogs( [self.event, an_event()], GregorianTimeType(), dialog=dlg ) assert_dialog_calls(dlg) assert_event_data()
[docs] def test_pytime_has_expired(self): self.given_early_pytimes() self.given_controller_time_type(GregorianTimeType()) expired = self.controller._time_has_expired(self.tm) self.assertTrue(expired)
[docs] def test_pytime_has_not_expired(self): self.given_late_pytimes() expired = self.controller._time_has_expired(self.tm) self.assertFalse(expired)
[docs] def a_dialog_mock(self): dlg = Mock() dlg.GetWindowStyleFlag.return_value = 0 return dlg
[docs] def given_early_pytimes(self): self.given_pytime_now() self.given_pytime_earlier() self.given_controller_time_type(GregorianTimeType()) self.alert = (self.now, "Time to go")
[docs] def given_late_pytimes(self): self.given_pytime_now() self.given_pytime_later() self.given_controller_time_type(GregorianTimeType()) self.alert = (self.now, "Time to go")
[docs] def given_pytime_now(self): self.now = GregorianTimeType().now()
[docs] def given_pytime_later(self): self.tm = self.now + GregorianDelta.from_days(1)
[docs] def given_pytime_earlier(self): self.tm = self.now + GregorianDelta.from_days(-1)
[docs] def given_controller_time_type(self, time_type): self.controller.time_type = time_type
[docs] def setUp(self): self.now = GregorianTimeType().now() self.alert = (self.now, "Time to go") self.db = MemoryDB() self.event = an_event() self.event.set_data('alert', self.alert) self.event.db = self.db self.main_frame = Mock() self.controller = AlertController(self.main_frame)