@@ -232,8 +232,8 @@ def test_password_with_min_length_eq_1_without_mix_case
232
232
end
233
233
234
234
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
237
237
password = @tester . password ( min_length : min_length , max_length : max_length )
238
238
239
239
assert_match ( /\w +/ , password )
@@ -265,34 +265,45 @@ def test_password_without_special_chars
265
265
assert_match ( /[^!@#$%\^ &*]+/ , @tester . password ( min_length : 8 , max_length : 12 , mix_case : true ) )
266
266
end
267
267
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
269
277
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 )
271
279
272
280
assert_match ( /[!@#$%\^ &*]+/ , password )
273
281
assert_match ( /[A-z]+/ , password )
282
+ assert_match ( /[0-9]+/ , password )
274
283
end
275
284
end
276
285
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 |
286
+ def test_deterministic_password_with_special_chars_and_mixed_case_and_digits
287
+ deterministically_verify -> { @tester . password ( min_length : 4 , max_length : 6 , mix_case : true , special_characters : true , digits : true ) } , depth : 4 do |password |
279
288
assert_match ( /[!@#$%\^ &*]+/ , password )
280
289
assert_match ( /[A-z]+/ , password )
290
+ assert_match ( /[0-9]+/ , password )
281
291
end
282
292
end
283
293
284
- def test_password_with_special_chars_and_mixed_case_on_3chars_password
294
+ def test_password_with_special_chars_and_mixed_case_and_digits_on_4chars_password
285
295
16 . times do
286
- password = @tester . password ( min_length : 3 , max_length : 6 , mix_case : true , special_characters : true )
296
+ password = @tester . password ( min_length : 4 , max_length : 6 , mix_case : true , special_characters : true , digits : true )
287
297
288
298
assert_match ( /[!@#$%\^ &*]+/ , password )
289
299
assert_match ( /[A-z]+/ , password )
300
+ assert_match ( /[0-9]+/ , password )
290
301
end
291
302
end
292
303
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 )
304
+ def test_password_with_invalid_min_length_for_mix_case_and_special_characters_and_digits
305
+ assert_raise_message 'min_length should be at least 4 to enable mix_case, special_characters, digits configuration' do
306
+ @tester . password ( min_length : 1 , mix_case : true , special_characters : true , digits : true )
296
307
end
297
308
end
298
309
@@ -306,35 +317,52 @@ def test_password_with_invalid_min_max_length
306
317
307
318
def test_password_with_invalid_min_length_for_special_characters_only
308
319
error = assert_raises ( ArgumentError ) do
309
- @tester . password ( min_length : 0 , mix_case : false , special_characters : true )
320
+ @tester . password ( min_length : 0 , mix_case : false , special_characters : true , digits : false )
310
321
end
311
322
312
323
assert_equal 'min_length and max_length must be greater than or equal to one' , error . message
313
324
end
314
325
315
326
def test_password_with_invalid_min_length_for_mix_case_only
316
327
error = assert_raises ( ArgumentError ) do
317
- @tester . password ( min_length : 1 , mix_case : true )
328
+ @tester . password ( min_length : 1 , mix_case : true , special_characters : false , digits : false )
318
329
end
319
330
320
331
assert_equal 'min_length should be at least 2 to enable mix_case configuration' , error . message
321
332
end
322
333
334
+ def test_password_with_invalid_min_length_for_digits_only
335
+ error = assert_raises ( ArgumentError ) do
336
+ @tester . password ( min_length : 0 , mix_case : false , special_characters : false , digits : true )
337
+ end
338
+
339
+ assert_equal 'min_length and max_length must be greater than or equal to one' , error . message
340
+ end
341
+
323
342
def test_password_with_compatible_min_length_and_requirements
324
343
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 )
344
+ [ false , true ] . each do |mix_case |
345
+ [ false , true ] . each do |special_characters |
346
+ [ false , true ] . each do |digits |
347
+ min_length = [ [ mix_case ? 2 : 0 , special_characters ? 1 : 0 , digits ? 1 : 0 ] . sum , 1 ] . max
348
+
349
+ @tester . password ( min_length : min_length , mix_case : mix_case , special_characters : special_characters , digits : digits )
350
+ end
351
+ end
328
352
end
329
353
end
330
354
end
331
355
332
356
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 }
357
+ [ false , true ] . each do |mix_case |
358
+ [ false , true ] . each do |special_characters |
359
+ [ false , true ] . each do |digits |
360
+ min_length = [ [ mix_case ? 2 : 0 , special_characters ? 1 : 0 , digits ? 1 : 0 ] . sum , 1 ] . max
361
+
362
+ deterministically_verify -> { @tester . password ( min_length : min_length , mix_case : mix_case , special_characters : special_characters , digits : digits ) } , depth : 4 do |password |
363
+ assert_nothing_raised { password }
364
+ end
365
+ end
338
366
end
339
367
end
340
368
end
0 commit comments