Source code for unit.wxgui.dialogs.slideshow.controller

# 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 os

from unittest.mock import Mock

from timelinelib.calendar.gregorian.timetype import GregorianTimeType
from timelinelib.canvas.data.memorydb.db import MemoryDB
from timelinelib.canvas.data.event import Event
from timelinelib.test.cases.tmpdir import TmpDirTestCase
from timelinelib.test.utils import human_time_to_gregorian
from timelinelib.wxgui.dialogs.slideshow.controller import SlideshowDialogController
from timelinelib.wxgui.dialogs.slideshow.view import SlideshowDialog


FILE = "foo.txt"


[docs]class describe_slideshow_dialog_controller(TmpDirTestCase):
[docs] def test_is_initialized(self): self.assertEqual(self.db, self.controller._db) self.assertEqual(self.canvas, self.controller._canvas) self.assertFalse(self.controller._text_transformer is None)
[docs] def test_user_can_select_target_directory(self): self.simuate_user_selects_directory() self.view.ChangeDir.assert_called_with()
[docs] def test_target_directory_is_mandatory(self): self.view.GetTargetDir.return_value = "" self.simuate_user_clicks_ok() self.view.InvalidTargetDir.assert_called_with( "⟪The html pages directory is mandatory⟫" )
[docs] def test_creation_of_target_directory_can_be_rejected(self): self.view.GetTargetDir.return_value = self.PATH self.view.GetUserAck.return_value = False self.simuate_user_clicks_ok() self.assertFalse(os.path.exists(self.PATH)) self.assertEqual(0, self.view.EndModalOk.call_count)
[docs] def test_creation_of_target_directory_can_be_accepted(self): vp = Mock() vp.filter_events.return_value = [] self.canvas.GetViewProperties.return_value = vp self.view.GetTargetDir.return_value = self.PATH self.view.GetUserAck.return_value = True self.simuate_user_clicks_ok() self.assertTrue(os.path.exists(self.PATH)) self.view.EndModalOk.assert_called_with()
[docs] def test_overwrite_of_target_directory_can_be_rejected(self): vp = Mock() vp.filter_events.return_value = [] self.canvas.GetViewProperties.return_value = vp os.mkdir(self.PATH) f = open(os.path.join(self.PATH, FILE), "w") f.close() self.view.GetTargetDir.return_value = self.PATH self.view.GetUserAck.return_value = False self.simuate_user_clicks_ok() self.assertTrue(os.path.exists(self.PATH)) self.assertEqual(0, self.view.EndModalOk.call_count)
[docs] def test_overwrite_of_target_directory_can_be_accepted(self): event = Event().update( start_time=human_time_to_gregorian("11 Jul 2014"), end_time=human_time_to_gregorian("12 Jul 2014"), text="a day in my life" ) vp = Mock() vp.filter_events.return_value = [event, ] self.canvas.GetViewProperties.return_value = vp os.mkdir(self.PATH) f = open(os.path.join(self.PATH, FILE), "w") f.close() self.view.GetTargetDir.return_value = self.PATH self.view.GetUserAck.return_value = True self.simuate_user_clicks_ok() self.assertTrue(os.path.exists(self.PATH)) self.view.DisplayStartPage.assert_called_with(os.path.join(self.PATH, "page_1.html")) self.view.EndModalOk.assert_called_with()
[docs] def simulate_dialog_init(self, db, canvas): self.controller.on_init(db, canvas)
[docs] def simuate_user_selects_directory(self): evt = Mock() self.controller.on_change_dir(evt)
[docs] def simuate_user_clicks_ok(self): evt = Mock() self.controller.on_start(evt)
[docs] def setUp(self): TmpDirTestCase.setUp(self) self.db = Mock(MemoryDB) self.db.time_type = GregorianTimeType() self.start_time = human_time_to_gregorian("1 Jan 2010") self.canvas = Mock() self.view = self._mock_view() self.controller = SlideshowDialogController(self.view) self.simulate_dialog_init(self.db, self.canvas) self.PATH = self.get_tmp_path("zyx")
def _mock_view(self): view = Mock(SlideshowDialog) view.AllEventsSelected.return_value = False view.GetTargetDir.return_value = "" return view