From 2db0931ce52b17caf483dc733656f064ef9c89fe Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Tue, 29 Mar 2016 02:30:43 +0200 Subject: [PATCH] write more tests for retractions --- lib/diaspora_federation/entities/retraction.rb | 2 +- .../entities/relayable_retraction_spec.rb | 2 ++ .../entities/retraction_spec.rb | 2 ++ .../entities/signed_retraction_spec.rb | 2 ++ .../relayable_retraction_validator_spec.rb | 8 ++++++++ .../validators/retraction_validator_spec.rb | 8 ++++++++ .../signed_retraction_validator_spec.rb | 8 ++++++++ spec/support/shared_entity_specs.rb | 15 +++++++++++++++ 8 files changed, 46 insertions(+), 1 deletion(-) diff --git a/lib/diaspora_federation/entities/retraction.rb b/lib/diaspora_federation/entities/retraction.rb index cf79fc8..0545ab1 100644 --- a/lib/diaspora_federation/entities/retraction.rb +++ b/lib/diaspora_federation/entities/retraction.rb @@ -44,7 +44,7 @@ module DiasporaFederation def self.fetch_target(target_type, target_guid) DiasporaFederation.callbacks.trigger(:fetch_related_entity, target_type, target_guid).tap do |target| - raise TargetNotFound unless target + raise TargetNotFound, "not found: #{target_type}:#{target_guid}" unless target end end private_class_method :fetch_target diff --git a/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb index d786d35..e915def 100644 --- a/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/relayable_retraction_spec.rb @@ -37,6 +37,8 @@ XML it_behaves_like "an XML Entity", %i(parent_author_signature target_author_signature) + it_behaves_like "a retraction" + describe "#to_xml" do let(:author_pkey) { OpenSSL::PKey::RSA.generate(1024) } let(:hash) { FactoryGirl.attributes_for(:relayable_retraction_entity) } diff --git a/spec/lib/diaspora_federation/entities/retraction_spec.rb b/spec/lib/diaspora_federation/entities/retraction_spec.rb index 6abb84c..9f73b27 100644 --- a/spec/lib/diaspora_federation/entities/retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/retraction_spec.rb @@ -24,5 +24,7 @@ XML it_behaves_like "an Entity subclass", [:target] it_behaves_like "an XML Entity" + + it_behaves_like "a retraction" end end diff --git a/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb index 5e78504..08b9934 100644 --- a/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb +++ b/spec/lib/diaspora_federation/entities/signed_retraction_spec.rb @@ -27,6 +27,8 @@ XML it_behaves_like "an XML Entity", [:target_author_signature] + it_behaves_like "a retraction" + describe "#to_xml" do let(:author_pkey) { OpenSSL::PKey::RSA.generate(1024) } let(:hash) { FactoryGirl.attributes_for(:signed_retraction_entity) } 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 d2bde8c..7313c08 100644 --- a/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/relayable_retraction_validator_spec.rb @@ -17,5 +17,13 @@ module DiasporaFederation let(:property) { :target_type } end end + + describe "#target" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :target } + let(:wrong_values) { [nil] } + let(:correct_values) { [FactoryGirl.build(:related_entity)] } + end + 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 index 29afad9..80978d1 100644 --- a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb @@ -17,5 +17,13 @@ module DiasporaFederation let(:property) { :target_type } end end + + describe "#target" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :target } + let(:wrong_values) { [nil] } + let(:correct_values) { [FactoryGirl.build(:related_entity)] } + end + end 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 index b896e06..df295c9 100644 --- a/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/signed_retraction_validator_spec.rb @@ -17,5 +17,13 @@ module DiasporaFederation let(:property) { :target_type } end end + + describe "#target" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :target } + let(:wrong_values) { [nil] } + let(:correct_values) { [FactoryGirl.build(:related_entity)] } + end + end end end diff --git a/spec/support/shared_entity_specs.rb b/spec/support/shared_entity_specs.rb index c70cbfc..0807a0a 100644 --- a/spec/support/shared_entity_specs.rb +++ b/spec/support/shared_entity_specs.rb @@ -92,3 +92,18 @@ shared_examples "a relayable Entity" do end end end + +shared_examples "a retraction" do + context "receive with no target found" do + let(:unknown_guid) { FactoryGirl.generate(:guid) } + let(:instance) { described_class.new(data.merge(target_guid: unknown_guid)) } + + it "raises when no target is found" do + xml = instance.to_xml + expect { + described_class.from_xml(xml) + }.to raise_error DiasporaFederation::Entities::Retraction::TargetNotFound, + "not found: #{data[:target_type]}:#{unknown_guid}" + end + end +end