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 |