From 8cea85ff85e43a4a083af1102a2d4c5e293da70d Mon Sep 17 00:00:00 2001 From: Adrian Rivera Date: Thu, 1 Oct 2020 20:29:12 -0700 Subject: [PATCH] Fixes a bug when generating passwords with min_length eq 1 --- lib/faker/default/internet.rb | 6 +++++- test/faker/default/test_faker_internet.rb | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/faker/default/internet.rb b/lib/faker/default/internet.rb index 57ec2b9e7b..3dfbec43f0 100644 --- a/lib/faker/default/internet.rb +++ b/lib/faker/default/internet.rb @@ -115,7 +115,11 @@ def password(legacy_min_length = NOT_GIVEN, legacy_max_length = NOT_GIVEN, legac keywords << :special_characters if legacy_special_characters != NOT_GIVEN end - min_alpha = mix_case ? 2 : 0 + min_alpha = if mix_case && min_length > 1 + 2 + else + 0 + end temp = Lorem.characters(number: min_length, min_alpha: min_alpha) diff_length = max_length - min_length diff --git a/test/faker/default/test_faker_internet.rb b/test/faker/default/test_faker_internet.rb index 9454f617b1..f56c74a936 100644 --- a/test/faker/default/test_faker_internet.rb +++ b/test/faker/default/test_faker_internet.rb @@ -145,6 +145,20 @@ def test_password_with_mixed_case assert downcase_count >= 1 end + def test_password_with_min_length_eq_1 + min_length = 1 + password = @tester.password(min_length: min_length) + assert password.match(/\w+/) + end + + def test_password_with_min_length_and_max_length + min_length = 2 + max_length = 5 + password = @tester.password(min_length: min_length, max_length: max_length) + assert password.match(/\w+/) + assert (min_length..max_length).include?(password.size), 'Password size is incorrect' + end + def test_password_without_mixed_case assert @tester.password(min_length: 8, max_length: 12, mix_case: false).match(/[^A-Z]+/) end