diff --git a/lib/diaspora_federation/entity.rb b/lib/diaspora_federation/entity.rb
index 3d8b74d..ff64e4c 100644
--- a/lib/diaspora_federation/entity.rb
+++ b/lib/diaspora_federation/entity.rb
@@ -319,8 +319,8 @@ module DiasporaFederation
when :integer
text.to_i if text =~ /^\d+$/
when :boolean
- return true if text =~ /(true|t|yes|y|1)$/i
- false if text =~ /(false|f|no|n|0)$/i
+ return true if text =~ /^(true|t|yes|y|1)$/i
+ false if text =~ /^(false|f|no|n|0)$/i
else
text
end
diff --git a/spec/entities.rb b/spec/entities.rb
index 18f743e..1a73acc 100644
--- a/spec/entities.rb
+++ b/spec/entities.rb
@@ -34,6 +34,10 @@ module DiasporaFederation
class Entity < DiasporaFederation::Entity
property :test, :string
end
+
+ class TestEntityWithBoolean < DiasporaFederation::Entity
+ property :test, :boolean
+ end
end
module Validators
diff --git a/spec/lib/diaspora_federation/entity_spec.rb b/spec/lib/diaspora_federation/entity_spec.rb
index 1d1df67..352ac6f 100644
--- a/spec/lib/diaspora_federation/entity_spec.rb
+++ b/spec/lib/diaspora_federation/entity_spec.rb
@@ -195,16 +195,28 @@ XML
it "parses boolean fields with false value" do
xml = <<-XML.strip
-
- qwer
- qwer
- false
-
+
+ false
+
XML
- entity = Entities::TestDefaultEntity.from_xml(Nokogiri::XML::Document.parse(xml).root)
- expect(entity).to be_an_instance_of Entities::TestDefaultEntity
- expect(entity.test3).to eq(false)
+ entity = Entities::TestEntityWithBoolean.from_xml(Nokogiri::XML::Document.parse(xml).root)
+ expect(entity).to be_an_instance_of Entities::TestEntityWithBoolean
+ expect(entity.test).to eq(false)
+ end
+
+ it "parses boolean fields with a randomly matching pattern as erroneous" do
+ %w(ttFFFtt yesFFDSFSDy noDFDSFFDFn fXf LLyes).each do |weird_value|
+ xml = <<-XML.strip
+
+ #{weird_value}
+
+XML
+
+ expect {
+ Entities::TestEntityWithBoolean.from_xml(Nokogiri::XML::Document.parse(xml).root)
+ }.to raise_error Entity::ValidationError, "missing required properties: test"
+ end
end
end