Skip to content

Commit 5b9cf94

Browse files
committed
fixes tsts
1 parent 9d69b0d commit 5b9cf94

File tree

2 files changed

+62
-87
lines changed

2 files changed

+62
-87
lines changed

packages/service-library/src/servicelib/aiohttp/application_setup.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,9 @@ def _setup_metadata() -> SetupMetadataDict:
302302

303303
def decorator(setup_func: _SetupFunc) -> _SetupFunc:
304304

305-
assert setup_func.__name__.startswith( # nosec
306-
"setup_"
307-
), f"Rename '{setup_func.__name__}' start with 'setup_$(plugin-name)'"
305+
assert ( # nosec
306+
"setup_" in setup_func.__name__
307+
), f"Rename '{setup_func.__name__}' like 'setup_$(plugin-name)'"
308308

309309
@functools.wraps(setup_func)
310310
@ensure_single_setup(module_name, logger=logger)

packages/service-library/tests/aiohttp/test_application_setup.py

Lines changed: 59 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# pylint: disable=unused-variable
66

77

8-
from collections.abc import Callable
8+
import logging
99

1010
import pytest
1111
from aiohttp import web
@@ -23,7 +23,8 @@
2323

2424
@pytest.fixture
2525
def mock_logger(mocker: MockerFixture) -> MockType:
26-
return mocker.patch("logging.getLogger", autospec=True)
26+
logger_mock: MockType = mocker.create_autospec(logging.Logger, instance=True)
27+
return logger_mock
2728

2829

2930
@pytest.fixture
@@ -42,116 +43,95 @@ def app(app_config: dict) -> web.Application:
4243
return _app
4344

4445

45-
@pytest.fixture
46-
def create_setup_bar() -> Callable[[web.Application], bool]:
47-
@app_module_setup("package.bar", ModuleCategory.ADDON)
48-
def setup_bar(app: web.Application) -> bool:
46+
def test_setup_config_enabled(app_config: dict, app: web.Application):
47+
48+
@app_module_setup(
49+
"package.zee",
50+
ModuleCategory.ADDON,
51+
# legacy support for config_enabled
52+
config_enabled="main.zee_enabled",
53+
)
54+
def setup_zee(app: web.Application, arg) -> bool:
55+
assert arg
4956
return True
5057

51-
return setup_bar
58+
assert setup_zee(app, 1)
5259

60+
assert setup_zee.metadata()["config_enabled"] == "main.zee_enabled"
61+
app_config["main"]["zee_enabled"] = False
5362

54-
@pytest.fixture
55-
def create_setup_foo(mock_logger: MockType) -> Callable[[web.Application], bool]:
56-
@app_module_setup("package.foo", ModuleCategory.ADDON, logger=mock_logger)
57-
def setup_foo(app: web.Application, *, raise_skip: bool = False) -> bool:
58-
if raise_skip:
59-
raise SkipModuleSetupError(reason="explicit skip")
60-
return True
63+
assert not setup_zee(app, 2)
6164

62-
return setup_foo
6365

66+
def test_setup_dependencies(app: web.Application):
6467

65-
@pytest.fixture
66-
def create_setup_zee() -> Callable[[web.Application, object, int], bool]:
67-
@app_module_setup(
68-
"package.zee", ModuleCategory.ADDON, config_enabled="main.zee_enabled"
69-
)
70-
def setup_zee(app: web.Application, arg1, kargs=55) -> bool:
68+
@app_module_setup("package.foo", ModuleCategory.ADDON)
69+
def setup_foo(app: web.Application) -> bool:
7170
return True
7271

73-
return setup_zee
74-
75-
76-
@pytest.fixture
77-
def create_setup_needs_foo() -> Callable[[web.Application, str, int], bool]:
7872
@app_module_setup(
7973
"package.needs_foo",
8074
ModuleCategory.SYSTEM,
8175
depends=[
76+
# This module needs foo to be setup first
8277
"package.foo",
8378
],
8479
)
85-
def _setup_needs_foo(app: web.Application, arg1: str, kargs: int = 55) -> bool:
80+
def setup_needs_foo(app: web.Application) -> bool:
8681
return True
8782

88-
return _setup_needs_foo
89-
90-
91-
def setup_basic(app: web.Application) -> bool:
92-
return True
93-
94-
95-
def setup_that_raises(app: web.Application) -> bool:
96-
error_msg = "Setup failed"
97-
raise ValueError(error_msg)
98-
99-
100-
def test_setup_config_enabled(
101-
app_config: dict, app: web.Application, create_setup_zee: Callable
102-
):
103-
setup_zee = create_setup_zee()
104-
105-
assert setup_zee(app, 1)
106-
assert setup_zee.metadata()["config_enabled"] == "main.zee_enabled"
107-
app_config["main"]["zee_enabled"] = False
108-
assert not setup_zee(app, 2)
109-
110-
111-
def test_setup_dependencies(
112-
app: web.Application,
113-
create_setup_needs_foo: Callable,
114-
create_setup_foo: Callable,
115-
) -> None:
116-
setup_needs_foo = create_setup_needs_foo()
117-
setup_foo = create_setup_foo()
118-
83+
# setup_foo is not called yet
11984
with pytest.raises(DependencyError):
120-
setup_needs_foo(app, "1")
85+
setup_needs_foo(app)
12186

122-
assert setup_foo(app, "1")
123-
assert setup_needs_foo(app, "2")
87+
# ok
88+
assert setup_foo(app)
89+
assert setup_needs_foo(app)
12490

91+
# meta
12592
assert setup_needs_foo.metadata()["dependencies"] == [
12693
setup_foo.metadata()["module_name"],
12794
]
12895

12996

130-
def test_marked_setup(
131-
app_config: dict, app: web.Application, create_setup_foo: Callable
132-
):
133-
setup_foo = create_setup_foo()
97+
def test_marked_setup(app_config: dict, app: web.Application):
98+
@app_module_setup("package.foo", ModuleCategory.ADDON)
99+
def setup_foo(app: web.Application) -> bool:
100+
return True
134101

135-
assert setup_foo(app, 1)
102+
assert setup_foo(app)
136103
assert setup_foo.metadata()["module_name"] == "package.foo"
137104
assert is_setup_completed(setup_foo.metadata()["module_name"], app)
138105

139106
app_config["foo"]["enabled"] = False
140-
assert not setup_foo(app, 2)
107+
assert not setup_foo(app)
141108

142109

143-
def test_skip_setup(
144-
app: web.Application, mock_logger: MockType, create_setup_foo: Callable
145-
):
146-
setup_foo = create_setup_foo()
147-
assert not setup_foo(app, 1, raise_skip=True)
148-
assert setup_foo(app, 1)
149-
mock_logger.info.assert_called()
110+
def test_skip_setup(app: web.Application, mock_logger: MockType):
111+
@app_module_setup("package.foo", ModuleCategory.ADDON, logger=mock_logger)
112+
def setup_foo(app: web.Application, *, raise_skip: bool = False) -> bool:
113+
if raise_skip:
114+
raise SkipModuleSetupError(reason="explicit skip")
115+
return True
150116

117+
assert not setup_foo(app, raise_skip=True)
118+
assert setup_foo(app)
151119

152-
def test_ensure_single_setup_runs_once(
153-
app: web.Application, mock_logger: MockType
154-
) -> None:
120+
assert mock_logger.info.called
121+
args = [call.args[-1] for call in mock_logger.info.mock_calls]
122+
assert any("explicit skip" in arg for arg in args)
123+
124+
125+
def setup_basic(app: web.Application) -> bool:
126+
return True
127+
128+
129+
def setup_that_raises(app: web.Application) -> bool:
130+
error_msg = "Setup failed"
131+
raise ValueError(error_msg)
132+
133+
134+
def test_ensure_single_setup_runs_once(app: web.Application, mock_logger: MockType):
155135
decorated = ensure_single_setup("test.module", logger=mock_logger)(setup_basic)
156136

157137
# First call succeeds
@@ -160,16 +140,11 @@ def test_ensure_single_setup_runs_once(
160140

161141
# Second call skips
162142
assert not decorated(app)
163-
mock_logger.info.assert_called_with(
164-
"Skipping '%s' setup: %s",
165-
"test.module",
166-
"'test.module' was already initialized in <Application. Avoid logging objects like this>. Setup can only be executed once per app.",
167-
)
168143

169144

170145
def test_ensure_single_setup_error_handling(
171146
app: web.Application, mock_logger: MockType
172-
) -> None:
147+
):
173148
decorated = ensure_single_setup("test.error", logger=mock_logger)(setup_that_raises)
174149

175150
with pytest.raises(ValueError, match="Setup failed"):
@@ -179,7 +154,7 @@ def test_ensure_single_setup_error_handling(
179154

180155
def test_ensure_single_setup_multiple_modules(
181156
app: web.Application, mock_logger: MockType
182-
) -> None:
157+
):
183158
decorated1 = ensure_single_setup("module1", logger=mock_logger)(setup_basic)
184159
decorated2 = ensure_single_setup("module2", logger=mock_logger)(setup_basic)
185160

0 commit comments

Comments
 (0)