Fix awkward parametrization declaration for SSH agent client tests
Marco Ricci

Marco Ricci commited on 2024-10-01 10:15:36
Zeige 2 geänderte Dateien mit 11 Einfügungen und 15 Löschungen.


Instead of introducing a static method, calling it to obtain test
parameters, then removing it again, use a declaration within the
`pytest.mark.parametrize` decorator arguments, even if that is
supposedly more difficult to read (I wouldn't agree).  Among the
readability benefits (primarily because of compactness), the imperative
version via a static method throws errors on Python 3.9, presumably
because the `staticmethod` object itself is being returned, not the
bound method object, and the former isn't callable in Python 3.9.

On a related note, a future import for annotations was missing as well.
... ...
@@ -4,6 +4,8 @@
4 4
 
5 5
 """Test sequin.Sequin."""
6 6
 
7
+from __future__ import annotations
8
+
7 9
 import collections
8 10
 
9 11
 import pytest
... ...
@@ -21,7 +21,7 @@ import tests
21 21
 from derivepassphrase import _types, cli, ssh_agent, vault
22 22
 
23 23
 if TYPE_CHECKING:
24
-    from collections.abc import Iterable, Iterator
24
+    from collections.abc import Iterable
25 25
 
26 26
     from typing_extensions import Any
27 27
 
... ...
@@ -276,18 +276,14 @@ class TestAgentInteraction:
276 276
         with pytest.raises(ValueError, match='unsuitable SSH key'):
277 277
             vault.Vault.phrase_from_key(public_key_data)
278 278
 
279
-    @staticmethod
280
-    def _params() -> Iterator[tuple[bytes, bool]]:
281
-        for value in tests.SUPPORTED_KEYS.values():
282
-            key = value['public_key_data']
283
-            yield (key, False)
284
-        singleton_key = tests.list_keys_singleton()[0].key
285
-        for value in tests.SUPPORTED_KEYS.values():
286
-            key = value['public_key_data']
287
-            if key == singleton_key:
288
-                yield (key, True)
289
-
290
-    @pytest.mark.parametrize(['key', 'single'], list(_params()))
279
+    @pytest.mark.parametrize(
280
+        ['key', 'single'],
281
+        [
282
+            (value['public_key_data'], False)
283
+            for value in tests.SUPPORTED_KEYS.values()
284
+        ]
285
+        + [(tests.list_keys_singleton()[0].key, True)],
286
+    )
291 287
     def test_210_ssh_key_selector(
292 288
         self,
293 289
         monkeypatch: pytest.MonkeyPatch,
... ...
@@ -345,8 +341,6 @@ class TestAgentInteraction:
345 341
         for snippet in ('Suitable SSH keys:\n', text, f'\n{b64_key}\n'):
346 342
             assert result.clean_exit(output=snippet), 'expected clean exit'
347 343
 
348
-    del _params
349
-
350 344
     def test_300_constructor_bad_running_agent(
351 345
         self,
352 346
         monkeypatch: pytest.MonkeyPatch,
353 347