From f6e945805e2adeb3db0632147e7e6df613dd9840 Mon Sep 17 00:00:00 2001 From: Alex Pyrgiotis Date: Tue, 4 Jul 2023 17:04:36 +0300 Subject: [PATCH] tests: Add a Pytest fixture for Updater Add a Pytest fixture that returns an UpdaterThread instance which has its own unique settings directory. Note that the UpdaterThread instance needs to be slightly nerfed, so that it doesn't rely on Qt functionality or any isolation providers. --- tests/gui/__init__.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/gui/__init__.py diff --git a/tests/gui/__init__.py b/tests/gui/__init__.py new file mode 100644 index 0000000..c005824 --- /dev/null +++ b/tests/gui/__init__.py @@ -0,0 +1,40 @@ +from pathlib import Path +from typing import Optional +from unittest import mock + +import pytest +from pytest import MonkeyPatch +from pytest_mock import MockerFixture + +from dangerzone import util +from dangerzone.gui import Application +from dangerzone.gui.logic import DangerzoneGui +from dangerzone.gui.updater import UpdaterThread +from dangerzone.isolation_provider.dummy import Dummy + + +def generate_isolated_updater( + tmp_path: Path, + monkeypatch: MonkeyPatch, + app_mocker: MockerFixture, +) -> UpdaterThread: + """Generate an Updater class with its own settings.""" + app = app_mocker.MagicMock() + + dummy = Dummy() + # XXX: We can monkey-patch global state without wrapping it in a context manager, or + # worrying that it will leak between tests, for two reasons: + # + # 1. Parallel tests in PyTest take place in different processes. + # 2. The monkeypatch fixture tears down the monkey-patch after each test ends. + monkeypatch.setattr(util, "get_config_dir", lambda: tmp_path) + dangerzone = DangerzoneGui(app, isolation_provider=dummy) + updater = UpdaterThread(dangerzone) + return updater + + +@pytest.fixture +def updater( + tmp_path: Path, monkeypatch: MonkeyPatch, mocker: MockerFixture +) -> UpdaterThread: + return generate_isolated_updater(tmp_path, monkeypatch, mocker)