From 761534f13ce3effff2e41b4e6b992b2f8d94ab33 Mon Sep 17 00:00:00 2001 From: cmrd Senya Date: Thu, 5 Nov 2015 17:27:31 +0300 Subject: [PATCH 1/3] DRY specs more by introducing "a property with data-types restriction" shared behavior --- .../validators/h_card_validator_spec.rb | 15 ++---- .../validators/location_validator_spec.rb | 8 +-- .../participation_validator_spec.rb | 20 +++---- .../validators/person_validator_spec.rb | 10 ++-- .../validators/photo_validator_spec.rb | 26 +++------ .../validators/profile_validator_spec.rb | 53 +++++-------------- .../validators/web_finger_validator_spec.rb | 45 +++------------- spec/support/shared_validator_specs.rb | 18 +++++++ 8 files changed, 65 insertions(+), 130 deletions(-) diff --git a/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb b/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb index 3811808..7efde15 100644 --- a/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb @@ -2,10 +2,6 @@ module DiasporaFederation describe Validators::HCardValidator do let(:entity) { :h_card } - def hcard_stub(data={}) - entity_stub(entity, data) - end - it_behaves_like "a common validator" describe "#full_name" do @@ -26,13 +22,10 @@ module DiasporaFederation %i(photo_large_url photo_medium_url photo_small_url).each do |prop| describe "##{prop}" do - it "must not be nil or empty" do - [nil, ""].each do |val| - validator = Validators::HCardValidator.new(hcard_stub(prop => val)) - - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) - end + it_behaves_like "a property with data-types restriction" do + let(:property) { prop } + let(:wrong_values) { [nil, ""] } + let(:correct_values) { [] } end it_behaves_like "a url path validator" do diff --git a/spec/lib/diaspora_federation/validators/location_validator_spec.rb b/spec/lib/diaspora_federation/validators/location_validator_spec.rb index 90e09eb..40f0438 100644 --- a/spec/lib/diaspora_federation/validators/location_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/location_validator_spec.rb @@ -5,10 +5,10 @@ module DiasporaFederation context "#lat and #lng" do %i(lat lng).each do |prop| - it "must not be empty" do - validator = Validators::LocationValidator.new(entity_stub(entity, prop => "")) - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) + it_behaves_like "a property with data-types restriction" do + let(:property) { prop } + let(:wrong_values) { [""] } + let(:correct_values) { [] } end end end diff --git a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb index 590688d..a72154e 100644 --- a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb @@ -9,14 +9,6 @@ module DiasporaFederation let(:mandatory) { true } end - context "#target_type" do - it "must not be empty" do - validator = Validators::ParticipationValidator.new(entity_stub(entity, target_type: "")) - expect(validator).not_to be_valid - expect(validator.errors).to include(:target_type) - end - end - context "#guid, #parent_guid" do %i(guid parent_guid).each do |prop| it_behaves_like "a guid validator" do @@ -25,12 +17,12 @@ module DiasporaFederation end end - context "#author_signature and #parent_author_signature" do - %i(author_signature parent_author_signature).each do |prop| - it "must not be empty" do - validator = Validators::ParticipationValidator.new(entity_stub(entity, prop => "")) - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) + context "#target_type and #author_signature and #parent_author_signature" do + %i(target_type author_signature parent_author_signature).each do |prop| + it_behaves_like "a property with data-types restriction" do + let(:property) { prop } + let(:wrong_values) { [""] } + let(:correct_values) { [] } end end end diff --git a/spec/lib/diaspora_federation/validators/person_validator_spec.rb b/spec/lib/diaspora_federation/validators/person_validator_spec.rb index b973472..8b049e4 100644 --- a/spec/lib/diaspora_federation/validators/person_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/person_validator_spec.rb @@ -20,12 +20,10 @@ module DiasporaFederation end 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) - - expect(validator).not_to be_valid - expect(validator.errors).to include(:profile) + it_behaves_like "a property with data-types restriction" do + let(:property) { :profile } + let(:wrong_values) { [nil] } + let(:correct_values) { [] } end end diff --git a/spec/lib/diaspora_federation/validators/photo_validator_spec.rb b/spec/lib/diaspora_federation/validators/photo_validator_spec.rb index 626047b..21eda89 100644 --- a/spec/lib/diaspora_federation/validators/photo_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/photo_validator_spec.rb @@ -23,30 +23,20 @@ module DiasporaFederation context "#remote_photo_path, #remote_photo_name" do %i(remote_photo_name remote_photo_path).each do |prop| - it "must not be empty" do - validator = Validators::PhotoValidator.new(entity_stub(entity, prop => "")) - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) + it_behaves_like "a property with data-types restriction" do + let(:property) { prop } + let(:wrong_values) { [""] } + let(:correct_values) { [] } end end end context "#height, #width" do %i(height width).each do |prop| - it "validates an integer" do - [123, "123"].each do |val| - validator = Validators::PhotoValidator.new(entity_stub(entity, prop => val)) - expect(validator).to be_valid - expect(validator.errors).to be_empty - end - end - - it "fails for non numeric types" do - [true, :num, "asdf"].each do |val| - validator = Validators::PhotoValidator.new(entity_stub(entity, prop => val)) - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) - end + it_behaves_like "a property with data-types restriction" do + let(:property) { prop } + let(:wrong_values) { [true, :num, "asdf"] } + let(:correct_values) { [123, "123"] } end end end diff --git a/spec/lib/diaspora_federation/validators/profile_validator_spec.rb b/spec/lib/diaspora_federation/validators/profile_validator_spec.rb index 321f3ae..7996638 100644 --- a/spec/lib/diaspora_federation/validators/profile_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/profile_validator_spec.rb @@ -2,10 +2,6 @@ module DiasporaFederation describe Validators::ProfileValidator do let(:entity) { :profile_entity } - def profile_stub(data={}) - entity_stub(entity, data) - end - it_behaves_like "a common validator" it_behaves_like "a diaspora id validator" do @@ -24,11 +20,10 @@ module DiasporaFederation %i(image_url image_url_medium image_url_small).each do |prop| describe "##{prop}" do - it "is allowed to be nil" do - validator = Validators::ProfileValidator.new(profile_stub(prop => nil)) - - expect(validator).to be_valid - expect(validator.errors).to be_empty + it_behaves_like "a property with data-types restriction" do + let(:property) { prop } + let(:wrong_values) { [] } + let(:correct_values) { [nil] } end it_behaves_like "a url path validator" do @@ -59,31 +54,10 @@ module DiasporaFederation end describe "#birthday" do - it "may be empty or nil" do - [nil, ""].each do |val| - validator = Validators::ProfileValidator.new(profile_stub(birthday: val)) - - expect(validator).to be_valid - expect(validator.errors).to be_empty - end - end - - it "may be a Date or date string" do - [Date.parse("2013-06-29"), "2013-06-29"].each do |val| - validator = Validators::ProfileValidator.new(profile_stub(birthday: val)) - - expect(validator).to be_valid - expect(validator.errors).to be_empty - end - end - - it "must not be an arbitrary string or other object" do - ["asdf asdf", true, 1234].each do |val| - validator = Validators::ProfileValidator.new(profile_stub(birthday: val)) - - expect(validator).not_to be_valid - expect(validator.errors).to include(:birthday) - end + it_behaves_like "a property with data-types restriction" do + let(:property) { :birthday } + let(:wrong_values) { ["asdf asdf", true, 1234] } + let(:correct_values) { [nil, "", Date.parse("2013-06-29"), "2013-06-29"] } end end @@ -96,12 +70,11 @@ module DiasporaFederation end describe "#tag_string" do - it "must not contain more than 5 tags" do - validator = Validators::ProfileValidator.new( - profile_stub(tag_string: "#i #have #too #many #tags #in #my #profile")) - - expect(validator).not_to be_valid - expect(validator.errors).to include(:tag_string) + # more than 5 tags are not allowed + it_behaves_like "a property with data-types restriction" do + let(:property) { :tag_string } + let(:wrong_values) { ["#i #have #too #many #tags #in #my #profile"] } + let(:correct_values) { [] } end end end diff --git a/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb b/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb index e1ec327..4e477d6 100644 --- a/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb @@ -2,20 +2,13 @@ module DiasporaFederation describe Validators::WebFingerValidator do let(:entity) { :webfinger } - def webfinger_stub(data={}) - entity_stub(entity, data) - end - it_behaves_like "a common validator" describe "#acct_uri" do - it "fails if it is nil or empty" do - [nil, ""].each do |val| - validator = Validators::WebFingerValidator.new(webfinger_stub(acct_uri: val)) - - expect(validator).not_to be_valid - expect(validator.errors).to include(:acct_uri) - end + it_behaves_like "a property with data-types restriction" do + let(:property) { :acct_uri } + let(:wrong_values) { [nil, ""] } + let(:correct_values) { [] } end end @@ -34,32 +27,10 @@ module DiasporaFederation # optional urls %i(alias_url salmon_url).each do |prop| describe "##{prop}" do - it "is allowed to be nil" do - validator = described_class.new(webfinger_stub(prop => nil)) - - expect(validator).to be_valid - expect(validator.errors).to be_empty - end - - it "must not be empty" do - validator = described_class.new(webfinger_stub(prop => "")) - - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) - end - - it "fails for url with special chars" do - validator = described_class.new(webfinger_stub(prop => "https://asdf$%.com")) - - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) - end - - it "fails for url without scheme" do - validator = described_class.new(webfinger_stub(prop => "example.com")) - - expect(validator).not_to be_valid - expect(validator.errors).to include(prop) + it_behaves_like "a property with data-types restriction" do + let(:property) { prop } + let(:wrong_values) { ["", "https://asdf$%.com", "example.com"] } + let(:correct_values) { [nil] } end it_behaves_like "a url path validator" do diff --git a/spec/support/shared_validator_specs.rb b/spec/support/shared_validator_specs.rb index 13ec3b1..52883d6 100644 --- a/spec/support/shared_validator_specs.rb +++ b/spec/support/shared_validator_specs.rb @@ -16,6 +16,24 @@ shared_examples "a common validator" do end end +shared_examples "a property with data-types restriction" do + it "fails if a wrong value is supplied" do + wrong_values.each do |val| + validator = described_class.new(entity_stub(entity, property => val)) + expect(validator).not_to be_valid + expect(validator.errors).to include(property) + end + end + + it "validates if a correct value is supplied" do + correct_values.each do |val| + validator = described_class.new(entity_stub(entity, property => val)) + expect(validator).to be_valid + expect(validator.errors).to be_empty + end + end +end + shared_examples "a diaspora id validator" do it "must not be nil or empty if mandatory" do [nil, ""].each do |val| From f12a4c21dbc0e2510c1f8d9293044bc293884733 Mon Sep 17 00:00:00 2001 From: cmrd Senya Date: Thu, 5 Nov 2015 17:53:30 +0300 Subject: [PATCH 2/3] Merge all the entities left from the @Raven24's gem. These are: AccountDeletion, Comment, Conversation, Like, Message, RelayableRetraction, Reshare, Retraction, SignedRetraction --- lib/diaspora_federation/entities.rb | 9 +++ .../entities/account_deletion.rb | 7 ++ lib/diaspora_federation/entities/comment.rb | 12 +++ .../entities/conversation.rb | 12 +++ lib/diaspora_federation/entities/like.rb | 13 ++++ lib/diaspora_federation/entities/message.rb | 14 ++++ .../entities/relayable_retraction.rb | 11 +++ lib/diaspora_federation/entities/reshare.rb | 13 ++++ .../entities/retraction.rb | 9 +++ .../entities/signed_retraction.rb | 10 +++ lib/diaspora_federation/validators.rb | 10 +++ .../validators/account_deletion_validator.rb | 9 +++ .../validators/comment_validator.rb | 20 +++++ .../validators/conversation_validator.rb | 13 ++++ .../validators/like_validator.rb | 17 +++++ .../validators/message_validator.rb | 19 +++++ .../relayable_retraction_validator.rb | 17 +++++ .../validators/reshare_validator.rb | 17 +++++ .../validators/retraction_validator.rb | 13 ++++ .../validators/rules/diaspora_id_count.rb | 32 ++++++++ .../validators/signed_retraction_validator.rb | 15 ++++ spec/factories.rb | 73 +++++++++++++++++++ .../entities/account_deletion_spec.rb | 17 +++++ .../entities/comment_spec.rb | 29 ++++++++ .../entities/conversation_spec.rb | 54 ++++++++++++++ .../diaspora_federation/entities/like_spec.rb | 31 ++++++++ .../entities/message_spec.rb | 24 ++++++ .../entities/relayable_retraction_spec.rb | 27 +++++++ .../entities/reshare_spec.rb | 35 +++++++++ .../entities/retraction_spec.rb | 23 ++++++ .../entities/signed_retraction_spec.rb | 25 +++++++ .../account_deletion_validator_spec.rb | 12 +++ .../validators/comment_validator_spec.rb | 34 +++++++++ .../validators/conversation_validator_spec.rb | 25 +++++++ .../validators/like_validator_spec.rb | 25 +++++++ .../validators/location_validator_spec.rb | 4 +- .../validators/message_validator_spec.rb | 27 +++++++ .../participation_validator_spec.rb | 4 +- .../validators/person_validator_spec.rb | 2 +- .../validators/photo_validator_spec.rb | 6 +- .../validators/profile_validator_spec.rb | 6 +- .../relayable_retraction_validator_spec.rb | 23 ++++++ .../validators/reshare_validator_spec.rb | 27 +++++++ .../validators/retraction_validator_spec.rb | 21 ++++++ .../rules/diaspora_id_count_spec.rb | 43 +++++++++++ .../signed_retraction_validator_spec.rb | 23 ++++++ .../validators/web_finger_validator_spec.rb | 2 +- spec/support/shared_validator_specs.rb | 9 ++- 48 files changed, 907 insertions(+), 16 deletions(-) create mode 100644 lib/diaspora_federation/entities/account_deletion.rb create mode 100644 lib/diaspora_federation/entities/comment.rb create mode 100644 lib/diaspora_federation/entities/conversation.rb create mode 100644 lib/diaspora_federation/entities/like.rb create mode 100644 lib/diaspora_federation/entities/message.rb create mode 100644 lib/diaspora_federation/entities/relayable_retraction.rb create mode 100644 lib/diaspora_federation/entities/reshare.rb create mode 100644 lib/diaspora_federation/entities/retraction.rb create mode 100644 lib/diaspora_federation/entities/signed_retraction.rb create mode 100644 lib/diaspora_federation/validators/account_deletion_validator.rb create mode 100644 lib/diaspora_federation/validators/comment_validator.rb create mode 100644 lib/diaspora_federation/validators/conversation_validator.rb create mode 100644 lib/diaspora_federation/validators/like_validator.rb create mode 100644 lib/diaspora_federation/validators/message_validator.rb create mode 100644 lib/diaspora_federation/validators/relayable_retraction_validator.rb create mode 100644 lib/diaspora_federation/validators/reshare_validator.rb create mode 100644 lib/diaspora_federation/validators/retraction_validator.rb create mode 100644 lib/diaspora_federation/validators/rules/diaspora_id_count.rb create mode 100644 lib/diaspora_federation/validators/signed_retraction_validator.rb create mode 100644 spec/lib/diaspora_federation/entities/account_deletion_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/comment_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/conversation_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/like_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/message_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/reshare_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/retraction_spec.rb create mode 100644 spec/lib/diaspora_federation/entities/signed_retraction_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/account_deletion_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/comment_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/conversation_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/like_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/message_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/reshare_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/retraction_validator_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb create mode 100644 spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb diff --git a/lib/diaspora_federation/entities.rb b/lib/diaspora_federation/entities.rb index 7ab98e9..0a1e7b8 100644 --- a/lib/diaspora_federation/entities.rb +++ b/lib/diaspora_federation/entities.rb @@ -15,3 +15,12 @@ require "diaspora_federation/entities/photo" require "diaspora_federation/entities/status_message" require "diaspora_federation/entities/request" require "diaspora_federation/entities/participation" +require "diaspora_federation/entities/like" +require "diaspora_federation/entities/comment" +require "diaspora_federation/entities/account_deletion" +require "diaspora_federation/entities/message" +require "diaspora_federation/entities/conversation" +require "diaspora_federation/entities/relayable_retraction" +require "diaspora_federation/entities/reshare" +require "diaspora_federation/entities/retraction" +require "diaspora_federation/entities/signed_retraction" diff --git a/lib/diaspora_federation/entities/account_deletion.rb b/lib/diaspora_federation/entities/account_deletion.rb new file mode 100644 index 0000000..a0a81db --- /dev/null +++ b/lib/diaspora_federation/entities/account_deletion.rb @@ -0,0 +1,7 @@ +module DiasporaFederation + module Entities + class AccountDeletion < Entity + property :diaspora_id, xml_name: :diaspora_handle + end + end +end diff --git a/lib/diaspora_federation/entities/comment.rb b/lib/diaspora_federation/entities/comment.rb new file mode 100644 index 0000000..543930e --- /dev/null +++ b/lib/diaspora_federation/entities/comment.rb @@ -0,0 +1,12 @@ +module DiasporaFederation + module Entities + class Comment < Entity + property :guid + property :parent_guid + property :parent_author_signature + property :author_signature + property :text + property :diaspora_id, xml_name: :diaspora_handle + end + end +end diff --git a/lib/diaspora_federation/entities/conversation.rb b/lib/diaspora_federation/entities/conversation.rb new file mode 100644 index 0000000..e90709b --- /dev/null +++ b/lib/diaspora_federation/entities/conversation.rb @@ -0,0 +1,12 @@ +module DiasporaFederation + module Entities + class Conversation < Entity + property :guid + property :subject + property :created_at, default: -> { Time.now.utc } + entity :messages, [Entities::Message] + property :diaspora_id, xml_name: :diaspora_handle + property :participant_ids, xml_name: :participant_handles + end + end +end diff --git a/lib/diaspora_federation/entities/like.rb b/lib/diaspora_federation/entities/like.rb new file mode 100644 index 0000000..5d76188 --- /dev/null +++ b/lib/diaspora_federation/entities/like.rb @@ -0,0 +1,13 @@ +module DiasporaFederation + module Entities + class Like < Entity + property :positive + property :guid + property :target_type + property :parent_guid + property :parent_author_signature + property :author_signature + property :diaspora_id, xml_name: :diaspora_handle + end + end +end diff --git a/lib/diaspora_federation/entities/message.rb b/lib/diaspora_federation/entities/message.rb new file mode 100644 index 0000000..5eadac7 --- /dev/null +++ b/lib/diaspora_federation/entities/message.rb @@ -0,0 +1,14 @@ +module DiasporaFederation + module Entities + class Message < Entity + property :guid + property :parent_guid + property :parent_author_signature + property :author_signature + property :text + property :created_at, default: -> { Time.now.utc } + property :diaspora_id, xml_name: :diaspora_handle + property :conversation_guid + end + end +end diff --git a/lib/diaspora_federation/entities/relayable_retraction.rb b/lib/diaspora_federation/entities/relayable_retraction.rb new file mode 100644 index 0000000..11e5274 --- /dev/null +++ b/lib/diaspora_federation/entities/relayable_retraction.rb @@ -0,0 +1,11 @@ +module DiasporaFederation + module Entities + class RelayableRetraction < Entity + property :parent_author_signature + property :target_guid + property :target_type + property :sender_id, xml_name: :sender_handle + property :target_author_signature + end + end +end diff --git a/lib/diaspora_federation/entities/reshare.rb b/lib/diaspora_federation/entities/reshare.rb new file mode 100644 index 0000000..83647d7 --- /dev/null +++ b/lib/diaspora_federation/entities/reshare.rb @@ -0,0 +1,13 @@ +module DiasporaFederation + module Entities + class Reshare < Entity + property :root_diaspora_id # inconsistent, everywhere else it's "handle" + property :root_guid + property :guid + property :diaspora_id, xml_name: :diaspora_handle + property :public, default: true # always true? (we only reshare public posts) + property :created_at, default: -> { Time.now.utc } + property :provider_display_name, default: nil + end + end +end diff --git a/lib/diaspora_federation/entities/retraction.rb b/lib/diaspora_federation/entities/retraction.rb new file mode 100644 index 0000000..4c64137 --- /dev/null +++ b/lib/diaspora_federation/entities/retraction.rb @@ -0,0 +1,9 @@ +module DiasporaFederation + module Entities + class Retraction < Entity + property :post_guid + property :diaspora_id, xml_name: :diaspora_handle + property :type + end + end +end diff --git a/lib/diaspora_federation/entities/signed_retraction.rb b/lib/diaspora_federation/entities/signed_retraction.rb new file mode 100644 index 0000000..e648a02 --- /dev/null +++ b/lib/diaspora_federation/entities/signed_retraction.rb @@ -0,0 +1,10 @@ +module DiasporaFederation + module Entities + class SignedRetraction < Entity + property :target_guid + property :target_type + property :sender_id, xml_name: :sender_handle + property :target_author_signature + end + end +end diff --git a/lib/diaspora_federation/validators.rb b/lib/diaspora_federation/validators.rb index 5f4c7f3..07706e4 100644 --- a/lib/diaspora_federation/validators.rb +++ b/lib/diaspora_federation/validators.rb @@ -23,6 +23,7 @@ require "diaspora_federation/validators/rules/guid" require "diaspora_federation/validators/rules/not_nil" require "diaspora_federation/validators/rules/public_key" require "diaspora_federation/validators/rules/tag_count" +require "diaspora_federation/validators/rules/diaspora_id_count" module DiasporaFederation # Validators to perform basic sanity-checks on {DiasporaFederation::Entities federation entities}. @@ -42,3 +43,12 @@ require "diaspora_federation/validators/photo_validator" require "diaspora_federation/validators/location_validator" require "diaspora_federation/validators/status_message_validator" require "diaspora_federation/validators/participation_validator" +require "diaspora_federation/validators/like_validator" +require "diaspora_federation/validators/comment_validator" +require "diaspora_federation/validators/account_deletion_validator" +require "diaspora_federation/validators/message_validator" +require "diaspora_federation/validators/conversation_validator" +require "diaspora_federation/validators/relayable_retraction_validator" +require "diaspora_federation/validators/reshare_validator" +require "diaspora_federation/validators/retraction_validator" +require "diaspora_federation/validators/signed_retraction_validator" diff --git a/lib/diaspora_federation/validators/account_deletion_validator.rb b/lib/diaspora_federation/validators/account_deletion_validator.rb new file mode 100644 index 0000000..ad7e659 --- /dev/null +++ b/lib/diaspora_federation/validators/account_deletion_validator.rb @@ -0,0 +1,9 @@ +module DiasporaFederation + module Validators + class AccountDeletionValidator < Validation::Validator + include Validation + + rule :diaspora_id, %i(not_empty diaspora_id) + end + end +end diff --git a/lib/diaspora_federation/validators/comment_validator.rb b/lib/diaspora_federation/validators/comment_validator.rb new file mode 100644 index 0000000..9609dfb --- /dev/null +++ b/lib/diaspora_federation/validators/comment_validator.rb @@ -0,0 +1,20 @@ +module DiasporaFederation + module Validators + class CommentValidator < Validation::Validator + include Validation + + rule :guid, :guid + + rule :parent_guid, :guid + + rule :parent_author_signature, :not_empty + + rule :author_signature, :not_empty + + rule :text, [:not_empty, + length: {maximum: 65_535}] + + rule :diaspora_id, %i(not_empty diaspora_id) + end + end +end diff --git a/lib/diaspora_federation/validators/conversation_validator.rb b/lib/diaspora_federation/validators/conversation_validator.rb new file mode 100644 index 0000000..6a3036b --- /dev/null +++ b/lib/diaspora_federation/validators/conversation_validator.rb @@ -0,0 +1,13 @@ +module DiasporaFederation + module Validators + class ConversationValidator < Validation::Validator + include Validation + + rule :guid, :guid + + rule :diaspora_id, %i(not_empty diaspora_id) + + rule :participant_ids, diaspora_id_count: {maximum: 20} + end + end +end diff --git a/lib/diaspora_federation/validators/like_validator.rb b/lib/diaspora_federation/validators/like_validator.rb new file mode 100644 index 0000000..78b2a95 --- /dev/null +++ b/lib/diaspora_federation/validators/like_validator.rb @@ -0,0 +1,17 @@ +module DiasporaFederation + module Validators + class LikeValidator < Validation::Validator + include Validation + + rule :guid, :guid + + rule :parent_guid, :guid + + rule :parent_author_signature, :not_empty + + rule :author_signature, :not_empty + + rule :diaspora_id, %i(not_empty diaspora_id) + end + end +end diff --git a/lib/diaspora_federation/validators/message_validator.rb b/lib/diaspora_federation/validators/message_validator.rb new file mode 100644 index 0000000..0e9f244 --- /dev/null +++ b/lib/diaspora_federation/validators/message_validator.rb @@ -0,0 +1,19 @@ +module DiasporaFederation + module Validators + class MessageValidator < Validation::Validator + include Validation + + rule :guid, :guid + + rule :parent_guid, :guid + + rule :parent_author_signature, :not_empty + + rule :author_signature, :not_empty + + rule :diaspora_id, %i(not_empty diaspora_id) + + rule :conversation_guid, :guid + end + end +end diff --git a/lib/diaspora_federation/validators/relayable_retraction_validator.rb b/lib/diaspora_federation/validators/relayable_retraction_validator.rb new file mode 100644 index 0000000..38d5cc6 --- /dev/null +++ b/lib/diaspora_federation/validators/relayable_retraction_validator.rb @@ -0,0 +1,17 @@ +module DiasporaFederation + module Validators + class RelayableRetractionValidator < Validation::Validator + include Validation + + rule :parent_author_signature, :not_empty + + rule :target_guid, :guid + + rule :target_type, :not_empty + + rule :sender_id, %i(not_empty diaspora_id) + + rule :target_author_signature, :not_empty + end + end +end diff --git a/lib/diaspora_federation/validators/reshare_validator.rb b/lib/diaspora_federation/validators/reshare_validator.rb new file mode 100644 index 0000000..3f7f8cf --- /dev/null +++ b/lib/diaspora_federation/validators/reshare_validator.rb @@ -0,0 +1,17 @@ +module DiasporaFederation + module Validators + class ReshareValidator < Validation::Validator + include Validation + + rule :root_diaspora_id, %i(not_empty diaspora_id) + + rule :root_guid, :guid + + rule :guid, :guid + + rule :diaspora_id, %i(not_empty diaspora_id) + + rule :public, :boolean + end + end +end diff --git a/lib/diaspora_federation/validators/retraction_validator.rb b/lib/diaspora_federation/validators/retraction_validator.rb new file mode 100644 index 0000000..83897e6 --- /dev/null +++ b/lib/diaspora_federation/validators/retraction_validator.rb @@ -0,0 +1,13 @@ +module DiasporaFederation + module Validators + class RetractionValidator < Validation::Validator + include Validation + + rule :post_guid, :guid + + rule :diaspora_id, %i(not_empty diaspora_id) + + rule :type, :not_empty + end + end +end diff --git a/lib/diaspora_federation/validators/rules/diaspora_id_count.rb b/lib/diaspora_federation/validators/rules/diaspora_id_count.rb new file mode 100644 index 0000000..0a063c9 --- /dev/null +++ b/lib/diaspora_federation/validators/rules/diaspora_id_count.rb @@ -0,0 +1,32 @@ +module Validation + module Rule + # Rule for validating the number of Diaspora* ids in a string. + # The evaluated string is split at ";" and the result will be counted. + class DiasporaIdCount + attr_reader :params + + # @param [Hash] params + # @option params [Fixnum] :maximum maximum allowed id count + def initialize(params) + unless params.include?(:maximum) && params[:maximum].is_a?(Fixnum) + raise "A number has to be specified for :maximum" + end + + @params = params + end + + def error_key + :diaspora_id_count + end + + def valid_value?(value) + ids = value.split(";") + return false unless ids.count <= params[:maximum] + ids.each do |id| + return false unless DiasporaId.new.valid_value?(id) + end + true + end + end + end +end diff --git a/lib/diaspora_federation/validators/signed_retraction_validator.rb b/lib/diaspora_federation/validators/signed_retraction_validator.rb new file mode 100644 index 0000000..ebe041a --- /dev/null +++ b/lib/diaspora_federation/validators/signed_retraction_validator.rb @@ -0,0 +1,15 @@ +module DiasporaFederation + module Validators + class SignedRetractionValidator < Validation::Validator + include Validation + + rule :target_guid, :guid + + rule :target_type, :not_empty + + rule :sender_id, %i(not_empty diaspora_id) + + rule :target_author_signature, :not_empty + end + end +end diff --git a/spec/factories.rb b/spec/factories.rb index d68b25d..d2830a7 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -114,4 +114,77 @@ FactoryGirl.define do sender_id { generate(:diaspora_id) } recipient_id { generate(:diaspora_id) } end + + factory :comment_entity, class: DiasporaFederation::Entities::Comment do + guid + parent_guid { generate(:guid) } + parent_author_signature { generate(:signature) } + author_signature { generate(:signature) } + text "this is a very informative comment" + diaspora_id + end + + factory :like_entity, class: DiasporaFederation::Entities::Like do + positive 1 + guid + target_type "StatusMessage" + parent_guid { generate(:guid) } + parent_author_signature { generate(:signature) } + author_signature { generate(:signature) } + diaspora_id + end + + factory :account_deletion_entity, class: DiasporaFederation::Entities::AccountDeletion do + diaspora_id + end + + factory :conversation_entity, class: DiasporaFederation::Entities::Conversation do + guid + subject "this is a very informative subject" + created_at { DateTime.now.utc } + messages [] + diaspora_id + participant_ids { 3.times.map { generate(:diaspora_id) }.join(";") } + end + + factory :message_entity, class: DiasporaFederation::Entities::Message do + guid + parent_guid { generate(:guid) } + parent_author_signature { generate(:signature) } + author_signature { generate(:signature) } + text "this is a very informative text" + created_at { DateTime.now.utc } + diaspora_id + conversation_guid { generate(:guid) } + end + + factory :relayable_retraction_entity, class: DiasporaFederation::Entities::RelayableRetraction do + parent_author_signature { generate(:signature) } + target_guid { generate(:guid) } + target_type "StatusMessage" + sender_id { generate(:diaspora_id) } + target_author_signature { generate(:signature) } + end + + factory :reshare_entity, class: DiasporaFederation::Entities::Reshare do + root_diaspora_id { generate(:diaspora_id) } + root_guid { generate(:guid) } + guid + diaspora_id + public(true) + created_at { DateTime.now.utc } + end + + factory :retraction_entity, class: DiasporaFederation::Entities::Retraction do + post_guid { generate(:guid) } + diaspora_id + type "StatusMessage" + end + + factory :signed_retraction_entity, class: DiasporaFederation::Entities::SignedRetraction do + target_guid { generate(:guid) } + target_type "StatusMessage" + sender_id { generate(:diaspora_id) } + target_author_signature { generate(:signature) } + end end diff --git a/spec/lib/diaspora_federation/entities/account_deletion_spec.rb b/spec/lib/diaspora_federation/entities/account_deletion_spec.rb new file mode 100644 index 0000000..af9aa39 --- /dev/null +++ b/spec/lib/diaspora_federation/entities/account_deletion_spec.rb @@ -0,0 +1,17 @@ +module DiasporaFederation + describe Entities::AccountDeletion do + let(:data) { {diaspora_id: "me@goes.byebye.tld"} } + + let(:xml) { + <<-XML + + me@goes.byebye.tld + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/comment_spec.rb b/spec/lib/diaspora_federation/entities/comment_spec.rb new file mode 100644 index 0000000..06e024e --- /dev/null +++ b/spec/lib/diaspora_federation/entities/comment_spec.rb @@ -0,0 +1,29 @@ +module DiasporaFederation + describe Entities::Comment do + let(:data) { + {guid: "0123456789abcdef", + parent_guid: "fedcba9876543210", + parent_author_signature: "BBBBBB==", + author_signature: "AAAAAA==", + text: "my comment text", + diaspora_id: "bob@pod.somedomain.tld"} + } + + let(:xml) { + <<-XML + + 0123456789abcdef + fedcba9876543210 + BBBBBB== + AAAAAA== + my comment text + bob@pod.somedomain.tld + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/conversation_spec.rb b/spec/lib/diaspora_federation/entities/conversation_spec.rb new file mode 100644 index 0000000..efcfc45 --- /dev/null +++ b/spec/lib/diaspora_federation/entities/conversation_spec.rb @@ -0,0 +1,54 @@ +module DiasporaFederation + describe Entities::Conversation do + before do + @datetime = DateTime.now.utc + end + + let(:msg1) { Entities::Message.new(FactoryGirl.attributes_for(:message_entity)) } + let(:msg2) { Entities::Message.new(FactoryGirl.attributes_for(:message_entity)) } + let(:data) { + {guid: FactoryGirl.generate(:guid), + subject: "very interesting conversation subject", + created_at: @datetime, + messages: [msg1, msg2], + diaspora_id: FactoryGirl.generate(:diaspora_id), + participant_ids: "#{FactoryGirl.generate(:diaspora_id)};#{FactoryGirl.generate(:diaspora_id)}"} + } + + let(:xml) { + <<-XML + + #{data[:guid]} + #{data[:subject]} + #{data[:created_at]} + + #{msg1.guid} + #{msg1.parent_guid} + #{msg1.parent_author_signature} + #{msg1.author_signature} + #{msg1.text} + #{msg1.created_at} + #{msg1.diaspora_id} + #{msg1.conversation_guid} + + + #{msg2.guid} + #{msg2.parent_guid} + #{msg2.parent_author_signature} + #{msg2.author_signature} + #{msg2.text} + #{msg2.created_at} + #{msg2.diaspora_id} + #{msg2.conversation_guid} + + #{data[:diaspora_id]} + #{data[:participant_ids]} + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/like_spec.rb b/spec/lib/diaspora_federation/entities/like_spec.rb new file mode 100644 index 0000000..a926e71 --- /dev/null +++ b/spec/lib/diaspora_federation/entities/like_spec.rb @@ -0,0 +1,31 @@ +module DiasporaFederation + describe Entities::Like do + let(:data) { + {positive: true, + guid: "0123456789abcdef", + target_type: "Post", + parent_guid: "fedcba9876543210", + parent_author_signature: "BBBBBB==", + author_signature: "AAAAAA==", + diaspora_id: "luke@diaspora.example.tld"} + } + + let(:xml) { + <<-XML + + true + 0123456789abcdef + Post + fedcba9876543210 + BBBBBB== + AAAAAA== + luke@diaspora.example.tld + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/message_spec.rb b/spec/lib/diaspora_federation/entities/message_spec.rb new file mode 100644 index 0000000..93fb53f --- /dev/null +++ b/spec/lib/diaspora_federation/entities/message_spec.rb @@ -0,0 +1,24 @@ +module DiasporaFederation + describe Entities::Message do + let(:data) { FactoryGirl.attributes_for(:message_entity) } + + let(:xml) { + <<-XML + + #{data[:guid]} + #{data[:parent_guid]} + #{data[:parent_author_signature]} + #{data[:author_signature]} + #{data[:text]} + #{data[:created_at]} + #{data[:diaspora_id]} + #{data[:conversation_guid]} + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb new file mode 100644 index 0000000..981fb3d --- /dev/null +++ b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb @@ -0,0 +1,27 @@ +module DiasporaFederation + describe Entities::RelayableRetraction do + let(:data) { + {parent_author_signature: "AAAAAA=", + target_guid: "0123456789abcdef", + target_type: "Comment", + sender_id: "luke@diaspora.example.tld", + target_author_signature: "BBBBBB="} + } + + let(:xml) { + <<-XML + + AAAAAA= + 0123456789abcdef + Comment + luke@diaspora.example.tld + BBBBBB= + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/reshare_spec.rb b/spec/lib/diaspora_federation/entities/reshare_spec.rb new file mode 100644 index 0000000..ac83472 --- /dev/null +++ b/spec/lib/diaspora_federation/entities/reshare_spec.rb @@ -0,0 +1,35 @@ +module DiasporaFederation + describe Entities::Reshare do + before do + @datetime = DateTime.now.utc + end + + let(:data) { + {root_diaspora_id: "robert_root@pod.example.tld", + root_guid: "fedcba9876543210", + guid: "0123456789abcdef", + diaspora_id: "alice@diaspora.domain.tld", + public: true, + created_at: @datetime, + provider_display_name: "mobile"} + } + + let(:xml) { + <<-XML + + robert_root@pod.example.tld + fedcba9876543210 + 0123456789abcdef + alice@diaspora.domain.tld + true + #{@datetime} + mobile + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/retraction_spec.rb b/spec/lib/diaspora_federation/entities/retraction_spec.rb new file mode 100644 index 0000000..95098f1 --- /dev/null +++ b/spec/lib/diaspora_federation/entities/retraction_spec.rb @@ -0,0 +1,23 @@ +module DiasporaFederation + describe Entities::Retraction do + let(:data) { + {post_guid: "0123456789abcdef", + diaspora_id: "luke@diaspora.example.tld", + type: "StatusMessage"} + } + + let(:xml) { + <<-XML + + 0123456789abcdef + luke@diaspora.example.tld + StatusMessage + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb new file mode 100644 index 0000000..2fa0c76 --- /dev/null +++ b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb @@ -0,0 +1,25 @@ +module DiasporaFederation + describe Entities::SignedRetraction do + let(:data) { + {target_guid: "0123456789abcdef", + target_type: "StatusMessage", + sender_id: "luke@diaspora.example.tld", + target_author_signature: "AAAAAA=="} + } + + let(:xml) { + <<-XML + + 0123456789abcdef + StatusMessage + luke@diaspora.example.tld + AAAAAA== + +XML + } + + it_behaves_like "an Entity subclass" + + it_behaves_like "an XML Entity" + end +end diff --git a/spec/lib/diaspora_federation/validators/account_deletion_validator_spec.rb b/spec/lib/diaspora_federation/validators/account_deletion_validator_spec.rb new file mode 100644 index 0000000..4c3f834 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/account_deletion_validator_spec.rb @@ -0,0 +1,12 @@ +module DiasporaFederation + describe Validators::AccountDeletionValidator do + let(:entity) { :account_deletion_entity } + + it_behaves_like "a common validator" + + it_behaves_like "a diaspora id validator" do + let(:property) { :diaspora_id } + let(:mandatory) { true } + end + end +end diff --git a/spec/lib/diaspora_federation/validators/comment_validator_spec.rb b/spec/lib/diaspora_federation/validators/comment_validator_spec.rb new file mode 100644 index 0000000..884bf69 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/comment_validator_spec.rb @@ -0,0 +1,34 @@ +module DiasporaFederation + describe Validators::CommentValidator do + let(:entity) { :comment_entity } + + it_behaves_like "a common validator" + + it_behaves_like "a diaspora id validator" do + let(:property) { :diaspora_id } + let(:mandatory) { true } + end + + %i(guid parent_guid).each do |prop| + it_behaves_like "a guid validator" do + let(:property) { prop } + end + end + + context "#author_signature and #parent_author_signature" do + %i(author_signature parent_author_signature).each do |prop| + it_behaves_like "a property that mustn't be empty" do + let(:property) { prop } + end + end + end + + context "#text" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :text } + let(:wrong_values) { ["", "a" * 65_536] } + let(:correct_values) { ["a" * 65_535] } + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb new file mode 100644 index 0000000..3d2a550 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb @@ -0,0 +1,25 @@ +module DiasporaFederation + describe Validators::ConversationValidator do + let(:entity) { :conversation_entity } + + it_behaves_like "a common validator" + + 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 "participant_ids" do + # must not contain more than 20 participant handles + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :participant_ids } + let(:wrong_values) { [21.times.map { FactoryGirl.generate(:diaspora_id) }.join(";")] } + let(:correct_values) { [20.times.map { FactoryGirl.generate(:diaspora_id) }.join(";")] } + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/like_validator_spec.rb b/spec/lib/diaspora_federation/validators/like_validator_spec.rb new file mode 100644 index 0000000..4cdaff4 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/like_validator_spec.rb @@ -0,0 +1,25 @@ +module DiasporaFederation + describe Validators::LikeValidator do + let(:entity) { :like_entity } + it_behaves_like "a common validator" + + %i(guid parent_guid).each do |prop| + it_behaves_like "a guid validator" do + let(:property) { prop } + end + end + + context "#author_signature and #parent_author_signature" do + %i(author_signature parent_author_signature).each do |prop| + it_behaves_like "a property that mustn't be empty" do + let(:property) { prop } + end + end + end + + it_behaves_like "a diaspora id validator" do + let(:property) { :diaspora_id } + let(:mandatory) { true } + end + end +end diff --git a/spec/lib/diaspora_federation/validators/location_validator_spec.rb b/spec/lib/diaspora_federation/validators/location_validator_spec.rb index 40f0438..5297c2f 100644 --- a/spec/lib/diaspora_federation/validators/location_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/location_validator_spec.rb @@ -5,10 +5,8 @@ module DiasporaFederation context "#lat and #lng" do %i(lat lng).each do |prop| - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property that mustn't be empty" do let(:property) { prop } - let(:wrong_values) { [""] } - let(:correct_values) { [] } end end end diff --git a/spec/lib/diaspora_federation/validators/message_validator_spec.rb b/spec/lib/diaspora_federation/validators/message_validator_spec.rb new file mode 100644 index 0000000..120be13 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/message_validator_spec.rb @@ -0,0 +1,27 @@ +module DiasporaFederation + describe Validators::MessageValidator do + let(:entity) { :message_entity } + it_behaves_like "a common validator" + + it_behaves_like "a diaspora id validator" do + let(:property) { :diaspora_id } + let(:mandatory) { true } + end + + context "#guid, #parent_guid, #conversation_guid" do + %i(guid parent_guid conversation_guid).each do |prop| + it_behaves_like "a guid validator" do + let(:property) { prop } + end + end + end + + context "#author_signature and #parent_author_signature" do + %i(author_signature parent_author_signature).each do |prop| + it_behaves_like "a property that mustn't be empty" do + let(:property) { prop } + end + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb index a72154e..60e4cd5 100644 --- a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb @@ -19,10 +19,8 @@ module DiasporaFederation context "#target_type and #author_signature and #parent_author_signature" do %i(target_type author_signature parent_author_signature).each do |prop| - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property that mustn't be empty" do let(:property) { prop } - let(:wrong_values) { [""] } - let(:correct_values) { [] } end end end diff --git a/spec/lib/diaspora_federation/validators/person_validator_spec.rb b/spec/lib/diaspora_federation/validators/person_validator_spec.rb index 8b049e4..83640f2 100644 --- a/spec/lib/diaspora_federation/validators/person_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/person_validator_spec.rb @@ -20,7 +20,7 @@ module DiasporaFederation end describe "#profile" do - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property with a value validation/restriction" do let(:property) { :profile } let(:wrong_values) { [nil] } let(:correct_values) { [] } diff --git a/spec/lib/diaspora_federation/validators/photo_validator_spec.rb b/spec/lib/diaspora_federation/validators/photo_validator_spec.rb index 21eda89..abee4f8 100644 --- a/spec/lib/diaspora_federation/validators/photo_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/photo_validator_spec.rb @@ -23,17 +23,15 @@ module DiasporaFederation context "#remote_photo_path, #remote_photo_name" do %i(remote_photo_name remote_photo_path).each do |prop| - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property that mustn't be empty" do let(:property) { prop } - let(:wrong_values) { [""] } - let(:correct_values) { [] } end end end context "#height, #width" do %i(height width).each do |prop| - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property with a value validation/restriction" do let(:property) { prop } let(:wrong_values) { [true, :num, "asdf"] } let(:correct_values) { [123, "123"] } diff --git a/spec/lib/diaspora_federation/validators/profile_validator_spec.rb b/spec/lib/diaspora_federation/validators/profile_validator_spec.rb index 7996638..0eb7929 100644 --- a/spec/lib/diaspora_federation/validators/profile_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/profile_validator_spec.rb @@ -20,7 +20,7 @@ module DiasporaFederation %i(image_url image_url_medium image_url_small).each do |prop| describe "##{prop}" do - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property with a value validation/restriction" do let(:property) { prop } let(:wrong_values) { [] } let(:correct_values) { [nil] } @@ -54,7 +54,7 @@ module DiasporaFederation end describe "#birthday" do - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property with a value validation/restriction" do let(:property) { :birthday } let(:wrong_values) { ["asdf asdf", true, 1234] } let(:correct_values) { [nil, "", Date.parse("2013-06-29"), "2013-06-29"] } @@ -71,7 +71,7 @@ module DiasporaFederation describe "#tag_string" do # more than 5 tags are not allowed - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property with a value validation/restriction" do let(:property) { :tag_string } let(:wrong_values) { ["#i #have #too #many #tags #in #my #profile"] } let(:correct_values) { [] } diff --git a/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb new file mode 100644 index 0000000..8660241 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb @@ -0,0 +1,23 @@ +module DiasporaFederation + describe Validators::RelayableRetractionValidator do + let(:entity) { :relayable_retraction_entity } + it_behaves_like "a common validator" + + it_behaves_like "a diaspora id validator" do + let(:property) { :sender_id } + let(:mandatory) { true } + end + + it_behaves_like "a guid validator" do + let(:property) { :target_guid } + end + + context "#parent_author_signature, #target_author_signature" do + %i(parent_author_signature target_author_signature).each do |prop| + it_behaves_like "a property that mustn't be empty" do + let(:property) { prop } + end + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/reshare_validator_spec.rb b/spec/lib/diaspora_federation/validators/reshare_validator_spec.rb new file mode 100644 index 0000000..b2dc070 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/reshare_validator_spec.rb @@ -0,0 +1,27 @@ +module DiasporaFederation + describe Validators::ReshareValidator do + let(:entity) { :reshare_entity } + it_behaves_like "a common validator" + + context "#root_diaspora_id, #diaspora_id" do + %i(root_diaspora_id diaspora_id).each do |prop| + it_behaves_like "a diaspora id validator" do + let(:property) { prop } + let(:mandatory) { true } + end + end + end + + context "#root_guid, #guid" do + %i(root_guid guid).each do |prop| + it_behaves_like "a guid validator" do + let(:property) { prop } + end + end + end + + it_behaves_like "a boolean validator" do + let(:property) { :public } + end + end +end diff --git a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb new file mode 100644 index 0000000..4c42c39 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb @@ -0,0 +1,21 @@ +module DiasporaFederation + describe Validators::RetractionValidator do + let(:entity) { :retraction_entity } + it_behaves_like "a common validator" + + it_behaves_like "a guid validator" do + let(:property) { :post_guid } + end + + it_behaves_like "a diaspora id validator" do + let(:property) { :diaspora_id } + let(:mandatory) { true } + end + + context "#type" do + it_behaves_like "a property that mustn't be empty" do + let(:property) { :type } + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb b/spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb new file mode 100644 index 0000000..7e8ca66 --- /dev/null +++ b/spec/lib/diaspora_federation/validators/rules/diaspora_id_count_spec.rb @@ -0,0 +1,43 @@ +describe Validation::Rule::DiasporaIdCount do + let(:id_str) { 3.times.map { FactoryGirl.generate(:diaspora_id) }.join(";") } + + it "requires a parameter" do + validator = Validation::Validator.new({}) + expect { + validator.rule(:ids, :diaspora_id_count) + }.to raise_error ArgumentError + end + + it "validates less ids" do + validator = Validation::Validator.new(OpenStruct.new(ids: id_str)) + validator.rule(:ids, diaspora_id_count: {maximum: 5}) + + expect(validator).to be_valid + expect(validator.errors).to be_empty + end + + it "fails for less but non ids" do + bad_str = "user@example.com;i am a weird diaspora id @@@ ### 12345;shouldnt be reached by a rule" + validator = Validation::Validator.new(OpenStruct.new(ids: bad_str)) + validator.rule(:ids, diaspora_id_count: {maximum: 5}) + + expect(validator).not_to be_valid + expect(validator.errors).to include(:ids) + end + + it "validates exactly as many ids" do + validator = Validation::Validator.new(OpenStruct.new(ids: id_str)) + validator.rule(:ids, diaspora_id_count: {maximum: 3}) + + expect(validator).to be_valid + expect(validator.errors).to be_empty + end + + it "fails for too many ids" do + validator = Validation::Validator.new(OpenStruct.new(ids: id_str)) + validator.rule(:ids, diaspora_id_count: {maximum: 1}) + + expect(validator).not_to be_valid + expect(validator.errors).to include(:ids) + end +end diff --git a/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb new file mode 100644 index 0000000..36720eb --- /dev/null +++ b/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb @@ -0,0 +1,23 @@ +module DiasporaFederation + describe Validators::SignedRetractionValidator do + let(:entity) { :signed_retraction_entity } + it_behaves_like "a common validator" + + it_behaves_like "a diaspora id validator" do + let(:property) { :sender_id } + let(:mandatory) { true } + end + + it_behaves_like "a guid validator" do + let(:property) { :target_guid } + end + + context "#target_type, #target_author_signature" do + %i(target_type target_author_signature).each do |prop| + it_behaves_like "a property that mustn't be empty" do + let(:property) { prop } + end + end + end + end +end diff --git a/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb b/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb index 4e477d6..288d476 100644 --- a/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb @@ -27,7 +27,7 @@ module DiasporaFederation # optional urls %i(alias_url salmon_url).each do |prop| describe "##{prop}" do - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property with a value validation/restriction" do let(:property) { prop } let(:wrong_values) { ["", "https://asdf$%.com", "example.com"] } let(:correct_values) { [nil] } diff --git a/spec/support/shared_validator_specs.rb b/spec/support/shared_validator_specs.rb index 52883d6..579beb5 100644 --- a/spec/support/shared_validator_specs.rb +++ b/spec/support/shared_validator_specs.rb @@ -16,7 +16,7 @@ shared_examples "a common validator" do end end -shared_examples "a property with data-types restriction" do +shared_examples "a property with a value validation/restriction" do it "fails if a wrong value is supplied" do wrong_values.each do |val| validator = described_class.new(entity_stub(entity, property => val)) @@ -34,6 +34,13 @@ shared_examples "a property with data-types restriction" do end end +shared_examples "a property that mustn't be empty" do + it_behaves_like "a property with a value validation/restriction" do + let(:wrong_values) { ["", nil] } + let(:correct_values) { [] } + end +end + shared_examples "a diaspora id validator" do it "must not be nil or empty if mandatory" do [nil, ""].each do |val| From b8b52fc60d05ea455f4063723311c53c9b196949 Mon Sep 17 00:00:00 2001 From: cmrd Senya Date: Fri, 6 Nov 2015 01:43:27 +0300 Subject: [PATCH 3/3] - New and older specs adjustments; - Move the specs to use FactoryGirl; - Replace use of "context" in specs with "describe". --- spec/factories.rb | 1 + .../entities/account_deletion_spec.rb | 4 +-- .../entities/comment_spec.rb | 21 +++++--------- .../diaspora_federation/entities/like_spec.rb | 24 ++++++---------- .../entities/participation_spec.rb | 9 +----- .../entities/relayable_retraction_spec.rb | 18 ++++-------- .../entities/request_spec.rb | 9 ++---- .../entities/reshare_spec.rb | 28 ++++++------------- .../entities/retraction_spec.rb | 12 +++----- .../entities/signed_retraction_spec.rb | 15 ++++------ .../validators/comment_validator_spec.rb | 6 ++-- .../validators/conversation_validator_spec.rb | 2 +- .../validators/h_card_validator_spec.rb | 4 +-- .../validators/like_validator_spec.rb | 4 +-- .../validators/location_validator_spec.rb | 4 +-- .../validators/message_validator_spec.rb | 8 +++--- .../participation_validator_spec.rb | 8 +++--- .../validators/photo_validator_spec.rb | 12 ++++---- .../relayable_retraction_validator_spec.rb | 4 +-- .../validators/request_validator_spec.rb | 4 +-- .../validators/reshare_validator_spec.rb | 8 +++--- .../validators/retraction_validator_spec.rb | 2 +- .../signed_retraction_validator_spec.rb | 4 +-- .../validators/web_finger_validator_spec.rb | 4 +-- 24 files changed, 80 insertions(+), 135 deletions(-) diff --git a/spec/factories.rb b/spec/factories.rb index d2830a7..8c188cd 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -173,6 +173,7 @@ FactoryGirl.define do diaspora_id public(true) created_at { DateTime.now.utc } + provider_display_name { "the testsuite" } end factory :retraction_entity, class: DiasporaFederation::Entities::Retraction do diff --git a/spec/lib/diaspora_federation/entities/account_deletion_spec.rb b/spec/lib/diaspora_federation/entities/account_deletion_spec.rb index af9aa39..5b3a4a0 100644 --- a/spec/lib/diaspora_federation/entities/account_deletion_spec.rb +++ b/spec/lib/diaspora_federation/entities/account_deletion_spec.rb @@ -1,11 +1,11 @@ module DiasporaFederation describe Entities::AccountDeletion do - let(:data) { {diaspora_id: "me@goes.byebye.tld"} } + let(:data) { FactoryGirl.attributes_for(:account_deletion_entity) } let(:xml) { <<-XML - me@goes.byebye.tld + #{data[:diaspora_id]} XML } diff --git a/spec/lib/diaspora_federation/entities/comment_spec.rb b/spec/lib/diaspora_federation/entities/comment_spec.rb index 06e024e..525c0c6 100644 --- a/spec/lib/diaspora_federation/entities/comment_spec.rb +++ b/spec/lib/diaspora_federation/entities/comment_spec.rb @@ -1,23 +1,16 @@ module DiasporaFederation describe Entities::Comment do - let(:data) { - {guid: "0123456789abcdef", - parent_guid: "fedcba9876543210", - parent_author_signature: "BBBBBB==", - author_signature: "AAAAAA==", - text: "my comment text", - diaspora_id: "bob@pod.somedomain.tld"} - } + let(:data) { FactoryGirl.attributes_for(:comment_entity) } let(:xml) { <<-XML - 0123456789abcdef - fedcba9876543210 - BBBBBB== - AAAAAA== - my comment text - bob@pod.somedomain.tld + #{data[:guid]} + #{data[:parent_guid]} + #{data[:parent_author_signature]} + #{data[:author_signature]} + #{data[:text]} + #{data[:diaspora_id]} XML } diff --git a/spec/lib/diaspora_federation/entities/like_spec.rb b/spec/lib/diaspora_federation/entities/like_spec.rb index a926e71..bc24952 100644 --- a/spec/lib/diaspora_federation/entities/like_spec.rb +++ b/spec/lib/diaspora_federation/entities/like_spec.rb @@ -1,25 +1,17 @@ module DiasporaFederation describe Entities::Like do - let(:data) { - {positive: true, - guid: "0123456789abcdef", - target_type: "Post", - parent_guid: "fedcba9876543210", - parent_author_signature: "BBBBBB==", - author_signature: "AAAAAA==", - diaspora_id: "luke@diaspora.example.tld"} - } + let(:data) { FactoryGirl.attributes_for(:like_entity) } let(:xml) { <<-XML - true - 0123456789abcdef - Post - fedcba9876543210 - BBBBBB== - AAAAAA== - luke@diaspora.example.tld + #{data[:positive]} + #{data[:guid]} + #{data[:target_type]} + #{data[:parent_guid]} + #{data[:parent_author_signature]} + #{data[:author_signature]} + #{data[:diaspora_id]} XML } diff --git a/spec/lib/diaspora_federation/entities/participation_spec.rb b/spec/lib/diaspora_federation/entities/participation_spec.rb index 5653c41..53c9db0 100644 --- a/spec/lib/diaspora_federation/entities/participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/participation_spec.rb @@ -1,13 +1,6 @@ module DiasporaFederation describe Entities::Participation do - let(:data) { - {guid: "0123456789abcdef", - target_type: "Post", - parent_guid: "fedcba9876543210", - parent_author_signature: "BBBBBB==", - author_signature: "AAAAAA==", - diaspora_id: "luke@diaspora.example.tld"} - } + let(:data) { FactoryGirl.attributes_for(:participation_entity) } let(:xml) { <<-XML diff --git a/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb index 981fb3d..afb4cf1 100644 --- a/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb @@ -1,21 +1,15 @@ module DiasporaFederation describe Entities::RelayableRetraction do - let(:data) { - {parent_author_signature: "AAAAAA=", - target_guid: "0123456789abcdef", - target_type: "Comment", - sender_id: "luke@diaspora.example.tld", - target_author_signature: "BBBBBB="} - } + let(:data) { FactoryGirl.attributes_for(:relayable_retraction_entity) } let(:xml) { <<-XML - AAAAAA= - 0123456789abcdef - Comment - luke@diaspora.example.tld - BBBBBB= + #{data[:parent_author_signature]} + #{data[:target_guid]} + #{data[:target_type]} + #{data[:sender_id]} + #{data[:target_author_signature]} XML } diff --git a/spec/lib/diaspora_federation/entities/request_spec.rb b/spec/lib/diaspora_federation/entities/request_spec.rb index 62592fb..36968ad 100644 --- a/spec/lib/diaspora_federation/entities/request_spec.rb +++ b/spec/lib/diaspora_federation/entities/request_spec.rb @@ -1,15 +1,12 @@ module DiasporaFederation describe Entities::Request do - let(:data) { - {sender_id: "alice@somepod.org", - recipient_id: "bob@otherpod.net"} - } + let(:data) { FactoryGirl.attributes_for(:request_entity) } let(:xml) { <<-XML - alice@somepod.org - bob@otherpod.net + #{data[:sender_id]} + #{data[:recipient_id]} XML } diff --git a/spec/lib/diaspora_federation/entities/reshare_spec.rb b/spec/lib/diaspora_federation/entities/reshare_spec.rb index ac83472..2483291 100644 --- a/spec/lib/diaspora_federation/entities/reshare_spec.rb +++ b/spec/lib/diaspora_federation/entities/reshare_spec.rb @@ -1,29 +1,17 @@ module DiasporaFederation describe Entities::Reshare do - before do - @datetime = DateTime.now.utc - end - - let(:data) { - {root_diaspora_id: "robert_root@pod.example.tld", - root_guid: "fedcba9876543210", - guid: "0123456789abcdef", - diaspora_id: "alice@diaspora.domain.tld", - public: true, - created_at: @datetime, - provider_display_name: "mobile"} - } + let(:data) { FactoryGirl.attributes_for(:reshare_entity) } let(:xml) { <<-XML - robert_root@pod.example.tld - fedcba9876543210 - 0123456789abcdef - alice@diaspora.domain.tld - true - #{@datetime} - mobile + #{data[:root_diaspora_id]} + #{data[:root_guid]} + #{data[:guid]} + #{data[:diaspora_id]} + #{data[:public]} + #{data[:created_at]} + #{data[:provider_display_name]} XML } diff --git a/spec/lib/diaspora_federation/entities/retraction_spec.rb b/spec/lib/diaspora_federation/entities/retraction_spec.rb index 95098f1..fb67be3 100644 --- a/spec/lib/diaspora_federation/entities/retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/retraction_spec.rb @@ -1,17 +1,13 @@ module DiasporaFederation describe Entities::Retraction do - let(:data) { - {post_guid: "0123456789abcdef", - diaspora_id: "luke@diaspora.example.tld", - type: "StatusMessage"} - } + let(:data) { FactoryGirl.attributes_for(:retraction_entity) } let(:xml) { <<-XML - 0123456789abcdef - luke@diaspora.example.tld - StatusMessage + #{data[:post_guid]} + #{data[:diaspora_id]} + #{data[:type]} XML } diff --git a/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb index 2fa0c76..494592e 100644 --- a/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb @@ -1,19 +1,14 @@ module DiasporaFederation describe Entities::SignedRetraction do - let(:data) { - {target_guid: "0123456789abcdef", - target_type: "StatusMessage", - sender_id: "luke@diaspora.example.tld", - target_author_signature: "AAAAAA=="} - } + let(:data) { FactoryGirl.attributes_for(:signed_retraction_entity) } let(:xml) { <<-XML - 0123456789abcdef - StatusMessage - luke@diaspora.example.tld - AAAAAA== + #{data[:target_guid]} + #{data[:target_type]} + #{data[:sender_id]} + #{data[:target_author_signature]} XML } diff --git a/spec/lib/diaspora_federation/validators/comment_validator_spec.rb b/spec/lib/diaspora_federation/validators/comment_validator_spec.rb index 884bf69..cad4627 100644 --- a/spec/lib/diaspora_federation/validators/comment_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/comment_validator_spec.rb @@ -15,15 +15,15 @@ module DiasporaFederation end end - context "#author_signature and #parent_author_signature" do - %i(author_signature parent_author_signature).each do |prop| + %i(author_signature parent_author_signature).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end end end - context "#text" do + describe "#text" do it_behaves_like "a property with a value validation/restriction" do let(:property) { :text } let(:wrong_values) { ["", "a" * 65_536] } diff --git a/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb index 3d2a550..3784902 100644 --- a/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/conversation_validator_spec.rb @@ -13,7 +13,7 @@ module DiasporaFederation let(:property) { :guid } end - context "participant_ids" do + describe "participant_ids" do # must not contain more than 20 participant handles it_behaves_like "a property with a value validation/restriction" do let(:property) { :participant_ids } diff --git a/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb b/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb index 7efde15..7f9042d 100644 --- a/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/h_card_validator_spec.rb @@ -22,10 +22,8 @@ module DiasporaFederation %i(photo_large_url photo_medium_url photo_small_url).each do |prop| describe "##{prop}" do - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property that mustn't be empty" do let(:property) { prop } - let(:wrong_values) { [nil, ""] } - let(:correct_values) { [] } end it_behaves_like "a url path validator" do diff --git a/spec/lib/diaspora_federation/validators/like_validator_spec.rb b/spec/lib/diaspora_federation/validators/like_validator_spec.rb index 4cdaff4..798138b 100644 --- a/spec/lib/diaspora_federation/validators/like_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/like_validator_spec.rb @@ -9,8 +9,8 @@ module DiasporaFederation end end - context "#author_signature and #parent_author_signature" do - %i(author_signature parent_author_signature).each do |prop| + %i(author_signature parent_author_signature).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end diff --git a/spec/lib/diaspora_federation/validators/location_validator_spec.rb b/spec/lib/diaspora_federation/validators/location_validator_spec.rb index 5297c2f..76bcc4e 100644 --- a/spec/lib/diaspora_federation/validators/location_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/location_validator_spec.rb @@ -3,8 +3,8 @@ module DiasporaFederation let(:entity) { :location_entity } it_behaves_like "a common validator" - context "#lat and #lng" do - %i(lat lng).each do |prop| + %i(lat lng).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end diff --git a/spec/lib/diaspora_federation/validators/message_validator_spec.rb b/spec/lib/diaspora_federation/validators/message_validator_spec.rb index 120be13..ea530b2 100644 --- a/spec/lib/diaspora_federation/validators/message_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/message_validator_spec.rb @@ -8,16 +8,16 @@ module DiasporaFederation let(:mandatory) { true } end - context "#guid, #parent_guid, #conversation_guid" do - %i(guid parent_guid conversation_guid).each do |prop| + %i(guid parent_guid conversation_guid).each do |prop| + describe "##{prop}" do it_behaves_like "a guid validator" do let(:property) { prop } end end end - context "#author_signature and #parent_author_signature" do - %i(author_signature parent_author_signature).each do |prop| + %i(author_signature parent_author_signature).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end diff --git a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb index 60e4cd5..285889b 100644 --- a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb @@ -9,16 +9,16 @@ module DiasporaFederation let(:mandatory) { true } end - context "#guid, #parent_guid" do - %i(guid parent_guid).each do |prop| + %i(guid parent_guid).each do |prop| + describe "##{prop}" do it_behaves_like "a guid validator" do let(:property) { prop } end end end - context "#target_type and #author_signature and #parent_author_signature" do - %i(target_type author_signature parent_author_signature).each do |prop| + %i(target_type author_signature parent_author_signature).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end diff --git a/spec/lib/diaspora_federation/validators/photo_validator_spec.rb b/spec/lib/diaspora_federation/validators/photo_validator_spec.rb index abee4f8..a978c0c 100644 --- a/spec/lib/diaspora_federation/validators/photo_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/photo_validator_spec.rb @@ -9,8 +9,8 @@ module DiasporaFederation let(:mandatory) { true } end - context "#guid, #status_message_guid" do - %i(guid status_message_guid).each do |prop| + %i(guid status_message_guid).each do |prop| + describe "##{prop}" do it_behaves_like "a guid validator" do let(:property) { prop } end @@ -21,16 +21,16 @@ module DiasporaFederation let(:property) { :public } end - context "#remote_photo_path, #remote_photo_name" do - %i(remote_photo_name remote_photo_path).each do |prop| + %i(remote_photo_name remote_photo_path).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end end end - context "#height, #width" do - %i(height width).each do |prop| + %i(height width).each do |prop| + describe "##{prop}" do it_behaves_like "a property with a value validation/restriction" do let(:property) { prop } let(:wrong_values) { [true, :num, "asdf"] } diff --git a/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb index 8660241..2e1e88e 100644 --- a/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb @@ -12,8 +12,8 @@ module DiasporaFederation let(:property) { :target_guid } end - context "#parent_author_signature, #target_author_signature" do - %i(parent_author_signature target_author_signature).each do |prop| + %i(parent_author_signature target_author_signature).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end diff --git a/spec/lib/diaspora_federation/validators/request_validator_spec.rb b/spec/lib/diaspora_federation/validators/request_validator_spec.rb index 79a34c4..d8e0dcc 100644 --- a/spec/lib/diaspora_federation/validators/request_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/request_validator_spec.rb @@ -4,8 +4,8 @@ module DiasporaFederation it_behaves_like "a common validator" - context "#sender_id, #recipient_id" do - %i(sender_id recipient_id).each do |prop| + %i(sender_id recipient_id).each do |prop| + describe "##{prop}" do it_behaves_like "a diaspora id validator" do let(:property) { prop } let(:mandatory) { true } diff --git a/spec/lib/diaspora_federation/validators/reshare_validator_spec.rb b/spec/lib/diaspora_federation/validators/reshare_validator_spec.rb index b2dc070..4f32d7b 100644 --- a/spec/lib/diaspora_federation/validators/reshare_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/reshare_validator_spec.rb @@ -3,8 +3,8 @@ module DiasporaFederation let(:entity) { :reshare_entity } it_behaves_like "a common validator" - context "#root_diaspora_id, #diaspora_id" do - %i(root_diaspora_id diaspora_id).each do |prop| + %i(root_diaspora_id diaspora_id).each do |prop| + describe "##{prop}" do it_behaves_like "a diaspora id validator" do let(:property) { prop } let(:mandatory) { true } @@ -12,8 +12,8 @@ module DiasporaFederation end end - context "#root_guid, #guid" do - %i(root_guid guid).each do |prop| + %i(root_guid guid).each do |prop| + describe "##{prop}" do it_behaves_like "a guid validator" do let(:property) { prop } end diff --git a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb index 4c42c39..ac14653 100644 --- a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb @@ -12,7 +12,7 @@ module DiasporaFederation let(:mandatory) { true } end - context "#type" do + describe "#type" do it_behaves_like "a property that mustn't be empty" do let(:property) { :type } end diff --git a/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb index 36720eb..6c59445 100644 --- a/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb @@ -12,8 +12,8 @@ module DiasporaFederation let(:property) { :target_guid } end - context "#target_type, #target_author_signature" do - %i(target_type target_author_signature).each do |prop| + %i(target_type target_author_signature).each do |prop| + describe "##{prop}" do it_behaves_like "a property that mustn't be empty" do let(:property) { prop } end diff --git a/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb b/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb index 288d476..1d91e7e 100644 --- a/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/web_finger_validator_spec.rb @@ -5,10 +5,8 @@ module DiasporaFederation it_behaves_like "a common validator" describe "#acct_uri" do - it_behaves_like "a property with data-types restriction" do + it_behaves_like "a property that mustn't be empty" do let(:property) { :acct_uri } - let(:wrong_values) { [nil, ""] } - let(:correct_values) { [] } end end