From 5f49ed79c29778d2b6e067def218d063dc309600 Mon Sep 17 00:00:00 2001 From: Nico Alt <nicoalt@posteo.org> Date: Fri, 4 Oct 2019 11:07:07 +0200 Subject: [PATCH] Add unit tests for toolbar --- src/briar/gtk/toolbar.py | 21 ++++++++++---- tests/briar/gtk/test_toolbar.py | 50 +++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 tests/briar/gtk/test_toolbar.py diff --git a/src/briar/gtk/toolbar.py b/src/briar/gtk/toolbar.py index 22fb2b0..f65c147 100644 --- a/src/briar/gtk/toolbar.py +++ b/src/briar/gtk/toolbar.py @@ -8,16 +8,17 @@ from gi.repository import Gtk +from briar.gtk.define import APPLICATION_NAME + class Toolbar(Gtk.HeaderBar): + TOOLBAR_UI = "/app/briar/gtk/ui/toolbar_start.ui" + def __init__(self): super().__init__() - self._builder = Gtk.Builder() - self._builder.add_from_resource("/app/briar/gtk/ui/toolbar_start.ui") - toolbar_start = self._builder.get_object("toolbar_start") - self.set_title("Briar") - self.pack_start(toolbar_start) + self._setup_builder() + self._setup_toolbar() def show_back_button(self, show, callback=None): back_button = self._builder.get_object("back_button") @@ -28,3 +29,13 @@ class Toolbar(Gtk.HeaderBar): raise Exception("Callback needed when showing back button") back_button.show() back_button.connect("clicked", callback) + + def _setup_builder(self): + self._builder = Gtk.Builder() + + def _setup_toolbar(self): + self.set_title(APPLICATION_NAME) + + self._builder.add_from_resource(self.TOOLBAR_UI) + toolbar_start = self._builder.get_object("toolbar_start") + self.pack_start(toolbar_start) diff --git a/tests/briar/gtk/test_toolbar.py b/tests/briar/gtk/test_toolbar.py new file mode 100644 index 0000000..065101a --- /dev/null +++ b/tests/briar/gtk/test_toolbar.py @@ -0,0 +1,50 @@ +# Copyright (c) 2019 Nico Alt +# SPDX-License-Identifier: AGPL-3.0-only +# License-Filename: LICENSE.md + +import pytest +from unittest.mock import Mock + +from briar.gtk.toolbar import Toolbar + + +def test_show_back_button(mocker): + get_object_mock = mocker.patch("gi.repository.Gtk.Builder.get_object") + back_button_mock = get_object_mock.return_value + callback = Mock() + mocker.patch("briar.gtk.toolbar.Toolbar._setup_toolbar") + + Toolbar().show_back_button(True, callback) + + get_object_mock.assert_called_once_with("back_button") + back_button_mock.hide.assert_not_called() + back_button_mock.show.assert_called_once() + back_button_mock.connect.assert_called_once() + + +def test_show_back_button_without_callback(mocker): + get_object_mock = mocker.patch("gi.repository.Gtk.Builder.get_object") + back_button_mock = get_object_mock.return_value + mocker.patch("briar.gtk.toolbar.Toolbar._setup_toolbar") + + with pytest.raises(Exception, + match="Callback needed when showing back button"): + Toolbar().show_back_button(True) + + get_object_mock.assert_called_once_with("back_button") + back_button_mock.hide.assert_not_called() + back_button_mock.show.assert_not_called() + back_button_mock.connect.assert_not_called() + + +def test_hide_back_button(mocker): + get_object_mock = mocker.patch("gi.repository.Gtk.Builder.get_object") + back_button_mock = get_object_mock.return_value + mocker.patch("briar.gtk.toolbar.Toolbar._setup_toolbar") + + Toolbar().show_back_button(False) + + get_object_mock.assert_called_once_with("back_button") + back_button_mock.hide.assert_called_once() + back_button_mock.show.assert_not_called() + back_button_mock.connect.assert_not_called() -- GitLab