fc8c8f924a2a6876f3f954579e2ad170834a71de
Marco Ricci Add prototype command-line...

Marco Ricci authored 2 months ago

1) # SPDX-FileCopyrightText: 2024 Marco Ricci <m@the13thletter.info>
2) #
3) # SPDX-License-Identifier: MIT
4) 
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

5) from __future__ import annotations
6) 
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

7) import contextlib
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

8) import json
9) import os
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

10) import socket
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 1 month ago

11) from typing import TYPE_CHECKING
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

12) 
Marco Ricci Add prototype command-line...

Marco Ricci authored 2 months ago

13) import click.testing
14) import pytest
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

15) from typing_extensions import NamedTuple
16) 
17) import derivepassphrase as dpp
18) import ssh_agent_client
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

19) import tests
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

20) from derivepassphrase import cli
21) 
22) if TYPE_CHECKING:
23)     from collections.abc import Callable
24) 
25)     from typing_extensions import Any
Marco Ricci Add prototype command-line...

Marco Ricci authored 2 months ago

26) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

27) DUMMY_SERVICE = tests.DUMMY_SERVICE
28) DUMMY_PASSPHRASE = tests.DUMMY_PASSPHRASE
29) DUMMY_CONFIG_SETTINGS = tests.DUMMY_CONFIG_SETTINGS
30) DUMMY_RESULT_PASSPHRASE = tests.DUMMY_RESULT_PASSPHRASE
31) DUMMY_RESULT_KEY1 = tests.DUMMY_RESULT_KEY1
32) DUMMY_PHRASE_FROM_KEY1_RAW = tests.DUMMY_PHRASE_FROM_KEY1_RAW
33) DUMMY_PHRASE_FROM_KEY1 = tests.DUMMY_PHRASE_FROM_KEY1
34) 
35) DUMMY_KEY1 = tests.DUMMY_KEY1
36) DUMMY_KEY1_B64 = tests.DUMMY_KEY1_B64
37) DUMMY_KEY2 = tests.DUMMY_KEY2
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

38) 
39) 
40) class IncompatibleConfiguration(NamedTuple):
41)     other_options: list[tuple[str, ...]]
42)     needs_service: bool | None
43)     input: bytes | None
44) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

45) 
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

46) class SingleConfiguration(NamedTuple):
47)     needs_service: bool | None
48)     input: bytes | None
49)     check_success: bool
50) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

51) 
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

52) class OptionCombination(NamedTuple):
53)     options: list[str]
54)     incompatible: bool
55)     needs_service: bool | None
56)     input: bytes | None
57)     check_success: bool
58) 
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

59) 
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

60) PASSWORD_GENERATION_OPTIONS: list[tuple[str, ...]] = [
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

61)     ('--phrase',),
62)     ('--key',),
63)     ('--length', '20'),
64)     ('--repeat', '20'),
65)     ('--lower', '1'),
66)     ('--upper', '1'),
67)     ('--number', '1'),
68)     ('--space', '1'),
69)     ('--dash', '1'),
70)     ('--symbol', '1'),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

71) ]
72) CONFIGURATION_OPTIONS: list[tuple[str, ...]] = [
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

73)     ('--notes',),
74)     ('--config',),
75)     ('--delete',),
76)     ('--delete-globals',),
77)     ('--clear',),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

78) ]
79) CONFIGURATION_COMMANDS: list[tuple[str, ...]] = [
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

80)     ('--notes',),
81)     ('--delete',),
82)     ('--delete-globals',),
83)     ('--clear',),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

84) ]
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

85) STORAGE_OPTIONS: list[tuple[str, ...]] = [('--export', '-'), ('--import', '-')]
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

86) INCOMPATIBLE: dict[tuple[str, ...], IncompatibleConfiguration] = {
87)     ('--phrase',): IncompatibleConfiguration(
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

88)         [('--key',), *CONFIGURATION_COMMANDS, *STORAGE_OPTIONS],
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

89)         True,
90)         DUMMY_PASSPHRASE,
91)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

92)     ('--key',): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

93)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
94)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

95)     ('--length', '20'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

96)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
97)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

98)     ('--repeat', '20'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

99)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
100)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

101)     ('--lower', '1'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

102)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
103)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

104)     ('--upper', '1'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

105)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
106)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

107)     ('--number', '1'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

108)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
109)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

110)     ('--space', '1'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

111)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
112)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

113)     ('--dash', '1'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

114)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
115)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

116)     ('--symbol', '1'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

117)         CONFIGURATION_COMMANDS + STORAGE_OPTIONS, True, DUMMY_PASSPHRASE
118)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

119)     ('--notes',): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

120)         [
121)             ('--config',),
122)             ('--delete',),
123)             ('--delete-globals',),
124)             ('--clear',),
125)             *STORAGE_OPTIONS,
126)         ],
127)         True,
128)         None,
129)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

130)     ('--config', '-p'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

131)         [('--delete',), ('--delete-globals',), ('--clear',), *STORAGE_OPTIONS],
132)         None,
133)         DUMMY_PASSPHRASE,
134)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

135)     ('--delete',): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

136)         [('--delete-globals',), ('--clear',), *STORAGE_OPTIONS], True, None
137)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

138)     ('--delete-globals',): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

139)         [('--clear',), *STORAGE_OPTIONS], False, None
140)     ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

141)     ('--clear',): IncompatibleConfiguration(STORAGE_OPTIONS, False, None),
142)     ('--export', '-'): IncompatibleConfiguration(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

143)         [('--import', '-')], False, None
144)     ),
145)     ('--import', '-'): IncompatibleConfiguration([], False, None),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

146) }
147) SINGLES: dict[tuple[str, ...], SingleConfiguration] = {
148)     ('--phrase',): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
149)     ('--key',): SingleConfiguration(True, None, False),
150)     ('--length', '20'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
151)     ('--repeat', '20'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
152)     ('--lower', '1'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
153)     ('--upper', '1'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
154)     ('--number', '1'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
155)     ('--space', '1'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
156)     ('--dash', '1'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
157)     ('--symbol', '1'): SingleConfiguration(True, DUMMY_PASSPHRASE, True),
158)     ('--notes',): SingleConfiguration(True, None, False),
159)     ('--config', '-p'): SingleConfiguration(None, DUMMY_PASSPHRASE, False),
160)     ('--delete',): SingleConfiguration(True, None, False),
161)     ('--delete-globals',): SingleConfiguration(False, None, True),
162)     ('--clear',): SingleConfiguration(False, None, True),
163)     ('--export', '-'): SingleConfiguration(False, None, True),
164)     ('--import', '-'): SingleConfiguration(False, b'{"services": {}}', True),
165) }
166) INTERESTING_OPTION_COMBINATIONS: list[OptionCombination] = []
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

167) config: IncompatibleConfiguration | SingleConfiguration
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

168) for opt, config in INCOMPATIBLE.items():
169)     for opt2 in config.other_options:
170)         INTERESTING_OPTION_COMBINATIONS.extend([
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

171)             OptionCombination(
172)                 options=list(opt + opt2),
173)                 incompatible=True,
174)                 needs_service=config.needs_service,
175)                 input=config.input,
176)                 check_success=False,
177)             ),
178)             OptionCombination(
179)                 options=list(opt2 + opt),
180)                 incompatible=True,
181)                 needs_service=config.needs_service,
182)                 input=config.input,
183)                 check_success=False,
184)             ),
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

185)         ])
186) for opt, config in SINGLES.items():
187)     INTERESTING_OPTION_COMBINATIONS.append(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

188)         OptionCombination(
189)             options=list(opt),
190)             incompatible=False,
191)             needs_service=config.needs_service,
192)             input=config.input,
193)             check_success=config.check_success,
194)         )
195)     )
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

196) 
197) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

198) class TestCLI:
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 1 month ago

199)     def test_200_help_output(self) -> None:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

200)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

201)         result = runner.invoke(
202)             cli.derivepassphrase, ['--help'], catch_exceptions=False
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

203)         )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

204)         assert result.exit_code == 0
205)         assert (
206)             'Password generation:\n' in result.output
207)         ), 'Option groups not respected in help text.'
208)         assert (
209)             'Use NUMBER=0, e.g. "--symbol 0"' in result.output
210)         ), 'Option group epilog not printed.'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

211) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

212)     @pytest.mark.parametrize(
213)         'charset_name', ['lower', 'upper', 'number', 'space', 'dash', 'symbol']
214)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

215)     def test_201_disable_character_set(
216)         self, monkeypatch: Any, charset_name: str
217)     ) -> None:
218)         monkeypatch.setattr(cli, '_prompt_for_passphrase', tests.auto_prompt)
219)         option = f'--{charset_name}'
220)         charset = dpp.Vault._CHARSETS[charset_name].decode('ascii')
221)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

222)         result = runner.invoke(
223)             cli.derivepassphrase,
224)             [option, '0', '-p', DUMMY_SERVICE],
225)             input=DUMMY_PASSPHRASE,
226)             catch_exceptions=False,
Marco Ricci Add prototype command-line...

Marco Ricci authored 2 months ago

227)         )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

228)         assert (
229)             result.exit_code == 0
230)         ), f'program died unexpectedly with exit code {result.exit_code}'
231)         assert (
232)             not result.stderr_bytes
233)         ), f'program barfed on stderr: {result.stderr_bytes!r}'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

234)         for c in charset:
235)             assert c not in result.stdout, (
236)                 f'derived password contains forbidden character {c!r}: '
237)                 f'{result.stdout!r}'
238)             )
Marco Ricci Add prototype command-line...

Marco Ricci authored 2 months ago

239) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

240)     def test_202_disable_repetition(self, monkeypatch: Any) -> None:
241)         monkeypatch.setattr(cli, '_prompt_for_passphrase', tests.auto_prompt)
242)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

243)         result = runner.invoke(
244)             cli.derivepassphrase,
245)             ['--repeat', '0', '-p', DUMMY_SERVICE],
246)             input=DUMMY_PASSPHRASE,
247)             catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

248)         )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

249)         assert (
250)             result.exit_code == 0
251)         ), f'program died unexpectedly with exit code {result.exit_code}'
252)         assert (
253)             not result.stderr_bytes
254)         ), f'program barfed on stderr: {result.stderr_bytes!r}'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

255)         passphrase = result.stdout.rstrip('\r\n')
256)         for i in range(len(passphrase) - 1):
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

257)             assert passphrase[i : i + 1] != passphrase[i + 1 : i + 2], (
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

258)                 f'derived password contains repeated character '
259)                 f'at position {i}: {result.stdout!r}'
260)             )
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

261) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

262)     @pytest.mark.parametrize(
263)         'config',
264)         [
265)             pytest.param(
266)                 {
267)                     'global': {'key': DUMMY_KEY1_B64},
268)                     'services': {DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS},
269)                 },
270)                 id='global',
271)             ),
272)             pytest.param(
273)                 {
274)                     'global': {
275)                         'phrase': DUMMY_PASSPHRASE.rstrip(b'\n').decode(
276)                             'ASCII'
277)                         )
278)                     },
279)                     'services': {
280)                         DUMMY_SERVICE: {
281)                             'key': DUMMY_KEY1_B64,
282)                             **DUMMY_CONFIG_SETTINGS,
283)                         }
284)                     },
285)                 },
286)                 id='service',
287)             ),
288)         ],
289)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

290)     def test_204a_key_from_config(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

291)         self,
292)         monkeypatch: Any,
293)         config: dpp.types.VaultConfig,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

294)     ) -> None:
295)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

296)         with tests.isolated_config(
297)             monkeypatch=monkeypatch, runner=runner, config=config
298)         ):
299)             monkeypatch.setattr(
300)                 dpp.Vault, 'phrase_from_key', tests.phrase_from_key
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

301)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

302)             result = runner.invoke(
303)                 cli.derivepassphrase, [DUMMY_SERVICE], catch_exceptions=False
304)             )
305)             assert (result.exit_code, result.stderr_bytes) == (
306)                 0,
307)                 b'',
308)             ), 'program exited with failure'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

309)             assert (
310)                 result.stdout_bytes.rstrip(b'\n') != DUMMY_RESULT_PASSPHRASE
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

311)             ), 'program generated unexpected result (phrase instead of key)'
312)             assert (
313)                 result.stdout_bytes.rstrip(b'\n') == DUMMY_RESULT_KEY1
314)             ), 'program generated unexpected result (wrong settings?)'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

315) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

316)     def test_204b_key_from_command_line(self, monkeypatch: Any) -> None:
317)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

318)         with tests.isolated_config(
319)             monkeypatch=monkeypatch,
320)             runner=runner,
321)             config={'services': {DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS}},
322)         ):
323)             monkeypatch.setattr(
324)                 cli, '_get_suitable_ssh_keys', tests.suitable_ssh_keys
325)             )
326)             monkeypatch.setattr(
327)                 dpp.Vault, 'phrase_from_key', tests.phrase_from_key
328)             )
329)             result = runner.invoke(
330)                 cli.derivepassphrase,
331)                 ['-k', DUMMY_SERVICE],
332)                 input=b'1\n',
333)                 catch_exceptions=False,
334)             )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

335)             assert result.exit_code == 0, 'program exited with failure'
336)             assert result.stdout_bytes, 'program output expected'
337)             last_line = result.stdout_bytes.splitlines(True)[-1]
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

338)             assert (
339)                 last_line.rstrip(b'\n') != DUMMY_RESULT_PASSPHRASE
340)             ), 'program generated unexpected result (phrase instead of key)'
341)             assert (
342)                 last_line.rstrip(b'\n') == DUMMY_RESULT_KEY1
343)             ), 'program generated unexpected result (wrong settings?)'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

344) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

345)     def test_205_service_phrase_if_key_in_global_config(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

346)         self,
347)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

348)     ) -> None:
349)         runner = click.testing.CliRunner(mix_stderr=False)
350)         with tests.isolated_config(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

351)             monkeypatch=monkeypatch,
352)             runner=runner,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

353)             config={
354)                 'global': {'key': DUMMY_KEY1_B64},
355)                 'services': {
356)                     DUMMY_SERVICE: {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

357)                         'phrase': DUMMY_PASSPHRASE.rstrip(b'\n').decode(
358)                             'ASCII'
359)                         ),
360)                         **DUMMY_CONFIG_SETTINGS,
361)                     }
362)                 },
363)             },
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

364)         ):
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

365)             result = runner.invoke(
366)                 cli.derivepassphrase, [DUMMY_SERVICE], catch_exceptions=False
367)             )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

368)             assert result.exit_code == 0, 'program exited with failure'
369)             assert result.stdout_bytes, 'program output expected'
370)             last_line = result.stdout_bytes.splitlines(True)[-1]
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

371)             assert (
372)                 last_line.rstrip(b'\n') != DUMMY_RESULT_KEY1
373)             ), 'program generated unexpected result (key instead of phrase)'
374)             assert (
375)                 last_line.rstrip(b'\n') == DUMMY_RESULT_PASSPHRASE
376)             ), 'program generated unexpected result (wrong settings?)'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

377) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

378)     @pytest.mark.parametrize(
379)         'option',
380)         [
381)             '--lower',
382)             '--upper',
383)             '--number',
384)             '--space',
385)             '--dash',
386)             '--symbol',
387)             '--repeat',
388)             '--length',
389)         ],
390)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

391)     def test_210_invalid_argument_range(self, option: str) -> None:
392)         runner = click.testing.CliRunner(mix_stderr=False)
393)         for value in '-42', 'invalid':
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

394)             result = runner.invoke(
395)                 cli.derivepassphrase,
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 1 month ago

396)                 [option, value, '-p', DUMMY_SERVICE],
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

397)                 input=DUMMY_PASSPHRASE,
398)                 catch_exceptions=False,
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

399)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

400)             assert result.exit_code > 0, 'program unexpectedly succeeded'
401)             assert (
402)                 result.stderr_bytes
403)             ), 'program did not print any error message'
404)             assert (
405)                 b'Error: Invalid value' in result.stderr_bytes
406)             ), 'program did not print the expected error message'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

407) 
408)     @pytest.mark.parametrize(
409)         ['options', 'service', 'input', 'check_success'],
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

410)         [
411)             (o.options, o.needs_service, o.input, o.check_success)
412)             for o in INTERESTING_OPTION_COMBINATIONS
413)             if not o.incompatible
414)         ],
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

415)     )
416)     def test_211_service_needed(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

417)         self,
418)         monkeypatch: Any,
419)         options: list[str],
420)         service: bool | None,
421)         input: bytes | None,
422)         check_success: bool,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

423)     ) -> None:
424)         monkeypatch.setattr(cli, '_prompt_for_passphrase', tests.auto_prompt)
425)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

426)         with tests.isolated_config(
427)             monkeypatch=monkeypatch,
428)             runner=runner,
429)             config={'global': {'phrase': 'abc'}, 'services': {}},
430)         ):
431)             result = runner.invoke(
432)                 cli.derivepassphrase,
433)                 options if service else [*options, DUMMY_SERVICE],
434)                 input=input,
435)                 catch_exceptions=False,
436)             )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

437)             if service is not None:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

438)                 assert result.exit_code > 0, 'program unexpectedly succeeded'
439)                 assert (
440)                     result.stderr_bytes
441)                 ), 'program did not print any error message'
442)                 err_msg = (
443)                     b' requires a SERVICE'
444)                     if service
445)                     else b' does not take a SERVICE argument'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

446)                 )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

447)                 assert (
448)                     err_msg in result.stderr_bytes
449)                 ), 'program did not print the expected error message'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

450)             else:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

451)                 assert (result.exit_code, result.stderr_bytes) == (
452)                     0,
453)                     b'',
454)                 ), 'program unexpectedly failed'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

455)         if check_success:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

456)             with tests.isolated_config(
457)                 monkeypatch=monkeypatch,
458)                 runner=runner,
459)                 config={'global': {'phrase': 'abc'}, 'services': {}},
460)             ):
461)                 monkeypatch.setattr(
462)                     cli, '_prompt_for_passphrase', tests.auto_prompt
463)                 )
464)                 result = runner.invoke(
465)                     cli.derivepassphrase,
466)                     [*options, DUMMY_SERVICE] if service else options,
467)                     input=input,
468)                     catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

469)                 )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

470)                 assert (result.exit_code, result.stderr_bytes) == (
471)                     0,
472)                     b'',
473)                 ), 'program unexpectedly failed'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

474) 
475)     @pytest.mark.parametrize(
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

476)         ['options', 'service'],
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

477)         [
478)             (o.options, o.needs_service)
479)             for o in INTERESTING_OPTION_COMBINATIONS
480)             if o.incompatible
481)         ],
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

482)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

483)     def test_212_incompatible_options(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

484)         self,
485)         options: list[str],
486)         service: bool | None,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

487)     ) -> None:
488)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

489)         result = runner.invoke(
490)             cli.derivepassphrase,
491)             [*options, DUMMY_SERVICE] if service else options,
492)             input=DUMMY_PASSPHRASE,
493)             catch_exceptions=False,
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

494)         )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

495)         assert result.exit_code > 0, 'program unexpectedly succeeded'
496)         assert result.stderr_bytes, 'program did not print any error message'
497)         assert (
498)             b'mutually exclusive with ' in result.stderr_bytes
499)         ), 'program did not print the expected error message'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

500) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

501)     def test_213_import_bad_config_not_vault_config(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

502)         self,
503)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

504)     ) -> None:
505)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

506)         with tests.isolated_config(
507)             monkeypatch=monkeypatch, runner=runner, config={'services': {}}
508)         ):
509)             result = runner.invoke(
510)                 cli.derivepassphrase,
511)                 ['--import', '-'],
512)                 input=b'null',
513)                 catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

514)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

515)             assert result.exit_code > 0, 'program unexpectedly succeeded'
516)             assert (
517)                 result.stderr_bytes
518)             ), 'program did not print any error message'
519)             assert (
520)                 b'not a valid config' in result.stderr_bytes
521)             ), 'program did not print the expected error message'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

522) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

523)     def test_213a_import_bad_config_not_json_data(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

524)         self,
525)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

526)     ) -> None:
527)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

528)         with tests.isolated_config(
529)             monkeypatch=monkeypatch, runner=runner, config={'services': {}}
530)         ):
531)             result = runner.invoke(
532)                 cli.derivepassphrase,
533)                 ['--import', '-'],
534)                 input=b'This string is not valid JSON.',
535)                 catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

536)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

537)             assert result.exit_code > 0, 'program unexpectedly succeeded'
538)             assert (
539)                 result.stderr_bytes
540)             ), 'program did not print any error message'
541)             assert (
542)                 b'cannot decode JSON' in result.stderr_bytes
543)             ), 'program did not print the expected error message'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

544) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

545)     def test_213b_import_bad_config_not_a_file(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

546)         self,
547)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

548)     ) -> None:
549)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

550)         # `isolated_config` validates the configuration.  So, to pass an
551)         # actual broken configuration, we must open the configuration file
552)         # ourselves afterwards, inside the context.
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

553)         with tests.isolated_config(
554)             monkeypatch=monkeypatch, runner=runner, config={'services': {}}
555)         ):
556)             with open(
557)                 cli._config_filename(), 'w', encoding='UTF-8'
558)             ) as outfile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

559)                 print('This string is not valid JSON.', file=outfile)
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

560)             dname = os.path.dirname(cli._config_filename())
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

561)             result = runner.invoke(
562)                 cli.derivepassphrase,
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

563)                 ['--import', os.fsdecode(dname)],
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

564)                 catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

565)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

566)             assert result.exit_code > 0, 'program unexpectedly succeeded'
567)             assert (
568)                 result.stderr_bytes
569)             ), 'program did not print any error message'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

570)             # Don't test the actual error message, because it is subject to
571)             # locale settings.  TODO: find a way anyway.
572) 
573)     def test_214_export_settings_no_stored_settings(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

574)         self,
575)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

576)     ) -> None:
577)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

578)         with tests.isolated_config(
579)             monkeypatch=monkeypatch, runner=runner, config={'services': {}}
580)         ):
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

581)             with contextlib.suppress(FileNotFoundError):
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

582)                 os.remove(cli._config_filename())
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

583)             result = runner.invoke(
584)                 cli.derivepassphrase, ['--export', '-'], catch_exceptions=False
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

585)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

586)             assert (result.exit_code, result.stderr_bytes) == (
587)                 0,
588)                 b'',
589)             ), 'program exited with failure'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

590) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

591)     def test_214a_export_settings_bad_stored_config(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

592)         self,
593)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

594)     ) -> None:
595)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

596)         with tests.isolated_config(
597)             monkeypatch=monkeypatch, runner=runner, config={}
598)         ):
599)             result = runner.invoke(
600)                 cli.derivepassphrase,
601)                 ['--export', '-'],
602)                 input=b'null',
603)                 catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

604)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

605)             assert result.exit_code > 0, 'program unexpectedly succeeded'
606)             assert (
607)                 result.stderr_bytes
608)             ), 'program did not print any error message'
609)             assert (
610)                 b'cannot load config' in result.stderr_bytes
611)             ), 'program did not print the expected error message'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

612) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

613)     def test_214b_export_settings_not_a_file(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

614)         self,
615)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

616)     ) -> None:
617)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

618)         with tests.isolated_config(
619)             monkeypatch=monkeypatch, runner=runner, config={'services': {}}
620)         ):
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

621)             with contextlib.suppress(FileNotFoundError):
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

622)                 os.remove(cli._config_filename())
623)             os.makedirs(cli._config_filename())
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

624)             result = runner.invoke(
625)                 cli.derivepassphrase,
626)                 ['--export', '-'],
627)                 input=b'null',
628)                 catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

629)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

630)             assert result.exit_code > 0, 'program unexpectedly succeeded'
631)             assert (
632)                 result.stderr_bytes
633)             ), 'program did not print any error message'
634)             assert (
635)                 b'cannot load config' in result.stderr_bytes
636)             ), 'program did not print the expected error message'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

637) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

638)     def test_214c_export_settings_target_not_a_file(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

639)         self,
640)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

641)     ) -> None:
642)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

643)         with tests.isolated_config(
644)             monkeypatch=monkeypatch, runner=runner, config={'services': {}}
645)         ):
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

646)             dname = os.path.dirname(cli._config_filename())
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

647)             result = runner.invoke(
648)                 cli.derivepassphrase,
649)                 ['--export', os.fsdecode(dname)],
650)                 input=b'null',
651)                 catch_exceptions=False,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

652)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

653)             assert result.exit_code > 0, 'program unexpectedly succeeded'
654)             assert (
655)                 result.stderr_bytes
656)             ), 'program did not print any error message'
657)             assert (
658)                 b'cannot write config' in result.stderr_bytes
659)             ), 'program did not print the expected error message'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

660) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

661)     def test_220_edit_notes_successfully(self, monkeypatch: Any) -> None:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

662)         edit_result = """
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

663) 
664) # - - - - - >8 - - - - - >8 - - - - - >8 - - - - - >8 - - - - -
665) contents go here
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

666) """
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

667)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

668)         with tests.isolated_config(
669)             monkeypatch=monkeypatch,
670)             runner=runner,
671)             config={'global': {'phrase': 'abc'}, 'services': {}},
672)         ):
673)             monkeypatch.setattr(click, 'edit', lambda *a, **kw: edit_result)  # noqa: ARG005
674)             result = runner.invoke(
675)                 cli.derivepassphrase, ['--notes', 'sv'], catch_exceptions=False
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

676)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

677)             assert (result.exit_code, result.stderr_bytes) == (
678)                 0,
679)                 b'',
680)             ), 'program exited with failure'
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

681)             with open(cli._config_filename(), encoding='UTF-8') as infile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

682)                 config = json.load(infile)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

683)             assert config == {
684)                 'global': {'phrase': 'abc'},
685)                 'services': {'sv': {'notes': 'contents go here'}},
686)             }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

687) 
688)     def test_221_edit_notes_noop(self, monkeypatch: Any) -> None:
689)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

690)         with tests.isolated_config(
691)             monkeypatch=monkeypatch,
692)             runner=runner,
693)             config={'global': {'phrase': 'abc'}, 'services': {}},
694)         ):
695)             monkeypatch.setattr(click, 'edit', lambda *a, **kw: None)  # noqa: ARG005
696)             result = runner.invoke(
697)                 cli.derivepassphrase, ['--notes', 'sv'], catch_exceptions=False
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

698)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

699)             assert (result.exit_code, result.stderr_bytes) == (
700)                 0,
701)                 b'',
702)             ), 'program exited with failure'
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

703)             with open(cli._config_filename(), encoding='UTF-8') as infile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

704)                 config = json.load(infile)
705)             assert config == {'global': {'phrase': 'abc'}, 'services': {}}
706) 
707)     def test_222_edit_notes_marker_removed(self, monkeypatch: Any) -> None:
708)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

709)         with tests.isolated_config(
710)             monkeypatch=monkeypatch,
711)             runner=runner,
712)             config={'global': {'phrase': 'abc'}, 'services': {}},
713)         ):
714)             monkeypatch.setattr(click, 'edit', lambda *a, **kw: 'long\ntext')  # noqa: ARG005
715)             result = runner.invoke(
716)                 cli.derivepassphrase, ['--notes', 'sv'], catch_exceptions=False
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

717)             )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

718)             assert (result.exit_code, result.stderr_bytes) == (
719)                 0,
720)                 b'',
721)             ), 'program exited with failure'
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

722)             with open(cli._config_filename(), encoding='UTF-8') as infile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

723)                 config = json.load(infile)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

724)             assert config == {
725)                 'global': {'phrase': 'abc'},
726)                 'services': {'sv': {'notes': 'long\ntext'}},
727)             }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

728) 
729)     def test_223_edit_notes_abort(self, monkeypatch: Any) -> None:
730)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

731)         with tests.isolated_config(
732)             monkeypatch=monkeypatch,
733)             runner=runner,
734)             config={'global': {'phrase': 'abc'}, 'services': {}},
735)         ):
736)             monkeypatch.setattr(click, 'edit', lambda *a, **kw: '\n\n')  # noqa: ARG005
737)             result = runner.invoke(
738)                 cli.derivepassphrase, ['--notes', 'sv'], catch_exceptions=False
739)             )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

740)             assert result.exit_code != 0, 'program unexpectedly succeeded'
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

741)             assert result.stderr_bytes is not None
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

742)             assert (
743)                 b'user aborted request' in result.stderr_bytes
744)             ), 'expected error message missing'
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

745)             with open(cli._config_filename(), encoding='UTF-8') as infile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

746)                 config = json.load(infile)
747)             assert config == {'global': {'phrase': 'abc'}, 'services': {}}
748) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

749)     @pytest.mark.parametrize(
750)         ['command_line', 'input', 'result_config'],
751)         [
752)             (
753)                 ['--phrase'],
754)                 b'my passphrase\n',
755)                 {'global': {'phrase': 'my passphrase'}, 'services': {}},
756)             ),
757)             (
758)                 ['--key'],
759)                 b'1\n',
760)                 {'global': {'key': DUMMY_KEY1_B64}, 'services': {}},
761)             ),
762)             (
763)                 ['--phrase', 'sv'],
764)                 b'my passphrase\n',
765)                 {
766)                     'global': {'phrase': 'abc'},
767)                     'services': {'sv': {'phrase': 'my passphrase'}},
768)                 },
769)             ),
770)             (
771)                 ['--key', 'sv'],
772)                 b'1\n',
773)                 {
774)                     'global': {'phrase': 'abc'},
775)                     'services': {'sv': {'key': DUMMY_KEY1_B64}},
776)                 },
777)             ),
778)             (
779)                 ['--key', '--length', '15', 'sv'],
780)                 b'1\n',
781)                 {
782)                     'global': {'phrase': 'abc'},
783)                     'services': {'sv': {'key': DUMMY_KEY1_B64, 'length': 15}},
784)                 },
785)             ),
786)         ],
787)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

788)     def test_224_store_config_good(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

789)         self,
790)         monkeypatch: Any,
791)         command_line: list[str],
792)         input: bytes,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

793)         result_config: Any,
794)     ) -> None:
795)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

796)         with tests.isolated_config(
797)             monkeypatch=monkeypatch,
798)             runner=runner,
799)             config={'global': {'phrase': 'abc'}, 'services': {}},
800)         ):
801)             monkeypatch.setattr(
802)                 cli, '_get_suitable_ssh_keys', tests.suitable_ssh_keys
803)             )
804)             result = runner.invoke(
805)                 cli.derivepassphrase,
806)                 ['--config', *command_line],
807)                 catch_exceptions=False,
808)                 input=input,
809)             )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

810)             assert result.exit_code == 0, 'program exited with failure'
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

811)             with open(cli._config_filename(), encoding='UTF-8') as infile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

812)                 config = json.load(infile)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

813)             assert (
814)                 config == result_config
815)             ), 'stored config does not match expectation'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

816) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

817)     @pytest.mark.parametrize(
818)         ['command_line', 'input', 'err_text'],
819)         [
820)             (
821)                 [],
822)                 b'',
823)                 b'cannot update global settings without actual settings',
824)             ),
825)             (
826)                 ['sv'],
827)                 b'',
828)                 b'cannot update service settings without actual settings',
829)             ),
830)             (['--phrase', 'sv'], b'', b'no passphrase given'),
831)             (['--key'], b'', b'no valid SSH key selected'),
832)         ],
833)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

834)     def test_225_store_config_fail(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

835)         self,
836)         monkeypatch: Any,
837)         command_line: list[str],
838)         input: bytes,
839)         err_text: bytes,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

840)     ) -> None:
841)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

842)         with tests.isolated_config(
843)             monkeypatch=monkeypatch,
844)             runner=runner,
845)             config={'global': {'phrase': 'abc'}, 'services': {}},
846)         ):
847)             monkeypatch.setattr(
848)                 cli, '_get_suitable_ssh_keys', tests.suitable_ssh_keys
849)             )
850)             result = runner.invoke(
851)                 cli.derivepassphrase,
852)                 ['--config', *command_line],
853)                 catch_exceptions=False,
854)                 input=input,
855)             )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

856)             assert result.exit_code != 0, 'program unexpectedly succeeded?!'
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

857)             assert result.stderr_bytes is not None
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

858)             assert (
859)                 err_text in result.stderr_bytes
860)             ), 'expected error message missing'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

861) 
862)     def test_225a_store_config_fail_manual_no_ssh_key_selection(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

863)         self,
864)         monkeypatch: Any,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

865)     ) -> None:
866)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

867)         with tests.isolated_config(
868)             monkeypatch=monkeypatch,
869)             runner=runner,
870)             config={'global': {'phrase': 'abc'}, 'services': {}},
871)         ):
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

872)             custom_error = 'custom error message'
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

873) 
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 1 month ago

874)             def raiser() -> None:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

875)                 raise RuntimeError(custom_error)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

876) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

877)             monkeypatch.setattr(cli, '_select_ssh_key', raiser)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

878)             result = runner.invoke(
879)                 cli.derivepassphrase,
880)                 ['--key', '--config'],
881)                 catch_exceptions=False,
882)             )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

883)             assert result.exit_code != 0, 'program unexpectedly succeeded'
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

884)             assert result.stderr_bytes is not None
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

885)             assert (
886)                 custom_error.encode() in result.stderr_bytes
887)             ), 'expected error message missing'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

888) 
889)     def test_226_no_arguments(self) -> None:
890)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

891)         result = runner.invoke(
892)             cli.derivepassphrase, [], catch_exceptions=False
893)         )
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

894)         assert result.exit_code != 0, 'program unexpectedly succeeded'
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

895)         assert result.stderr_bytes is not None
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

896)         assert (
897)             b'SERVICE is required' in result.stderr_bytes
898)         ), 'expected error message missing'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

899) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

900)     def test_226a_no_passphrase_or_key(self) -> None:
901)         runner = click.testing.CliRunner(mix_stderr=False)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

902)         result = runner.invoke(
903)             cli.derivepassphrase, [DUMMY_SERVICE], catch_exceptions=False
904)         )
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

905)         assert result.exit_code != 0, 'program unexpectedly succeeded'
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

906)         assert result.stderr_bytes is not None
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

907)         assert (
908)             b'no passphrase or key given' in result.stderr_bytes
909)         ), 'expected error message missing'
Marco Ricci Add finished command-line i...

Marco Ricci authored 2 months ago

910) 
911) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

912) class TestCLIUtils:
913)     def test_100_save_bad_config(self, monkeypatch: Any) -> None:
914)         runner = click.testing.CliRunner()
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

915)         with (
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

916)             tests.isolated_config(
917)                 monkeypatch=monkeypatch, runner=runner, config={}
918)             ),
919)             pytest.raises(ValueError, match='Invalid vault config'),
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

920)         ):
921)             cli._save_config(None)  # type: ignore
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

922) 
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

923)     def test_101_prompt_for_selection_multiple(self) -> None:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

924)         @click.command()
925)         @click.option('--heading', default='Our menu:')
926)         @click.argument('items', nargs=-1)
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 1 month ago

927)         def driver(heading: str, items: list[str]) -> None:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

928)             # from https://montypython.fandom.com/wiki/Spam#The_menu
929)             items = items or [
930)                 'Egg and bacon',
931)                 'Egg, sausage and bacon',
932)                 'Egg and spam',
933)                 'Egg, bacon and spam',
934)                 'Egg, bacon, sausage and spam',
935)                 'Spam, bacon, sausage and spam',
936)                 'Spam, egg, spam, spam, bacon and spam',
937)                 'Spam, spam, spam, egg and spam',
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

938)                 (
939)                     'Spam, spam, spam, spam, spam, spam, baked beans, '
940)                     'spam, spam, spam and spam'
941)                 ),
942)                 (
943)                     'Lobster thermidor aux crevettes with a mornay sauce '
944)                     'garnished with truffle paté, brandy '
945)                     'and a fried egg on top and spam'
946)                 ),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

947)             ]
948)             index = cli._prompt_for_selection(items, heading=heading)
949)             click.echo('A fine choice: ', nl=False)
950)             click.echo(items[index])
951)             click.echo('(Note: Vikings strictly optional.)')
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

952) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

953)         runner = click.testing.CliRunner(mix_stderr=True)
954)         result = runner.invoke(driver, [], input='9')
955)         assert result.exit_code == 0, 'driver program failed'
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

956)         assert (
957)             result.stdout
958)             == """\
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

959) Our menu:
960) [1] Egg and bacon
961) [2] Egg, sausage and bacon
962) [3] Egg and spam
963) [4] Egg, bacon and spam
964) [5] Egg, bacon, sausage and spam
965) [6] Spam, bacon, sausage and spam
966) [7] Spam, egg, spam, spam, bacon and spam
967) [8] Spam, spam, spam, egg and spam
968) [9] Spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam and spam
969) [10] Lobster thermidor aux crevettes with a mornay sauce garnished with truffle paté, brandy and a fried egg on top and spam
970) Your selection? (1-10, leave empty to abort): 9
971) A fine choice: Spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam and spam
972) (Note: Vikings strictly optional.)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

973) """  # noqa: E501
974)         ), 'driver program produced unexpected output'
975)         result = runner.invoke(
976)             driver, ['--heading='], input='', catch_exceptions=True
977)         )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

978)         assert result.exit_code > 0, 'driver program succeeded?!'
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

979)         assert (
980)             result.stdout
981)             == """\
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

982) [1] Egg and bacon
983) [2] Egg, sausage and bacon
984) [3] Egg and spam
985) [4] Egg, bacon and spam
986) [5] Egg, bacon, sausage and spam
987) [6] Spam, bacon, sausage and spam
988) [7] Spam, egg, spam, spam, bacon and spam
989) [8] Spam, spam, spam, egg and spam
990) [9] Spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam and spam
991) [10] Lobster thermidor aux crevettes with a mornay sauce garnished with truffle paté, brandy and a fried egg on top and spam
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

992) Your selection? (1-10, leave empty to abort):\x20
993) """  # noqa: E501
994)         ), 'driver program produced unexpected output'
995)         assert isinstance(
996)             result.exception, IndexError
997)         ), 'driver program did not raise IndexError?!'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

998) 
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

999)     def test_102_prompt_for_selection_single(self) -> None:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1000)         @click.command()
1001)         @click.option('--item', default='baked beans')
1002)         @click.argument('prompt')
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 1 month ago

1003)         def driver(item: str, prompt: str) -> None:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1004)             try:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1005)                 cli._prompt_for_selection(
1006)                     [item], heading='', single_choice_prompt=prompt
1007)                 )
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1008)             except IndexError:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1009)                 click.echo('Boo.')
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1010)                 raise
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1011)             else:
1012)                 click.echo('Great!')
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1013) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1014)         runner = click.testing.CliRunner(mix_stderr=True)
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1015)         result = runner.invoke(
1016)             driver, ['Will replace with spam. Confirm, y/n?'], input='y'
1017)         )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1018)         assert result.exit_code == 0, 'driver program failed'
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1019)         assert (
1020)             result.stdout
1021)             == """\
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1022) [1] baked beans
1023) Will replace with spam. Confirm, y/n? y
1024) Great!
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1025) """
1026)         ), 'driver program produced unexpected output'
1027)         result = runner.invoke(
1028)             driver,
1029)             ['Will replace with spam, okay? ' '(Please say "y" or "n".)'],
1030)             input='',
1031)         )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1032)         assert result.exit_code > 0, 'driver program succeeded?!'
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1033)         assert (
1034)             result.stdout
1035)             == """\
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1036) [1] baked beans
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1037) Will replace with spam, okay? (Please say "y" or "n".):\x20
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1038) Boo.
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1039) """
1040)         ), 'driver program produced unexpected output'
1041)         assert isinstance(
1042)             result.exception, IndexError
1043)         ), 'driver program did not raise IndexError?!'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1044) 
1045)     def test_103_prompt_for_passphrase(self, monkeypatch: Any) -> None:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1046)         monkeypatch.setattr(
1047)             click,
1048)             'prompt',
1049)             lambda *a, **kw: json.dumps({'args': a, 'kwargs': kw}),
1050)         )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1051)         res = json.loads(cli._prompt_for_passphrase())
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1052)         err_msg = 'missing arguments to passphrase prompt'
1053)         assert 'args' in res, err_msg
1054)         assert 'kwargs' in res, err_msg
1055)         assert res['args'][:1] == ['Passphrase'], err_msg
1056)         assert res['kwargs'].get('default') == '', err_msg
1057)         assert not res['kwargs'].get('show_default', True), err_msg
1058)         assert res['kwargs'].get('err'), err_msg
1059)         assert res['kwargs'].get('hide_input'), err_msg
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1060) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1061)     @pytest.mark.parametrize(
1062)         ['command_line', 'config', 'result_config'],
1063)         [
1064)             (
1065)                 ['--delete-globals'],
1066)                 {'global': {'phrase': 'abc'}, 'services': {}},
1067)                 {'services': {}},
1068)             ),
1069)             (
1070)                 ['--delete', DUMMY_SERVICE],
1071)                 {
1072)                     'global': {'phrase': 'abc'},
1073)                     'services': {DUMMY_SERVICE: {'notes': '...'}},
1074)                 },
1075)                 {'global': {'phrase': 'abc'}, 'services': {}},
1076)             ),
1077)             (
1078)                 ['--clear'],
1079)                 {
1080)                     'global': {'phrase': 'abc'},
1081)                     'services': {DUMMY_SERVICE: {'notes': '...'}},
1082)                 },
1083)                 {'services': {}},
1084)             ),
1085)         ],
1086)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1087)     def test_203_repeated_config_deletion(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1088)         self,
1089)         monkeypatch: Any,
1090)         command_line: list[str],
1091)         config: dpp.types.VaultConfig,
1092)         result_config: dpp.types.VaultConfig,
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1093)     ) -> None:
1094)         runner = click.testing.CliRunner(mix_stderr=False)
1095)         for start_config in [config, result_config]:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1096)             with tests.isolated_config(
1097)                 monkeypatch=monkeypatch, runner=runner, config=start_config
1098)             ):
1099)                 result = runner.invoke(
1100)                     cli.derivepassphrase, command_line, catch_exceptions=False
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1101)                 )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1102)                 assert (result.exit_code, result.stderr_bytes) == (
1103)                     0,
1104)                     b'',
1105)                 ), 'program exited with failure'
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1106)                 with open(cli._config_filename(), encoding='UTF-8') as infile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1107)                     config_readback = json.load(infile)
1108)                 assert config_readback == result_config
1109) 
1110)     def test_204_phrase_from_key_manually(self) -> None:
1111)         assert (
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1112)             dpp.Vault(
1113)                 phrase=DUMMY_PHRASE_FROM_KEY1, **DUMMY_CONFIG_SETTINGS
1114)             ).generate(DUMMY_SERVICE)
1115)             == DUMMY_RESULT_KEY1
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1116)         )
1117) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1118)     @pytest.mark.parametrize(
1119)         ['vfunc', 'input'],
1120)         [
1121)             (cli._validate_occurrence_constraint, 20),
1122)             (cli._validate_length, 20),
1123)         ],
1124)     )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1125)     def test_210a_validate_constraints_manually(
1126)         self,
1127)         vfunc: Callable[[click.Context, click.Parameter, Any], int | None],
1128)         input: int,
1129)     ) -> None:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1130)         ctx = cli.derivepassphrase.make_context(cli.PROG_NAME, [])
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1131)         param = cli.derivepassphrase.params[0]
1132)         assert vfunc(ctx, param, input) == input
1133) 
1134)     @tests.skip_if_no_agent
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1135)     @pytest.mark.parametrize('conn_hint', ['none', 'socket', 'client'])
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

1136)     def test_227_get_suitable_ssh_keys(
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1137)         self,
1138)         monkeypatch: Any,
1139)         conn_hint: str,
Marco Ricci Fix miscellaneous type chec...

Marco Ricci authored 2 months ago

1140)     ) -> None:
Marco Ricci Reformat everything with ruff

Marco Ricci authored 1 month ago

1141)         monkeypatch.setattr(
1142)             ssh_agent_client.SSHAgentClient, 'list_keys', tests.list_keys
1143)         )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1144)         hint: ssh_agent_client.SSHAgentClient | socket.socket | None
1145)         match conn_hint:
1146)             case 'client':
1147)                 hint = ssh_agent_client.SSHAgentClient()
1148)             case 'socket':
1149)                 hint = socket.socket(family=socket.AF_UNIX)
1150)                 hint.connect(os.environ['SSH_AUTH_SOCK'])
1151)             case _:
1152)                 assert conn_hint == 'none'
1153)                 hint = None
1154)         exception: Exception | None = None
1155)         try:
1156)             list(cli._get_suitable_ssh_keys(hint))
1157)         except RuntimeError:  # pragma: no cover
1158)             pass
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 1 month ago

1159)         except Exception as e:  # noqa: BLE001 # pragma: no cover
Marco Ricci Rename and regroup all test...

Marco Ricci authored 2 months ago

1160)             exception = e
1161)         finally: