blob: f49d30f48d995d90c611c8f4ee9a4252f26b123b (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# SPDX-License-Identifier: CC0-1.0
# Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
#
# Available under the terms of Creative Commons Zero v1.0 Universal.
import sys
from pathlib import Path
import pytest
import pkgutil
import importlib
from tempfile import TemporaryDirectory
from typing import Iterable
here = Path(__file__).resolve().parent
sys.path.insert(0, str(here / 'src'))
@pytest.fixture(autouse=True)
def no_requests(monkeypatch):
"""Remove requests.sessions.Session.request for all tests."""
if importlib.util.find_spec("requests") is not None:
monkeypatch.delattr('requests.sessions.Session.request')
@pytest.fixture
def mock_subprocess_run(monkeypatch, request):
"""
Temporarily replace subprocess.run() with a function supplied through pytest
marker 'subprocess_run'.
The marker excepts 2 arguments:
* the module inside which the subprocess attribute should be mocked and
* a run() function to use.
"""
where, mocked_run = request.node.get_closest_marker('subprocess_run').args
class MockedSubprocess:
"""Minimal mocked version of the subprocess module."""
run = mocked_run
monkeypatch.setattr(where, 'subprocess', MockedSubprocess)
@pytest.fixture(autouse=True)
def no_gettext(monkeypatch, request):
"""
Make gettext return all strings untranslated unless we request otherwise.
"""
if request.node.get_closest_marker('enable_gettext'):
return
import hydrilla
modules_to_process = [hydrilla]
def add_child_modules(parent):
"""
Recursuvely collect all modules descending from 'parent' into an array.
"""
try:
load_paths = parent.__path__
except AttributeError:
return
for module_info in pkgutil.iter_modules(load_paths):
if module_info.name != '__main__':
__import__(f'{parent.__name__}.{module_info.name}')
modules_to_process.append(getattr(parent, module_info.name))
add_child_modules(getattr(parent, module_info.name))
add_child_modules(hydrilla)
for module in modules_to_process:
if hasattr(module, '_'):
monkeypatch.setattr(module, '_', lambda message: message)
@pytest.fixture
def tmpdir() -> Iterable[Path]:
"""
Provide test case with a temporary directory that will be automatically
deleted after the test.
"""
with TemporaryDirectory() as tmpdir:
yield Path(tmpdir)
|