0be132367e57855736c2c4163dd6c606f2b88d23
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 3 weeks ago

1) # SPDX-FileCopyrightText: 2024 Marco Ricci <m@the13thletter.info>
2) #
3) # SPDX-License-Identifier: MIT
4) 
5) from __future__ import annotations
6) 
7) import json
8) import os
9) from typing import Any
10) 
11) import click.testing
12) import pytest
13) 
14) import tests
15) from derivepassphrase import exporter
Marco Ricci Move exporter command-line...

Marco Ricci authored 2 weeks ago

16) from derivepassphrase.exporter import cli
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 3 weeks ago

17) 
18) 
19) class Test001ExporterUtils:
20)     @pytest.mark.parametrize(
21)         ['expected', 'vault_key', 'logname', 'user', 'username'],
22)         [
23)             ('4username', None, None, None, '4username'),
24)             ('3user', None, None, '3user', None),
25)             ('3user', None, None, '3user', '4username'),
26)             ('2logname', None, '2logname', None, None),
27)             ('2logname', None, '2logname', None, '4username'),
28)             ('2logname', None, '2logname', '3user', None),
29)             ('2logname', None, '2logname', '3user', '4username'),
30)             ('1vault_key', '1vault_key', None, None, None),
31)             ('1vault_key', '1vault_key', None, None, '4username'),
32)             ('1vault_key', '1vault_key', None, '3user', None),
33)             ('1vault_key', '1vault_key', None, '3user', '4username'),
34)             ('1vault_key', '1vault_key', '2logname', None, None),
35)             ('1vault_key', '1vault_key', '2logname', None, '4username'),
36)             ('1vault_key', '1vault_key', '2logname', '3user', None),
37)             ('1vault_key', '1vault_key', '2logname', '3user', '4username'),
38)         ],
39)     )
40)     def test200_get_vault_key(
41)         self,
42)         monkeypatch: pytest.MonkeyPatch,
43)         expected: str,
44)         vault_key: str | None,
45)         logname: str | None,
46)         user: str | None,
47)         username: str | None,
48)     ) -> None:
49)         priority_list = [
50)             ('VAULT_KEY', vault_key),
51)             ('LOGNAME', logname),
52)             ('USER', user),
53)             ('USERNAME', username),
54)         ]
55)         runner = click.testing.CliRunner(mix_stderr=False)
56)         with tests.isolated_vault_exporter_config(
57)             monkeypatch=monkeypatch, runner=runner
58)         ):
59)             for key, value in priority_list:
60)                 if value is not None:
61)                     monkeypatch.setenv(key, value)
62)             assert os.fsdecode(exporter.get_vault_key()) == expected
63) 
64)     @pytest.mark.parametrize(
65)         ['expected', 'path'],
66)         [
67)             ('/tmp', '/tmp'),
68)             ('~', os.path.curdir),
69)             ('~/.vault', None),
70)         ],
71)     )
72)     def test_210_get_vault_path(
73)         self,
74)         monkeypatch: pytest.MonkeyPatch,
75)         expected: str,
76)         path: str | None,
77)     ) -> None:
78)         runner = click.testing.CliRunner(mix_stderr=False)
79)         with tests.isolated_vault_exporter_config(
80)             monkeypatch=monkeypatch, runner=runner
81)         ):
82)             if path:
83)                 monkeypatch.setenv('VAULT_PATH', path)
84)             assert os.fsdecode(
85)                 os.path.realpath(exporter.get_vault_path())
86)             ) == os.path.realpath(os.path.expanduser(expected))
87) 
88)     def test_300_get_vault_key_without_envs(
89)         self, monkeypatch: pytest.MonkeyPatch
90)     ) -> None:
91)         monkeypatch.delenv('VAULT_KEY', raising=False)
92)         monkeypatch.delenv('LOGNAME', raising=False)
93)         monkeypatch.delenv('USER', raising=False)
94)         monkeypatch.delenv('USERNAME', raising=False)
95)         with pytest.raises(KeyError, match='VAULT_KEY'):
96)             exporter.get_vault_key()
97) 
98)     def test_310_get_vault_path_without_home(
99)         self, monkeypatch: pytest.MonkeyPatch
100)     ) -> None:
101)         monkeypatch.setattr(os.path, 'expanduser', lambda x: x)
102)         with pytest.raises(
103)             RuntimeError, match='[Cc]annot determine home directory'
104)         ):
105)             exporter.get_vault_path()
106) 
107) 
108) class Test002CLI:
109)     def test_300_invalid_format(
110)         self,
111)         monkeypatch: pytest.MonkeyPatch,
112)     ) -> None:
113)         runner = click.testing.CliRunner(mix_stderr=False)
114)         with tests.isolated_vault_exporter_config(
115)             monkeypatch=monkeypatch,
116)             runner=runner,
Marco Ricci Move exporter command-line...

Marco Ricci authored 2 weeks ago

117)             vault_config=tests.VAULT_V03_CONFIG,
118)             vault_key=tests.VAULT_MASTER_KEY,
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 3 weeks ago

119)         ):
120)             result = runner.invoke(
Marco Ricci Move exporter command-line...

Marco Ricci authored 2 weeks ago

121)                 cli.derivepassphrase_export,