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
3 changes: 2 additions & 1 deletion lib/fbe/if_absent.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ def Fbe.if_absent(fb: Fbe.fb, always: false)
k = k[0..-2].to_sym
v = args[1]
raise(Fbe::Error, "Can't set #{k} to nil") if v.nil?
raise(Fbe::Error, "Can't set #{k} to empty string") if v.is_a?(String) && v.empty?
raise(Fbe::Error, "Can't set #{k} to empty string") if v == ''
raise(Fbe::Error, "Can't set #{k} to #{v.inspect}, it is already #{@map[k].inspect}") if @map.key?(k)
@map[k] = v
else
@map[k.to_sym]
Expand Down
6 changes: 4 additions & 2 deletions lib/fbe/just_one.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,10 @@ def Fbe.just_one(fb: Fbe.fb)
if k.end_with?('=')
v = args[1]
raise(Fbe::Error, "Can't set #{k[0..-2]} to nil") if v.nil?
raise(Fbe::Error, "Can't set #{k[0..-2]} to empty string") if v.is_a?(String) && v.empty?
@map[k[0..-2].to_sym] = v
raise(Fbe::Error, "Can't set #{k[0..-2]} to empty string") if v == ''
k = k[0..-2].to_sym
raise(Fbe::Error, "Can't set #{k} to #{v.inspect}, it is already #{@map[k].inspect}") if @map.key?(k)
@map[k] = v
else
@map[k.to_sym]
end
Expand Down
26 changes: 26 additions & 0 deletions test/fbe/test_if_absent.rb
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,30 @@ def test_raises_without_block
assert_equal('A block is required by if_absent', error.message)
assert_equal(0, fb.size, 'if_absent inserted a fact without a block')
end

def test_cannot_set_property_twice
seed = Random.new_seed
tag = "tæg#{Random.new(seed).rand(1_000_000)}"
assert_raises(Fbe::Error, "second value of a property is accepted, seed #{seed}") do
Fbe.if_absent(fb: Factbase.new) do |f|
f.tag = tag
f.tag = "#{tag}ü"
end
end
end

def test_dont_insert_fact_when_property_is_set_twice
seed = Random.new_seed
tag = "tæg#{Random.new(seed).rand(1_000_000)}"
fb = Factbase.new
begin
Fbe.if_absent(fb:) do |f|
f.tag = tag
f.tag = tag
end
rescue Fbe::Error
nil
end
assert_equal(0, fb.size, "a fact is inserted for a property set twice, seed #{seed}")
end
end
26 changes: 26 additions & 0 deletions test/fbe/test_just_one.rb
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,30 @@ def test_dont_insert_fact_without_block
end
assert_equal(0, fb.size, 'just_one inserted a fact without a block')
end

def test_cannot_set_property_twice
seed = Random.new_seed
tag = "tæg#{Random.new(seed).rand(1_000_000)}"
assert_raises(Fbe::Error, "second value of a property is accepted, seed #{seed}") do
Fbe.just_one(fb: Factbase.new) do |f|
f.tag = tag
f.tag = "#{tag}ü"
end
end
end

def test_dont_insert_fact_when_property_is_set_twice
seed = Random.new_seed
tag = "tæg#{Random.new(seed).rand(1_000_000)}"
fb = Factbase.new
begin
Fbe.just_one(fb:) do |f|
f.tag = tag
f.tag = tag
end
rescue Fbe::Error
nil
end
assert_equal(0, fb.size, "a fact is inserted for a property set twice, seed #{seed}")
end
end
Loading