blob: e41a61d8cfe80271647158266a8fa07cce2bdb5d (
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
|
# 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
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."""
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)
|