kopia lustrzana https://github.com/ctjacobs/pyqso
More unit testing.
rodzic
459322689a
commit
a09d5ab1ce
|
@ -89,11 +89,10 @@ class Logbook:
|
|||
opened = self.open(path=path)
|
||||
return opened
|
||||
|
||||
def open(self, widget=None, path=None, render=True):
|
||||
def open(self, widget=None, path=None):
|
||||
""" Open a logbook, and render all the logs within it.
|
||||
|
||||
:arg str path: An optional argument containing the database file location, if already known. If this is None, a file selection dialog will appear.
|
||||
:arg bool render: An optional argument to specify whether or not the logs should be rendered in the logbook. By default this is True, but is sometimes set to False for unit testing purposes.
|
||||
:returns: True if the logbook is successfully opened, and False otherwise.
|
||||
:rtype: bool
|
||||
"""
|
||||
|
@ -129,35 +128,34 @@ class Logbook:
|
|||
else:
|
||||
logging.debug("All logs retrieved successfully.")
|
||||
|
||||
if(render):
|
||||
logging.debug("Rendering logs...")
|
||||
# For rendering the logs. One treeview and one treeselection per Log.
|
||||
self.treeview = []
|
||||
self.treeselection = []
|
||||
self.sorter = []
|
||||
self.filter = []
|
||||
self.summary = Summary(self.application)
|
||||
self.blank = Blank(self.application)
|
||||
logging.debug("Rendering logs...")
|
||||
# For rendering the logs. One treeview and one treeselection per Log.
|
||||
self.treeview = []
|
||||
self.treeselection = []
|
||||
self.sorter = []
|
||||
self.filter = []
|
||||
self.summary = Summary(self.application)
|
||||
self.blank = Blank(self.application)
|
||||
|
||||
# FIXME: This is an unfortunate work-around. If the area around the "+/New Log" button
|
||||
# is clicked, PyQSO will change to an empty page. This signal is used to stop this from happening.
|
||||
self.notebook.connect("switch-page", self.on_switch_page)
|
||||
# FIXME: This is an unfortunate work-around. If the area around the "+/New Log" button
|
||||
# is clicked, PyQSO will change to an empty page. This signal is used to stop this from happening.
|
||||
self.notebook.connect("switch-page", self.on_switch_page)
|
||||
|
||||
for i in range(len(self.logs)):
|
||||
self.render_log(i)
|
||||
logging.debug("All logs rendered successfully.")
|
||||
for i in range(len(self.logs)):
|
||||
self.render_log(i)
|
||||
logging.debug("All logs rendered successfully.")
|
||||
|
||||
self.summary.update()
|
||||
self.application.toolbox.awards.count(self)
|
||||
self.summary.update()
|
||||
self.application.toolbox.awards.count(self)
|
||||
|
||||
context_id = self.application.statusbar.get_context_id("Status")
|
||||
self.application.statusbar.push(context_id, "Logbook: %s" % self.path)
|
||||
self.application.toolbar.set_logbook_button_sensitive(False)
|
||||
self.application.menu.set_logbook_item_sensitive(False)
|
||||
self.application.menu.set_log_items_sensitive(True)
|
||||
self.application.toolbar.filter_source.set_sensitive(True)
|
||||
context_id = self.application.statusbar.get_context_id("Status")
|
||||
self.application.statusbar.push(context_id, "Logbook: %s" % self.path)
|
||||
self.application.toolbar.set_logbook_button_sensitive(False)
|
||||
self.application.menu.set_logbook_item_sensitive(False)
|
||||
self.application.menu.set_log_items_sensitive(True)
|
||||
self.application.toolbar.filter_source.set_sensitive(True)
|
||||
|
||||
self.notebook.show_all()
|
||||
self.notebook.show_all()
|
||||
|
||||
else:
|
||||
logging.debug("Not connected to a logbook. No logs were opened.")
|
||||
|
@ -377,7 +375,7 @@ class Logbook:
|
|||
self.sorter.append(Gtk.TreeModelSort(model=self.filter[index]))
|
||||
self.sorter[index].set_sort_column_id(0, Gtk.SortType.ASCENDING)
|
||||
|
||||
self.treeview.append(Gtk.TreeView(self.sorter[index]))
|
||||
self.treeview.append(Gtk.TreeView(model=self.sorter[index]))
|
||||
self.treeview[index].set_grid_lines(Gtk.TreeViewGridLines.BOTH)
|
||||
self.treeview[index].connect("row-activated", self.edit_record_callback)
|
||||
self.treeselection.append(self.treeview[index].get_selection())
|
||||
|
@ -392,8 +390,8 @@ class Logbook:
|
|||
vbox.pack_start(sw, True, True, 0)
|
||||
|
||||
# Add a close button to the tab
|
||||
hbox = Gtk.HBox(False, 0)
|
||||
label = Gtk.Label(self.logs[index].name)
|
||||
hbox = Gtk.HBox(homogeneous=False, spacing=0)
|
||||
label = Gtk.Label(label=self.logs[index].name)
|
||||
hbox.pack_start(label, False, False, 0)
|
||||
hbox.show_all()
|
||||
|
||||
|
@ -516,8 +514,8 @@ class Logbook:
|
|||
page.set_name(new_log_name)
|
||||
|
||||
# ... and update the tab's label.
|
||||
hbox = Gtk.HBox(False, 0)
|
||||
label = Gtk.Label(new_log_name)
|
||||
hbox = Gtk.HBox(homogeneous=False, spacing=0)
|
||||
label = Gtk.Label(label=new_log_name)
|
||||
hbox.pack_start(label, False, False, 0)
|
||||
hbox.show_all()
|
||||
self.notebook.set_tab_label(page, hbox)
|
||||
|
|
|
@ -70,7 +70,7 @@ class Summary(object):
|
|||
if(have_config and config.has_option(section, option)):
|
||||
if(config.get("general", "show_yearly_statistics") == "True" and have_matplotlib):
|
||||
hbox = Gtk.HBox()
|
||||
label = Gtk.Label("Display statistics for year: ", halign=Gtk.Align.START)
|
||||
label = Gtk.Label(label="Display statistics for year: ", halign=Gtk.Align.START)
|
||||
hbox.pack_start(label, False, False, 6)
|
||||
year_select = Gtk.ComboBoxText()
|
||||
min_year, max_year = self.get_year_bounds()
|
||||
|
|
|
@ -25,19 +25,19 @@ except ImportError:
|
|||
import os
|
||||
from pyqso.logbook import *
|
||||
|
||||
|
||||
class TestLogbook(unittest.TestCase):
|
||||
|
||||
""" The unit tests for the Logbook class. """
|
||||
|
||||
def setUp(self):
|
||||
@mock.patch('pyqso.logbook.Logbook.filter_by_callsign')
|
||||
def setUp(self, mock_filter_by_callsign):
|
||||
""" Set up the Logbook object and connection to the test database needed for the unit tests. """
|
||||
|
||||
self.logbook = Logbook(application=mock.MagicMock())
|
||||
|
||||
# Open the test database file.
|
||||
path_to_test_database = os.path.join(os.path.realpath(os.path.dirname(__file__)), os.pardir, "res/test.db")
|
||||
opened = self.logbook.open(path=path_to_test_database, render=False)
|
||||
opened = self.logbook.open(path=path_to_test_database)
|
||||
assert(opened)
|
||||
assert(self.logbook.connection is not None)
|
||||
|
||||
|
@ -52,11 +52,25 @@ class TestLogbook(unittest.TestCase):
|
|||
closed = self.logbook.close()
|
||||
assert(closed)
|
||||
|
||||
def test_db_disconnect(self):
|
||||
""" Check that the logbook can disconnect from the database. """
|
||||
disconnected = self.logbook.db_disconnect()
|
||||
assert(disconnected)
|
||||
# Attempt to disconnect again. This shouldn't do anything.
|
||||
disconnected = self.logbook.db_disconnect()
|
||||
assert(disconnected)
|
||||
|
||||
def test_new(self):
|
||||
""" """
|
||||
#path_to_new_database = "Logbook.test_new.db"
|
||||
#opened = self.logbook.open(path=path_to_invalid_database)
|
||||
pass
|
||||
|
||||
@mock.patch('pyqso.auxiliary_dialogs.handle_gtk_dialog')
|
||||
def test_open_invalid_logbook(self, mock_handle_gtk_dialog):
|
||||
""" Open an invalid database file (comprising only one line of plain text) and check that an error occurs. """
|
||||
path_to_invalid_database = os.path.join(os.path.realpath(os.path.dirname(__file__)), os.pardir, "res/invalid.db")
|
||||
opened = self.logbook.open(path=path_to_invalid_database, render=False)
|
||||
opened = self.logbook.open(path=path_to_invalid_database)
|
||||
assert(not opened)
|
||||
assert(self.logbook.logs is None)
|
||||
|
||||
|
@ -103,5 +117,20 @@ class TestLogbook(unittest.TestCase):
|
|||
assert(self.logbook.get_log_index(name="test2") == 1)
|
||||
assert(self.logbook.get_log_index(name="helloworld") is None)
|
||||
|
||||
@mock.patch('pyqso.logbook.Logbook.render_log')
|
||||
@mock.patch('pyqso.auxiliary_dialogs.handle_gtk_dialog')
|
||||
@mock.patch('pyqso.logbook.LogNameDialog')
|
||||
def test_new_log(self, mock_LogNameDialog, mock_handle_gtk_dialog, mock_render_log):
|
||||
""" Start off with an empty logbook and check that a new log can successfully be added. """
|
||||
f = open("Logbook.test_new_log.db", "w").close()
|
||||
opened = self.logbook.open(path="Logbook.test_new_log.db")
|
||||
self.logbook.summary = mock.MagicMock()
|
||||
assert(opened)
|
||||
mock_LogNameDialog().dialog.run.return_value = Gtk.ResponseType.OK
|
||||
mock_LogNameDialog().name = "my_new_log"
|
||||
self.logbook.new_log()
|
||||
assert(len(self.logbook.logs) == 1)
|
||||
assert(self.logbook.logs[0].name == "my_new_log")
|
||||
|
||||
if(__name__ == '__main__'):
|
||||
unittest.main()
|
||||
|
|
Ładowanie…
Reference in New Issue