6e05ad2a2a6d8de341a84dc8257911e21538c64e
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py   1) # SPDX-FileCopyrightText: 2024 Marco Ricci <m@the13thletter.info>
tests/test_passphrase_generating.py   2) #
tests/test_passphrase_generating.py   3) # SPDX-License-Identifier: MIT
tests/test_passphrase_generating.py   4) 
tests/test_passphrase_generating.py   5) """Test passphrase generation via derivepassphrase.Vault."""
tests/test_passphrase_generating.py   6) 
Marco Ricci Expose some functionality f...

Marco Ricci authored 2 months ago

tests/test_passphrase_generating.py   7) from __future__ import annotations
tests/test_passphrase_generating.py   8) 
tests/test_passphrase_generating.py   9) import math
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py  10) 
tests/test_passphrase_generating.py  11) import derivepassphrase
tests/test_passphrase_generating.py  12) import sequin
Marco Ricci Expose some functionality f...

Marco Ricci authored 2 months ago

tests/test_passphrase_generating.py  13) import pytest
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py  14) 
tests/test_passphrase_generating.py  15) Vault = derivepassphrase.Vault
tests/test_passphrase_generating.py  16) phrase = b'She cells C shells bye the sea shoars'
Marco Ricci Expose some functionality f...

Marco Ricci authored 2 months ago

tests/test_passphrase_generating.py  17) google_phrase = rb': 4TVH#5:aZl8LueOT\{'
tests/test_passphrase_generating.py  18) twitter_phrase = rb"[ (HN_N:lI&<ro=)3'g9"
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py  19) 
Marco Ricci Expose some functionality f...

Marco Ricci authored 2 months ago

tests/test_passphrase_generating.py  20) @pytest.mark.parametrize(['service', 'expected'], [
tests/test_passphrase_generating.py  21)     (b'google', google_phrase),
tests/test_passphrase_generating.py  22)     ('twitter', twitter_phrase),
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py  23) ])
tests/test_passphrase_generating.py  24) def test_200_basic_configuration(service, expected):
tests/test_passphrase_generating.py  25)     assert Vault(phrase=phrase).generate(service) == expected
tests/test_passphrase_generating.py  26) 
tests/test_passphrase_generating.py  27) def test_201_phrase_dependence():
tests/test_passphrase_generating.py  28)     assert (
tests/test_passphrase_generating.py  29)         Vault(phrase=(phrase + b'X')).generate('google') ==
tests/test_passphrase_generating.py  30)         b'n+oIz6sL>K*lTEWYRO%7'
tests/test_passphrase_generating.py  31)     )
tests/test_passphrase_generating.py  32) 
tests/test_passphrase_generating.py  33) def test_202_reproducibility_and_bytes_service_name():
tests/test_passphrase_generating.py  34)     assert (
tests/test_passphrase_generating.py  35)         Vault(phrase=phrase).generate(b'google') ==
tests/test_passphrase_generating.py  36)         Vault(phrase=phrase).generate('google')
tests/test_passphrase_generating.py  37)     )
tests/test_passphrase_generating.py  38) 
Marco Ricci Add test for service name b...

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py  39) def test_203_reproducibility_and_bytearray_service_name():
tests/test_passphrase_generating.py  40)     assert (
tests/test_passphrase_generating.py  41)         Vault(phrase=phrase).generate(b'google') ==
tests/test_passphrase_generating.py  42)         Vault(phrase=phrase).generate(bytearray(b'google'))
tests/test_passphrase_generating.py  43)     )
tests/test_passphrase_generating.py  44) 
Marco Ricci Add unit tests, both new an...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py 102) 
tests/test_passphrase_generating.py 103) def test_219_only_numbers_and_very_high_repetition_limit():
tests/test_passphrase_generating.py 104)     generated = Vault(phrase=b'', length=40, lower=0, upper=0, space=0,
tests/test_passphrase_generating.py 105)                       dash=0, symbol=0, repeat=4).generate('abcdef')
tests/test_passphrase_generating.py 106)     assert b'0000' not in generated
tests/test_passphrase_generating.py 107)     assert b'1111' not in generated
tests/test_passphrase_generating.py 108)     assert b'2222' not in generated
tests/test_passphrase_generating.py 109)     assert b'3333' not in generated
tests/test_passphrase_generating.py 110)     assert b'4444' not in generated
tests/test_passphrase_generating.py 111)     assert b'5555' not in generated
tests/test_passphrase_generating.py 112)     assert b'6666' not in generated
tests/test_passphrase_generating.py 113)     assert b'7777' not in generated
tests/test_passphrase_generating.py 114)     assert b'8888' not in generated
tests/test_passphrase_generating.py 115)     assert b'9999' not in generated
tests/test_passphrase_generating.py 116) 
tests/test_passphrase_generating.py 117) def test_220_very_limited_character_set():
tests/test_passphrase_generating.py 118)     generated = Vault(phrase=b'', length=24, lower=0, upper=0,
tests/test_passphrase_generating.py 119)                       space=0, symbol=0).generate('testing')
tests/test_passphrase_generating.py 120)     assert b'763252593304946694588866' == generated
Marco Ricci Fix character set subtracti...

Marco Ricci authored 3 months ago

tests/test_passphrase_generating.py 121) 
tests/test_passphrase_generating.py 122) def test_300_character_set_subtraction():
tests/test_passphrase_generating.py 123)     assert Vault._subtract(b'be', b'abcdef') == bytearray(b'acdf')
tests/test_passphrase_generating.py 124) 
tests/test_passphrase_generating.py 125) def test_301_character_set_subtraction_duplicate():
tests/test_passphrase_generating.py 126)     with pytest.raises(ValueError, match='duplicate characters'):
tests/test_passphrase_generating.py 127)         Vault._subtract(b'abcdef', b'aabbccddeeff')
tests/test_passphrase_generating.py 128)     with pytest.raises(ValueError, match='duplicate characters'):
tests/test_passphrase_generating.py 129)         Vault._subtract(b'aabbccddeeff', b'abcdef')