From caa55073c3217c65c4929c49d48cf5b0617d5fb6 Mon Sep 17 00:00:00 2001 From: Adam Tanner <27502+admtnnr@users.noreply.github.com> Date: Fri, 6 Sep 2024 12:12:05 -0400 Subject: [PATCH] Faker::Alphanumeric.alphanumeric determinism fix (#2996) * Faker::Alphanumeric.alphanumeric determinism fix * Faker::Alphanumeric.alphanumeric changes from PR feedback --- lib/faker.rb | 4 ++++ lib/faker/default/alphanumeric.rb | 2 +- test/faker/default/test_alphanum.rb | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/faker.rb b/lib/faker.rb index ad286e67f0..46c2547dd7 100644 --- a/lib/faker.rb +++ b/lib/faker.rb @@ -249,6 +249,10 @@ def shuffle(list) list.shuffle(random: Faker::Config.random) end + def shuffle!(list) + list.shuffle!(random: Faker::Config.random) + end + def rand(max = nil) if max.nil? Faker::Config.random.rand diff --git a/lib/faker/default/alphanumeric.rb b/lib/faker/default/alphanumeric.rb index 83caf4ec23..7ddaa5ff62 100644 --- a/lib/faker/default/alphanumeric.rb +++ b/lib/faker/default/alphanumeric.rb @@ -60,7 +60,7 @@ def alphanumeric(number: 32, min_alpha: 0, min_numeric: 0) randoms = Array.new(random_count) { sample(ALPHANUMS) } combined = alphas + numbers + randoms - combined.shuffle.join + shuffle!(combined).join end end end diff --git a/test/faker/default/test_alphanum.rb b/test/faker/default/test_alphanum.rb index 7b4ed11fdb..bcaf856054 100644 --- a/test/faker/default/test_alphanum.rb +++ b/test/faker/default/test_alphanum.rb @@ -48,4 +48,12 @@ def test_alphanumeric_with_min_numeric assert_operator numbers.compact.size, :>=, 4 end + + def test_alphanumeric_with_min_alpha_and_min_numeric + deterministically_verify -> { @tester.alphanumeric(number: 10, min_alpha: 5, min_numeric: 5) } do |alphanum| + assert_equal 10, alphanum.size + assert_equal 5, alphanum.scan(/[[:alpha:]]/).size + assert_equal 5, alphanum.scan(/[[:digit:]]/).size + end + end end