1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
# frozen_string_literal: true
require_relative '../../test_helper'
class TestFakerUniqueGenerator < Test::Unit::TestCase
def test_generates_unique_values
generator = Faker::UniqueGenerator.new(Faker::Base, 10_000)
result = [generator.rand_in_range(1, 2), generator.rand_in_range(1, 2)]
assert_equal([1, 2], result.sort)
end
def test_respond_to_missing
stubbed_generator = Object.new
generator = Faker::UniqueGenerator.new(stubbed_generator, 3)
assert(generator.send(:respond_to_missing?, 'faker_address'))
refute(generator.send(:respond_to_missing?, 'address'))
end
def test_returns_error_when_retries_exceeded
stubbed_generator = Object.new
def stubbed_generator.test
1
end
generator = Faker::UniqueGenerator.new(stubbed_generator, 3)
generator.test
assert_raises Faker::UniqueGenerator::RetryLimitExceeded do
generator.test
end
end
def test_includes_field_name_in_error
stubbed_generator = Object.new
def stubbed_generator.my_field
1
end
generator = Faker::UniqueGenerator.new(stubbed_generator, 3)
generator.my_field
assert_raise_message 'Retry limit exceeded for my_field' do
generator.my_field
end
end
def test_clears_unique_values
stubbed_generator = Object.new
def stubbed_generator.test
1
end
generator = Faker::UniqueGenerator.new(stubbed_generator, 3)
assert_equal(1, generator.test)
assert_raises Faker::UniqueGenerator::RetryLimitExceeded do
generator.test
end
generator.clear
assert_equal(1, generator.test)
assert_raises Faker::UniqueGenerator::RetryLimitExceeded do
generator.test
end
generator.clear
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
def test_thread_safety
stubbed_generator = Object.new
def stubbed_generator.test
1
end
generator = Faker::UniqueGenerator.new(stubbed_generator, 3)
Thread.new do
assert_equal(1, generator.test)
assert_raises Faker::UniqueGenerator::RetryLimitExceeded do
generator.test
end
end.join
Thread.new do
assert_equal(1, generator.test)
end.join
assert_equal(1, generator.test)
assert_raises Faker::UniqueGenerator::RetryLimitExceeded do
generator.test
end
Thread.new do
generator.clear
end.join
assert_raises Faker::UniqueGenerator::RetryLimitExceeded do
generator.test
end
generator.clear
assert_equal(1, generator.test)
end
end
|