Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/helpers/unique_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ def self.clear
end

def exclude(name, arguments, values)
self.class.marked_unique.add(self)
values ||= []
values.each do |value|
previous_results[[name, arguments]] << value
Expand Down
48 changes: 48 additions & 0 deletions test/faker/default/test_faker_unique_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,54 @@ def stubbed_generator2.test
end
end

def test_global_clear_removes_exclusions_before_first_generation
source = Object.new
def source.value
1
end

generator = Faker::UniqueGenerator.new(source, 3)
generator.exclude(:value, [], [1])

Faker::UniqueGenerator.clear

assert_equal(1, generator.value)
end

def test_global_clear_removes_exclusions_after_previous_clear
source = Object.new
def source.value
1
end

generator = Faker::UniqueGenerator.new(source, 3)

assert_equal(1, generator.value)
Faker::UniqueGenerator.clear
generator.exclude(:value, [], [1])
Faker::UniqueGenerator.clear

assert_equal(1, generator.value)
end

def test_global_clear_keeps_exclusions_in_other_threads
source = Object.new
def source.value
1
end

generator = Faker::UniqueGenerator.new(source, 3)
generator.exclude(:value, [], [1])
Thread.new { Faker::UniqueGenerator.clear }.join

assert_raises Faker::UniqueGenerator::RetryLimitExceeded do
generator.value
end
Faker::UniqueGenerator.clear

assert_equal(1, generator.value)
end

def test_thread_safety
stubbed_generator = Object.new
def stubbed_generator.test
Expand Down