diff --git a/CHANGELOG.md b/CHANGELOG.md index bd10f620b3..7d4ff011ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## HEAD Unreleased ### Bug/Fixes +- [PR #1368](https://github.com/stympy/faker/pull/1368) Don't force enforce_available_locales [@deivid-rodriguez](https://github.com/deivid-rodriguez) +- [PR #1355](https://github.com/stympy/faker/pull/1355) Fix global clear of unique values for Faker::UniqueGenerator [@kolasss](https://github.com/kolasss) - [PR #1335](https://github.com/stympy/faker/pull/1335) Fix Company.luhn_algorithm and add missing tests [@01max](https://github.com/01max) - [PR #1334](https://github.com/stympy/faker/pull/1334) Faker::Number.leading_zero_number should always start with 0 [@vbrazo](https://github.com/vbrazo) - [PR #1317](https://github.com/stympy/faker/pull/1317) Change Faker::Lorem.multibyte logic [@ShabelnikM](https://github.com/ShabelnikM) @@ -27,6 +29,7 @@ - [PR #1329](https://github.com/stympy/faker/pull/1329) Update docs on behavior of price [@softwaregravy](https://github.com/softwaregravy) ### Feature Request +- [PR #1156](https://github.com/stympy/faker/pull/1156) Add Faker::Json [@the-wendell](https://github.com/the-wendell) - [PR #1359](https://github.com/stympy/faker/pull/1359) Add Faker::Tezos [@Pierre-Michard](https://github.com/Pierre-Michard) - [PR #1366](https://github.com/stympy/faker/pull/1366) Add Faker::Seinfeld.business [@dsgraham](https://github.com/dsgraham) - [PR #1358](https://github.com/stympy/faker/pull/1358) Add cat breed for Japanese [@yizknn](https://github.com/yizknn) diff --git a/lib/helpers/unique_generator.rb b/lib/helpers/unique_generator.rb index f734785efb..086dfb37b9 100644 --- a/lib/helpers/unique_generator.rb +++ b/lib/helpers/unique_generator.rb @@ -10,13 +10,14 @@ class << self def initialize(generator, max_retries) @generator = generator - self.class.marked_unique.add(self) @max_retries = max_retries @previous_results = Hash.new { |hash, key| hash[key] = Set.new } end # rubocop:disable Style/MethodMissingSuper def method_missing(name, *arguments) + self.class.marked_unique.add(self) + @max_retries.times do result = @generator.public_send(name, *arguments) diff --git a/test/test_faker_unique_generator.rb b/test/test_faker_unique_generator.rb index 739fa3135f..05b1505242 100644 --- a/test/test_faker_unique_generator.rb +++ b/test/test_faker_unique_generator.rb @@ -63,7 +63,7 @@ def stubbed_generator.test generator.test end - Faker::UniqueGenerator.clear + generator.clear assert_equal(1, generator.test) @@ -75,4 +75,50 @@ def stubbed_generator.test assert_equal(1, generator.test) end + + def test_clears_unique_values_for_all_generators + stubbed_generator = Object.new + def stubbed_generator.test + 1 + end + + stubbed_generator2 = Object.new + def stubbed_generator2.test + 2 + end + + generator1 = Faker::UniqueGenerator.new(stubbed_generator, 3) + generator2 = Faker::UniqueGenerator.new(stubbed_generator2, 3) + + assert_equal(1, generator1.test) + assert_equal(2, generator2.test) + + assert_raises Faker::UniqueGenerator::RetryLimitExceeded do + generator1.test + end + assert_raises Faker::UniqueGenerator::RetryLimitExceeded do + generator2.test + end + + Faker::UniqueGenerator.clear + + assert_nothing_raised Faker::UniqueGenerator::RetryLimitExceeded do + assert_equal(1, generator1.test) + assert_equal(2, generator2.test) + end + + assert_raises Faker::UniqueGenerator::RetryLimitExceeded do + generator1.test + end + assert_raises Faker::UniqueGenerator::RetryLimitExceeded do + generator2.test + end + + Faker::UniqueGenerator.clear + + assert_nothing_raised Faker::UniqueGenerator::RetryLimitExceeded do + assert_equal(1, generator1.test) + assert_equal(2, generator2.test) + end + end end