mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-04-28 09:52:37 +02:00
They ideally should find their way by themselves. > You don’t need to import the fixture you want to use in a test, > it automatically gets discovered by pytest. The discovery of fixture > functions starts at test classes, then test modules, then conftest.py > files and finally builtin and third party plugins.> > > — [pytest docs](https://docs.pytest.org/en/4.6.x/fixture.html#conftest-py-sharing-fixture-functions)
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
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 get_qt_app() -> Application:
|
|
if Application.instance() is None: # type: ignore [call-arg]
|
|
return Application()
|
|
else:
|
|
return Application.instance() # type: ignore [call-arg]
|
|
|
|
|
|
def generate_isolated_updater(
|
|
tmp_path: Path,
|
|
monkeypatch: MonkeyPatch,
|
|
app_mocker: Optional[MockerFixture] = None,
|
|
) -> UpdaterThread:
|
|
"""Generate an Updater class with its own settings."""
|
|
if app_mocker:
|
|
app = app_mocker.MagicMock()
|
|
else:
|
|
app = get_qt_app()
|
|
|
|
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)
|
|
|
|
|
|
@pytest.fixture
|
|
def qt_updater(tmp_path: Path, monkeypatch: MonkeyPatch) -> UpdaterThread:
|
|
return generate_isolated_updater(tmp_path, monkeypatch)
|