407bbddff031476549ae018bbe5de566a3b1f738
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

1) # SPDX-FileCopyrightText: 2024 Marco Ricci <m@the13thletter.info>
2) #
3) # SPDX-License-Identifier: MIT
4) 
5) """Test passphrase generation via derivepassphrase.Vault."""
6) 
7) import pytest
8) 
9) import derivepassphrase
10) import sequin
11) 
12) Vault = derivepassphrase.Vault
13) phrase = b'She cells C shells bye the sea shoars'
14) 
15) @pytest.mark.parametrize('service,expected', [
16)     (b'google', rb': 4TVH#5:aZl8LueOT\{'),
17)     ('twitter', rb"[ (HN_N:lI&<ro=)3'g9"),
18) ])
19) def test_200_basic_configuration(service, expected):
20)     assert Vault(phrase=phrase).generate(service) == expected
21) 
22) def test_201_phrase_dependence():
23)     assert (
24)         Vault(phrase=(phrase + b'X')).generate('google') ==
25)         b'n+oIz6sL>K*lTEWYRO%7'
26)     )
27) 
28) def test_202_reproducibility_and_bytes_service_name():
29)     assert (
30)         Vault(phrase=phrase).generate(b'google') ==
31)         Vault(phrase=phrase).generate('google')
32)     )
33) 
Marco Ricci Add test for service name b...

Marco Ricci authored 3 months ago

34) def test_203_reproducibility_and_bytearray_service_name():
35)     assert (
36)         Vault(phrase=phrase).generate(b'google') ==
37)         Vault(phrase=phrase).generate(bytearray(b'google'))
38)     )
39) 
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

40) def test_210_nonstandard_length():
41)     assert Vault(phrase=phrase, length=4).generate('google') == b'xDFu'
42) 
43) def test_211_repetition_limit():
44)     assert (
45)         Vault(phrase=b'', length=24, symbol=0, number=0,
46)               repeat=1).generate('asd') ==
47)         b'IVTDzACftqopUXqDHPkuCIhV'
48)     )
49) 
50) def test_212_without_symbols():
51)     assert (
52)         Vault(phrase=phrase, symbol=0).generate('google') ==
53)         b'XZ4wRe0bZCazbljCaMqR'
54)     )
55) 
56) def test_213_too_many_symbols():
57)     with pytest.raises(ValueError,
58)                        match='requested passphrase length too short'):
59)         Vault(phrase=phrase, symbol=100)
60) 
61) def test_214_no_numbers():
62)     assert (
63)         Vault(phrase=phrase, number=0).generate('google') ==
64)         b'_*$TVH.%^aZl(LUeOT?>'
65)     )
66) 
67) def test_214_no_lowercase_letters():
68)     assert (
69)         Vault(phrase=phrase, lower=0).generate('google') ==
70)         b':{?)+7~@OA:L]!0E$)(+'
71)     )
72) 
73) def test_215_at_least_5_digits():
74)     assert (
75)         Vault(phrase=phrase, length=8, number=5).generate('songkick') ==
76)         b'i0908.7['
77)     )
78) 
79) def test_216_lots_of_spaces():
80)     assert (
81)         Vault(phrase=phrase, space=12).generate('songkick') ==
82)         b' c   6 Bq  % 5fR    '
83)     )
84) 
85) def test_217_no_viable_characters():
86)     with pytest.raises(ValueError,
87)                        match='no allowed characters left'):
88)         Vault(phrase=phrase, lower=0, upper=0, number=0,
89)               space=0, dash=0, symbol=0)
90) 
91) def test_218_all_character_classes():
92)     assert (
93)         Vault(phrase=phrase, lower=2, upper=2, number=1,
94)               space=3, dash=2, symbol=1).generate('google') ==
95)         b': : fv_wqt>a-4w1S  R'
96)     )