@@ -232,8 +232,8 @@ def test_password_with_min_length_eq_1_without_mix_case
232232 end
233233
234234 def test_password_with_min_length_and_max_length
235- min_length = 2
236- max_length = 5
235+ min_length = 3
236+ max_length = 6
237237 password = @tester . password ( min_length : min_length , max_length : max_length )
238238
239239 assert_match ( /\w +/ , password )
@@ -265,34 +265,39 @@ def test_password_without_special_chars
265265 assert_match ( /[^!@#$%\^ &*]+/ , @tester . password ( min_length : 8 , max_length : 12 , mix_case : true ) )
266266 end
267267
268- def test_password_with_special_chars_and_mixed_case
268+ def test_password_with_digits
269+ assert_match ( /[0-9]+/ , @tester . password ( min_length : 8 , max_length : 12 , digits : true ) )
270+ end
271+
272+ def test_password_without_digits
273+ assert_match ( /^[^0-9]+$/ , @tester . password ( min_length : 8 , max_length : 12 , digits : false ) )
274+ end
275+
276+ def test_password_with_special_chars_and_mixed_case_and_digits
269277 32 . times do
270- password = @tester . password ( min_length : 4 , max_length : 6 , mix_case : true , special_characters : true )
278+ password = @tester . password ( min_length : 4 , max_length : 6 , mix_case : true , special_characters : true , digits : true )
271279
272- assert_match ( /[!@#$%\^ &*]+/ , password )
273- assert_match ( /[A-z]+/ , password )
280+ assert_match ( /^[A-Za-z0-9!@#$%\^ &*]+$/ , password )
274281 end
275282 end
276283
277- def test_deterministic_password_with_special_chars_and_mixed_case
278- deterministically_verify -> { @tester . password ( min_length : 4 , max_length : 6 , mix_case : true , special_characters : true ) } , depth : 4 do |password |
279- assert_match ( /[!@#$%\^ &*]+/ , password )
280- assert_match ( /[A-z]+/ , password )
284+ def test_deterministic_password_with_special_chars_and_mixed_case_and_digits
285+ deterministically_verify -> { @tester . password ( min_length : 4 , max_length : 6 , mix_case : true , special_characters : true , digits : true ) } , depth : 4 do |password |
286+ assert_match ( /^[A-Za-z0-9!@#$%\^ &*]+$/ , password )
281287 end
282288 end
283289
284- def test_password_with_special_chars_and_mixed_case_on_3chars_password
290+ def test_password_with_special_chars_and_mixed_case_and_digits_on_4chars_password
285291 16 . times do
286- password = @tester . password ( min_length : 3 , max_length : 6 , mix_case : true , special_characters : true )
292+ password = @tester . password ( min_length : 4 , max_length : 6 , mix_case : true , special_characters : true , digits : true )
287293
288- assert_match ( /[!@#$%\^ &*]+/ , password )
289- assert_match ( /[A-z]+/ , password )
294+ assert_match ( /^[A-Za-z0-9!@#$%\^ &*]+$/ , password )
290295 end
291296 end
292297
293- def test_password_with_invalid_min_length_for_mix_case_and_special_characters
294- assert_raise_message 'min_length should be at least 3 to enable mix_case, special_characters configuration' do
295- @tester . password ( min_length : 1 , mix_case : true , special_characters : true )
298+ def test_password_with_invalid_min_length_for_mix_case_and_special_characters_and_digits
299+ assert_raise_message 'min_length should be at least 4 to enable mix_case, special_characters, digits configuration' do
300+ @tester . password ( min_length : 1 , mix_case : true , special_characters : true , digits : true )
296301 end
297302 end
298303
@@ -306,35 +311,52 @@ def test_password_with_invalid_min_max_length
306311
307312 def test_password_with_invalid_min_length_for_special_characters_only
308313 error = assert_raises ( ArgumentError ) do
309- @tester . password ( min_length : 0 , mix_case : false , special_characters : true )
314+ @tester . password ( min_length : 0 , mix_case : false , special_characters : true , digits : false )
310315 end
311316
312317 assert_equal 'min_length and max_length must be greater than or equal to one' , error . message
313318 end
314319
315320 def test_password_with_invalid_min_length_for_mix_case_only
316321 error = assert_raises ( ArgumentError ) do
317- @tester . password ( min_length : 1 , mix_case : true )
322+ @tester . password ( min_length : 1 , mix_case : true , special_characters : false , digits : false )
318323 end
319324
320325 assert_equal 'min_length should be at least 2 to enable mix_case configuration' , error . message
321326 end
322327
328+ def test_password_with_invalid_min_length_for_digits_only
329+ error = assert_raises ( ArgumentError ) do
330+ @tester . password ( min_length : 0 , mix_case : false , special_characters : false , digits : true )
331+ end
332+
333+ assert_equal 'min_length and max_length must be greater than or equal to one' , error . message
334+ end
335+
323336 def test_password_with_compatible_min_length_and_requirements
324337 assert_nothing_raised do
325- [ false , true ] . each do |value |
326- min_length = value ? 2 : 1
327- @tester . password ( min_length : min_length , mix_case : value , special_characters : !value )
338+ [ false , true ] . each do |mix_case |
339+ [ false , true ] . each do |special_characters |
340+ [ false , true ] . each do |digits |
341+ min_length = [ [ mix_case ? 2 : 0 , special_characters ? 1 : 0 , digits ? 1 : 0 ] . sum , 1 ] . max
342+
343+ @tester . password ( min_length : min_length , mix_case : mix_case , special_characters : special_characters , digits : digits )
344+ end
345+ end
328346 end
329347 end
330348 end
331349
332350 def test_deterministic_password_with_compatible_min_length_and_requirements
333- [ false , true ] . each do |value |
334- min_length = value ? 2 : 1
335-
336- deterministically_verify -> { @tester . password ( min_length : min_length , mix_case : value , special_characters : !value ) } , depth : 4 do |password |
337- assert_nothing_raised { password }
351+ [ false , true ] . each do |mix_case |
352+ [ false , true ] . each do |special_characters |
353+ [ false , true ] . each do |digits |
354+ min_length = [ [ mix_case ? 2 : 0 , special_characters ? 1 : 0 , digits ? 1 : 0 ] . sum , 1 ] . max
355+
356+ deterministically_verify -> { @tester . password ( min_length : min_length , mix_case : mix_case , special_characters : special_characters , digits : digits ) } , depth : 4 do |password |
357+ assert_nothing_raised { password }
358+ end
359+ end
338360 end
339361 end
340362 end
0 commit comments