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