Marco Ricci commited on 2025-08-08 23:09:22
Zeige 4 geänderte Dateien mit 22 Einfügungen und 45 Löschungen.
Turn the `is_valid_test_config`, `is_smudgable_vault_test_config` and `_test_config_ids` functions into methods of the `VaultTestConfig` class: `is_valid`, `is_smudgable` and `_test_id`. This fits the overall intent of only providing types and some simple predicates or transformations, and it reads much nicer if a short method name is used instead of an explicit function name. (And if a one-argument function is required, it can be obtained, as a bound method, from the class.)
... | ... |
@@ -285,35 +285,22 @@ class VaultTestConfig(NamedTuple): |
285 | 285 |
validation_settings: ValidationSettings | None |
286 | 286 |
"""""" |
287 | 287 |
|
288 |
- |
|
289 |
-def is_valid_test_config(conf: VaultTestConfig, /) -> bool: |
|
290 |
- """Return true if the test config is valid. |
|
291 |
- |
|
292 |
- Args: |
|
293 |
- conf: The test config to check. |
|
294 |
- |
|
295 |
- """ |
|
296 |
- return not conf.comment and conf.validation_settings in { |
|
288 |
+ def is_valid(self, /) -> bool: |
|
289 |
+ """Return true if this test config is valid.""" |
|
290 |
+ return not self.comment and self.validation_settings in { |
|
297 | 291 |
None, |
298 | 292 |
(True,), |
299 | 293 |
} |
300 | 294 |
|
295 |
+ def is_smudgable(self) -> bool: |
|
296 |
+ """Return true if this vault test config can be effectively smudged. |
|
301 | 297 |
|
302 |
-def is_smudgable_vault_test_config(conf: VaultTestConfig) -> bool: |
|
303 |
- """Check whether this vault test config can be effectively smudged. |
|
304 |
- |
|
305 |
- A "smudged" test config is one where falsy values (in the JavaScript |
|
306 |
- sense) can be replaced by other falsy values without changing the |
|
307 |
- meaning of the config. |
|
308 |
- |
|
309 |
- Args: |
|
310 |
- conf: A test config to check. |
|
311 |
- |
|
312 |
- Returns: |
|
313 |
- True if the test config can be smudged, False otherwise. |
|
298 |
+ A "smudged" test config is one where falsy values (in the |
|
299 |
+ JavaScript sense) can be replaced by other falsy values without |
|
300 |
+ changing the meaning of the config. |
|
314 | 301 |
|
315 | 302 |
""" |
316 |
- config = conf.config |
|
303 |
+ config = self.config |
|
317 | 304 |
return bool( |
318 | 305 |
isinstance(config, dict) |
319 | 306 |
and ("global" not in config or isinstance(config["global"], dict)) |
... | ... |
@@ -322,11 +309,9 @@ def is_smudgable_vault_test_config(conf: VaultTestConfig) -> bool: |
322 | 309 |
and (config["services"] or config.get("global")) |
323 | 310 |
) |
324 | 311 |
|
325 |
- |
|
326 |
-def _test_config_ids(val: VaultTestConfig) -> Any: # pragma: no cover |
|
327 |
- """pytest id function for VaultTestConfig objects.""" |
|
328 |
- assert isinstance(val, VaultTestConfig) |
|
329 |
- return val[1] or (val[0], val[1], val[2]) |
|
312 |
+ def _test_id(self) -> Any: # pragma: no cover |
|
313 |
+ """Return a test ID, e.g., for `pytest`.""" |
|
314 |
+ return self[1] or (self[0], self[1], self[2]) |
|
330 | 315 |
|
331 | 316 |
|
332 | 317 |
# Data objects |
... | ... |
@@ -107,7 +107,7 @@ def vault_full_service_config(draw: strategies.DrawFn) -> dict[str, int]: |
107 | 107 |
def smudged_vault_test_config( |
108 | 108 |
draw: strategies.DrawFn, |
109 | 109 |
config: Any = strategies.sampled_from(tests.data.TEST_CONFIGS).filter( # noqa: B008 |
110 |
- tests.data.is_smudgable_vault_test_config |
|
110 |
+ tests.data.VaultTestConfig.is_smudgable |
|
111 | 111 |
), |
112 | 112 |
) -> Any: |
113 | 113 |
"""Hypothesis strategy to replace falsy values with other falsy values. |
... | ... |
@@ -132,7 +132,7 @@ def smudged_vault_test_config( |
132 | 132 |
falsy_no_str = (None, False, 0, 0.0, float("nan")) |
133 | 133 |
falsy_no_zero = (None, False, "", float("nan")) |
134 | 134 |
conf = draw(config) |
135 |
- hypothesis.assume(tests.data.is_smudgable_vault_test_config(conf)) |
|
135 |
+ hypothesis.assume(conf.is_smudgable()) |
|
136 | 136 |
obj = copy.deepcopy(conf.config) |
137 | 137 |
services: list[dict[str, Any]] = list(obj["services"].values()) |
138 | 138 |
if "global" in obj: |
... | ... |
@@ -1221,11 +1221,7 @@ class Parametrize(types.SimpleNamespace): |
1221 | 1221 |
) |
1222 | 1222 |
VALID_TEST_CONFIGS = pytest.mark.parametrize( |
1223 | 1223 |
"config", |
1224 |
- [ |
|
1225 |
- conf.config |
|
1226 |
- for conf in TEST_CONFIGS |
|
1227 |
- if tests.data.is_valid_test_config(conf) |
|
1228 |
- ], |
|
1224 |
+ [conf.config for conf in TEST_CONFIGS if conf.is_valid()], |
|
1229 | 1225 |
) |
1230 | 1226 |
KEY_OVERRIDING_IN_CONFIG = pytest.mark.parametrize( |
1231 | 1227 |
["config", "command_line"], |
... | ... |
@@ -3083,9 +3079,7 @@ class TestCLI: |
3083 | 3079 |
@hypothesis.given( |
3084 | 3080 |
conf=tests.machinery.hypothesis.smudged_vault_test_config( |
3085 | 3081 |
strategies.sampled_from([ |
3086 |
- conf |
|
3087 |
- for conf in tests.data.TEST_CONFIGS |
|
3088 |
- if tests.data.is_valid_test_config(conf) |
|
3082 |
+ conf for conf in tests.data.TEST_CONFIGS if conf.is_valid() |
|
3089 | 3083 |
]) |
3090 | 3084 |
) |
3091 | 3085 |
) |
... | ... |
@@ -77,10 +77,12 @@ class Parametrize(types.SimpleNamespace): |
77 | 77 |
for conf in tests.data.TEST_CONFIGS |
78 | 78 |
if conf.validation_settings in {None, (True,)} |
79 | 79 |
], |
80 |
- ids=tests.data._test_config_ids, |
|
80 |
+ ids=tests.data.VaultTestConfig._test_id, |
|
81 | 81 |
) |
82 | 82 |
VAULT_TEST_CONFIGS = pytest.mark.parametrize( |
83 |
- "test_config", tests.data.TEST_CONFIGS, ids=tests.data._test_config_ids |
|
83 |
+ "test_config", |
|
84 |
+ tests.data.TEST_CONFIGS, |
|
85 |
+ ids=tests.data.VaultTestConfig._test_id, |
|
84 | 86 |
) |
85 | 87 |
|
86 | 88 |
|
... | ... |
@@ -127,9 +129,7 @@ def test_200_is_vault_config(test_config: tests.data.VaultTestConfig) -> None: |
127 | 129 |
@hypothesis.given( |
128 | 130 |
test_config=tests.machinery.hypothesis.smudged_vault_test_config( |
129 | 131 |
config=strategies.sampled_from([ |
130 |
- conf |
|
131 |
- for conf in tests.data.TEST_CONFIGS |
|
132 |
- if tests.data.is_valid_test_config(conf) |
|
132 |
+ conf for conf in tests.data.TEST_CONFIGS if conf.is_valid() |
|
133 | 133 |
]) |
134 | 134 |
) |
135 | 135 |
) |
... | ... |
@@ -194,9 +194,7 @@ def test_400_validate_vault_config( |
194 | 194 |
@hypothesis.given( |
195 | 195 |
test_config=tests.machinery.hypothesis.smudged_vault_test_config( |
196 | 196 |
config=strategies.sampled_from([ |
197 |
- conf |
|
198 |
- for conf in tests.data.TEST_CONFIGS |
|
199 |
- if tests.data.is_smudgable_vault_test_config(conf) |
|
197 |
+ conf for conf in tests.data.TEST_CONFIGS if conf.is_smudgable() |
|
200 | 198 |
]) |
201 | 199 |
) |
202 | 200 |
) |
203 | 201 |