From 8c63655886879809d7a5a9463ed5a83b8058ce29 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Thu, 6 Aug 2015 02:21:49 +0200 Subject: [PATCH] allow nil for diaspora_id in profile refactor some tests --- .../validators/person_validator.rb | 2 +- .../validators/rules/diaspora_id.rb | 4 ++-- .../validators/person_validator_spec.rb | 5 +++-- .../validators/profile_validator_spec.rb | 1 + .../validators/rules/birthday_spec.rb | 20 +++++++------------ .../validators/rules/boolean_spec.rb | 12 ++++++----- .../validators/rules/diaspora_id_spec.rb | 10 ++++++++++ .../validators/rules/guid_spec.rb | 18 ++++++----------- .../validators/rules/not_nil_spec.rb | 8 ++++++++ .../validators/rules/public_key_spec.rb | 20 +++++++------------ .../validators/rules/tag_count_spec.rb | 12 ++++++----- spec/support/shared_validator_specs.rb | 11 +++++++--- 12 files changed, 67 insertions(+), 56 deletions(-) diff --git a/lib/diaspora_federation/validators/person_validator.rb b/lib/diaspora_federation/validators/person_validator.rb index f344f9e..f3678e8 100644 --- a/lib/diaspora_federation/validators/person_validator.rb +++ b/lib/diaspora_federation/validators/person_validator.rb @@ -6,7 +6,7 @@ module DiasporaFederation rule :guid, :guid - rule :diaspora_id, :diaspora_id + rule :diaspora_id, %i(not_empty diaspora_id) rule :url, %i(not_nil nilableURI) diff --git a/lib/diaspora_federation/validators/rules/diaspora_id.rb b/lib/diaspora_federation/validators/rules/diaspora_id.rb index e7739ba..8b94a7e 100644 --- a/lib/diaspora_federation/validators/rules/diaspora_id.rb +++ b/lib/diaspora_federation/validators/rules/diaspora_id.rb @@ -20,7 +20,7 @@ module Validation domain_literal = "\\[#{dcontent}+\\]" domain = "(?:#{dot_atom}|#{domain_literal})" port = "(:[#{digit}]+)?" - addr_spec = "#{username}\\@#{domain}#{port}" + addr_spec = "(#{username}\\@#{domain}#{port})?" /\A#{addr_spec}\z/u end @@ -33,7 +33,7 @@ module Validation # Determines if value is a valid diaspora ID def valid_value?(value) - !DIASPORA_ID.match(value).nil? + value.nil? || !DIASPORA_ID.match(value).nil? end # This rule has no params diff --git a/spec/lib/diaspora_federation/validators/person_validator_spec.rb b/spec/lib/diaspora_federation/validators/person_validator_spec.rb index 4f62ce0..753cd9c 100644 --- a/spec/lib/diaspora_federation/validators/person_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/person_validator_spec.rb @@ -12,19 +12,20 @@ module DiasporaFederation it_behaves_like "a diaspora id validator" do let(:property) { :diaspora_id } + let(:mandatory) { true } end it_behaves_like "a guid validator" do let(:property) { :guid } end - context "#url" do + describe "#url" do it_behaves_like "a url validator without path" do let(:property) { :url } end end - context "#profile" do + describe "#profile" do it "fails if profile is nil" do instance = OpenStruct.new(FactoryGirl.attributes_for(:person_entity, profile: nil)) validator = Validators::PersonValidator.new(instance) diff --git a/spec/lib/diaspora_federation/validators/profile_validator_spec.rb b/spec/lib/diaspora_federation/validators/profile_validator_spec.rb index 9f50174..8bff965 100644 --- a/spec/lib/diaspora_federation/validators/profile_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/profile_validator_spec.rb @@ -15,6 +15,7 @@ module DiasporaFederation it_behaves_like "a diaspora id validator" do let(:property) { :diaspora_id } + let(:mandatory) { false } end %i(first_name last_name).each do |prop| diff --git a/spec/lib/diaspora_federation/validators/rules/birthday_spec.rb b/spec/lib/diaspora_federation/validators/rules/birthday_spec.rb index 6a65a6b..8ed274d 100644 --- a/spec/lib/diaspora_federation/validators/rules/birthday_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/birthday_spec.rb @@ -27,20 +27,14 @@ describe Validation::Rule::Birthday do expect(validator.errors).to be_empty end - it "validates an empty string" do - validator = Validation::Validator.new(OpenStruct.new(birthday: "")) - validator.rule(:birthday, :birthday) + it "allows nil and empty" do + [nil, ""].each do |val| + validator = Validation::Validator.new(OpenStruct.new(birthday: val)) + validator.rule(:birthday, :birthday) - expect(validator).to be_valid - expect(validator.errors).to be_empty - end - - it "validates nil" do - validator = Validation::Validator.new(OpenStruct.new(birthday: nil)) - validator.rule(:birthday, :birthday) - - expect(validator).to be_valid - expect(validator.errors).to be_empty + expect(validator).to be_valid + expect(validator.errors).to be_empty + end end it "fails for invalid date string" do diff --git a/spec/lib/diaspora_federation/validators/rules/boolean_spec.rb b/spec/lib/diaspora_federation/validators/rules/boolean_spec.rb index 74dc2e5..444eaaf 100644 --- a/spec/lib/diaspora_federation/validators/rules/boolean_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/boolean_spec.rb @@ -63,12 +63,14 @@ describe Validation::Rule::Boolean do end end - it "fails for nil" do - validator = Validation::Validator.new(OpenStruct.new(boolean: nil)) - validator.rule(:boolean, :boolean) + it "fails if nil or empty" do + [nil, ""].each do |val| + validator = Validation::Validator.new(OpenStruct.new(boolean: val)) + validator.rule(:boolean, :boolean) - expect(validator).not_to be_valid - expect(validator.errors).to include(:boolean) + expect(validator).not_to be_valid + expect(validator.errors).to include(:boolean) + end end end end diff --git a/spec/lib/diaspora_federation/validators/rules/diaspora_id_spec.rb b/spec/lib/diaspora_federation/validators/rules/diaspora_id_spec.rb index 072004e..889d6d9 100644 --- a/spec/lib/diaspora_federation/validators/rules/diaspora_id_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/diaspora_id_spec.rb @@ -74,5 +74,15 @@ describe Validation::Rule::DiasporaId do expect(validator).not_to be_valid expect(validator.errors).to include(:diaspora_id) end + + it "allows nil and empty" do + [nil, ""].each do |val| + validator = Validation::Validator.new(OpenStruct.new(diaspora_id: val)) + validator.rule(:diaspora_id, :diaspora_id) + + expect(validator).to be_valid + expect(validator.errors).to be_empty + end + end end end diff --git a/spec/lib/diaspora_federation/validators/rules/guid_spec.rb b/spec/lib/diaspora_federation/validators/rules/guid_spec.rb index 272adfb..ea63bef 100644 --- a/spec/lib/diaspora_federation/validators/rules/guid_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/guid_spec.rb @@ -45,19 +45,13 @@ describe Validation::Rule::Guid do end it "fails if the string is empty" do - validator = Validation::Validator.new(OpenStruct.new(guid: "")) - validator.rule(:guid, :guid) + [nil, ""].each do |val| + validator = Validation::Validator.new(OpenStruct.new(guid: val)) + validator.rule(:guid, :guid) - expect(validator).not_to be_valid - expect(validator.errors).to include(:guid) - end - - it "fails if the string is nil" do - validator = Validation::Validator.new(OpenStruct.new(guid: nil)) - validator.rule(:guid, :guid) - - expect(validator).not_to be_valid - expect(validator.errors).to include(:guid) + expect(validator).not_to be_valid + expect(validator.errors).to include(:guid) + end end end end diff --git a/spec/lib/diaspora_federation/validators/rules/not_nil_spec.rb b/spec/lib/diaspora_federation/validators/rules/not_nil_spec.rb index ae5d1e6..94e10fc 100644 --- a/spec/lib/diaspora_federation/validators/rules/not_nil_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/not_nil_spec.rb @@ -34,5 +34,13 @@ describe Validation::Rule::NotNil do expect(validator).not_to be_valid expect(validator.errors).to include(:not_nil) end + + it "allows an empty string" do + validator = Validation::Validator.new(OpenStruct.new(not_nil: "")) + validator.rule(:not_nil, :not_nil) + + expect(validator).to be_valid + expect(validator.errors).to be_empty + end end end diff --git a/spec/lib/diaspora_federation/validators/rules/public_key_spec.rb b/spec/lib/diaspora_federation/validators/rules/public_key_spec.rb index f4eb9ca..ed3b1b6 100644 --- a/spec/lib/diaspora_federation/validators/rules/public_key_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/public_key_spec.rb @@ -50,20 +50,14 @@ describe Validation::Rule::PublicKey do expect(validator.errors).to include(:key) end - it "fails if the key is empty" do - validator = Validation::Validator.new(OpenStruct.new(key: "")) - validator.rule(:key, :public_key) + it "fails if the key is nil or empty" do + [nil, ""].each do |val| + validator = Validation::Validator.new(OpenStruct.new(key: val)) + validator.rule(:key, :public_key) - expect(validator).not_to be_valid - expect(validator.errors).to include(:key) - end - - it "fails if the key is nil" do - validator = Validation::Validator.new(OpenStruct.new(key: nil)) - validator.rule(:key, :public_key) - - expect(validator).not_to be_valid - expect(validator.errors).to include(:key) + expect(validator).not_to be_valid + expect(validator.errors).to include(:key) + end end end end diff --git a/spec/lib/diaspora_federation/validators/rules/tag_count_spec.rb b/spec/lib/diaspora_federation/validators/rules/tag_count_spec.rb index a54e846..52e8720 100644 --- a/spec/lib/diaspora_federation/validators/rules/tag_count_spec.rb +++ b/spec/lib/diaspora_federation/validators/rules/tag_count_spec.rb @@ -46,12 +46,14 @@ describe Validation::Rule::TagCount do expect(validator.errors).to include(:tags) end - it "validates if tags are nil" do - validator = Validation::Validator.new(OpenStruct.new(tags: nil)) - validator.rule(:tags, tag_count: {maximum: 5}) + it "allows nil and empty" do + [nil, ""].each do |val| + validator = Validation::Validator.new(OpenStruct.new(tags: val)) + validator.rule(:tags, tag_count: {maximum: 5}) - expect(validator).to be_valid - expect(validator.errors).to be_empty + expect(validator).to be_valid + expect(validator.errors).to be_empty + end end end end diff --git a/spec/support/shared_validator_specs.rb b/spec/support/shared_validator_specs.rb index 74a12da..9b96d30 100644 --- a/spec/support/shared_validator_specs.rb +++ b/spec/support/shared_validator_specs.rb @@ -11,12 +11,17 @@ def alphanumeric_string(length) end shared_examples "a diaspora id validator" do - it "must not be nil or empty" do + it "must not be nil or empty if mandatory" do [nil, ""].each do |val| validator = described_class.new(entity_stub(entity, property, val)) - expect(validator).not_to be_valid - expect(validator.errors).to include(property) + if mandatory + expect(validator).not_to be_valid + expect(validator.errors).to include(property) + else + expect(validator).to be_valid + expect(validator.errors).to be_empty + end end end