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)