@@ -42,7 +42,7 @@ def test_pwned_api__leaked_password():
42
42
"0BD86C0E684498894064E4AB86B9420CA0E:763" ,
43
43
"2019C3022C39C4E5FD5A92ECD102E87476D:3" ,
44
44
"3C56EAB73498B6A58EF5692C4E4937B4466:81" ,
45
- "5565F95194F23408B0EA21A0D02C4EEA81D:2 " ,
45
+ "5565F95194F23408B0EA21A0D02C4EEA81D:1 " ,
46
46
"6E9AC9194DA65040917139BA238B3900354:2,103" ,
47
47
"BB48AB53E4E454BC487CA6400380C05D41A:5" ,
48
48
"D55A6ED26C1DE9350D40771822316CC4B29:3" ,
@@ -78,6 +78,36 @@ def test_pwned_api__strong_password():
78
78
assert len (responses .calls ) == 1
79
79
80
80
81
+ @responses .activate
82
+ def test_pwned_api__count_threshold ():
83
+ leaked_password = r"pass-word"
84
+ leaked_password_hash = "43BEF3EAB34187D71D7E1D9CC307C5E7C07665A8"
85
+ responses .add (
86
+ responses .GET ,
87
+ API_ENDPOINT .format (leaked_password_hash [:5 ]),
88
+ body = "\n " .join (
89
+ [
90
+ "0BD86C0E684498894064E4AB86B9420CA0E:763" ,
91
+ "3EAB34187D71D7E1D9CC307C5E7C07665A8:3" ,
92
+ "3C56EAB73498B6A58EF5692C4E4937B4466:81" ,
93
+ "5565F95194F23408B0EA21A0D02C4EEA81D:1" ,
94
+ "6E9AC9194DA65040917139BA238B3900354:2,103" ,
95
+ "BB48AB53E4E454BC487CA6400380C05D41A:5" ,
96
+ "D55A6ED26C1DE9350D40771822316CC4B29:3" ,
97
+ ]
98
+ ),
99
+ )
100
+ with pytest .raises (ValidationError ):
101
+ PwnedPasswordValidator ().validate (leaked_password )
102
+ with pytest .raises (ValidationError ):
103
+ PwnedPasswordValidator (count_threshold = 2 ).validate (leaked_password )
104
+ with pytest .raises (ValidationError ):
105
+ PwnedPasswordValidator (count_threshold = 3 ).validate (leaked_password )
106
+ PwnedPasswordValidator (count_threshold = 4 ).validate (leaked_password )
107
+ PwnedPasswordValidator (count_threshold = 5 ).validate (leaked_password )
108
+ assert len (responses .calls ) == 5
109
+
110
+
81
111
@responses .activate
82
112
def test_pwned_api__connection_error ():
83
113
strong_password = r"SGz=L.%U\;Os$,k]%U2m"
0 commit comments