From 72df97fa7b9f56dd3e2adc4ac2f8752cded906db Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Tue, 9 Jun 2020 12:00:00 +0000
Subject: [PATCH] Huge revision of application tests

---
 briar-gtk/tests/briar_gtk/test_application.py | 128 ++++++++++++++----
 pytest.ini                                    |   7 -
 2 files changed, 98 insertions(+), 37 deletions(-)
 delete mode 100644 pytest.ini

diff --git a/briar-gtk/tests/briar_gtk/test_application.py b/briar-gtk/tests/briar_gtk/test_application.py
index ddb1df6..b19cbec 100644
--- a/briar-gtk/tests/briar_gtk/test_application.py
+++ b/briar-gtk/tests/briar_gtk/test_application.py
@@ -2,55 +2,123 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 # License-Filename: LICENSE.md
 
-from unittest.mock import Mock
-
 import pytest
 
-from briar_wrapper.api import Api
-
 from briar_gtk.application import Application
-from briar_gtk.define import APPLICATION_NAME, APPLICATION_STYLING_PATH
-from briar_gtk.define import BRIAR_HEADLESS_JAR
-from briar_gtk.window import Window
 
+MODULE = "briar_gtk.application.%s"
+
+
+def test_application_actions_at_init(mocker):
+    application_actions_mock = mocker.patch(
+        MODULE % "ApplicationActions")
+
+    application = Application()
+
+    application_actions_mock.assert_called_once_with(application)
+
+
+def test_application_name_at_init(mocker):
+    application_name_mock = mocker.patch(
+        MODULE % "GLib.set_application_name")
+    prgname_mock = mocker.patch(
+        MODULE % "GLib.set_prgname")
+
+    application = Application()
+
+    application_name_mock.assert_called_once_with("Briar")
+    prgname_mock.assert_called_once_with("Briar")
+
+
+def test_api_at_startup(mocker):
+    api_mock = mocker.patch(MODULE % "Api")
+
+    Application().do_startup()
+
+    api_mock.assert_called_once_with("/app/briar/briar-headless.jar")
+
+
+def test_css_provider_at_startup(mocker):
+    css_provider_mock = mocker.patch(MODULE % "Gtk.CssProvider")
+
+    Application().do_startup()
+
+    css_provider_mock.assert_called_once()
+
+
+def test_handy_at_startup(mocker):
+    handy_mock = mocker.patch(MODULE % "Handy.init")
+
+    Application().do_startup()
+
+    handy_mock.assert_called_once()
+
+
+def test_startup_at_startup(mocker):
+    do_startup_mock = mocker.patch(MODULE % "Gtk.Application.do_startup")
+
+    application = Application()
+
+    application.do_startup()
 
-def test_do_startup(mocker):
-    do_startup_mock = mocker.patch("gi.repository.Gtk.Application.do_startup")
-    _setup_styling_mock = mocker.patch(
-        "briar_gtk.application.Application._setup_styling")
-    _setup_api_mock = mocker.patch(
-        "briar_gtk.application.Application._setup_api")
+    do_startup_mock.assert_called_once_with(application)
+
+
+def test_style_context_at_startup(mocker):
+    style_context_mock = mocker.patch(MODULE % "Gtk.StyleContext")
 
     Application().do_startup()
 
-    do_startup_mock.assert_called_once()
-    _setup_styling_mock.assert_called_once_with(APPLICATION_STYLING_PATH)
-    _setup_api_mock.assert_called_once()
+    style_context_mock.assert_called_once()
 
 
-def test_do_activate(mocker):
-    _setup_window_mock = mocker.patch(
-        "briar_gtk.application.Application._setup_window")
+def test_window_at_activate(mocker):
+    window_mock = mocker.patch(MODULE % "Window")
 
     Application().do_activate()
 
-    _setup_window_mock.assert_called_once()
+    window_mock.assert_called_once()
 
 
-def test_do_shutdown(mocker):
-    api_mock = mocker.patch("briar_wrapper.api.Api")
-    api_stop_mock = mocker.patch("briar_wrapper.api.Api.stop")
-    window_mock = mocker.patch("briar_gtk.window.Window")
-    window_hide_mock = mocker.patch("briar_gtk.window.Window.hide")
-    do_shutdown_mock = mocker.patch(
-        "gi.repository.Gio.Application.do_shutdown")
+def test_already_window_at_activate(mocker):
+    gtk_window_mock = mocker.patch(MODULE % "Window")
+    window_mock = mocker.MagicMock()
+
+    application = Application()
+    application.window = window_mock
+
+    application.do_activate()
+
+    window_mock.present.assert_called_once()
+    assert gtk_window_mock.called is False
+
+
+def test_api_stop_at_shutdown(mocker):
+    api_mock = mocker.patch(MODULE % "Api")
 
     application = Application()
     application.api = api_mock
+    application.window = mocker.MagicMock()
+
+    application.do_shutdown()
+
+    api_mock.stop.assert_called_once()
+
+
+def test_window_hide_at_shutdown(mocker):
+    window_mock = mocker.patch(MODULE % "Window")
+
+    application = Application()
+    application.api = mocker.MagicMock()
     application.window = window_mock
 
     application.do_shutdown()
 
-    api_stop_mock.assert_called_once()
-    window_hide_mock.assert_called_once()
-    do_shutdown_mock.assert_called_once()
+    window_mock.hide.assert_called_once()
+
+
+@pytest.fixture(autouse=True)
+def gi_dependencies(mocker):
+    gi_dependencies = ('Gdk', 'Gio', 'GLib', 'Gtk', 'Handy')
+    for dependency in gi_dependencies:
+        mocker.patch(MODULE % dependency)
diff --git a/pytest.ini b/pytest.ini
deleted file mode 100644
index ee1ffab..0000000
--- a/pytest.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright (c) 2019 Nico Alt
-# SPDX-License-Identifier: AGPL-3.0-only
-# License-Filename: LICENSE.md
-
-[pytest]
-filterwarnings =
-    ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working:DeprecationWarning
-- 
GitLab