diaspora/spec/integration/federation/shared_receive_retraction.rb
2015-12-30 14:50:34 +01:00

63 lines
2.5 KiB
Ruby

def mock_private_keys_for_retraction(entity_name, entity, sender)
if %i(signed_retraction_entity relayable_retraction_entity).include?(entity_name)
allow(DiasporaFederation.callbacks).to receive(:trigger)
.with(:fetch_private_key_by_diaspora_id, sender.diaspora_handle)
.and_return(sender.encryption_key)
end
if entity_name == :relayable_retraction_entity
allow(DiasporaFederation.callbacks).to receive(:trigger)
.with(
:fetch_entity_author_id_by_guid,
entity.target_type,
entity.target_guid
)
.and_return(sender.encryption_key)
end
end
def generate_retraction(entity_name, target_object, sender)
entity = FactoryGirl.build(
entity_name,
diaspora_id: sender.diaspora_handle,
target_guid: target_object.guid,
target_type: target_object.class.to_s
)
mock_private_keys_for_retraction(entity_name, entity, sender)
generate_xml(entity, sender, alice)
end
shared_examples_for "it retracts non-relayable object" do
it_behaves_like "it retracts object" do
let(:sender) { remote_user_on_pod_b }
end
it "doesn't retract object when sender is different from target object" do
target_klass = target_object.class.to_s.constantize
Workers::ReceiveEncryptedSalmon.new.perform(
alice.id,
generate_retraction(entity_name, target_object, remote_user_on_pod_c)
)
expect(target_klass.exists?(guid: target_object.guid)).to be(true)
end
end
shared_examples_for "it retracts object" do
it "retracts object by a correct message" do
target_klass = target_object.class.to_s.constantize
Workers::ReceiveEncryptedSalmon.new.perform(alice.id, generate_retraction(entity_name, target_object, sender))
expect(target_klass.exists?(guid: target_object.guid)).to be(false)
end
it "doesn't retract object when retraction has wrong signatures" do
target_klass = target_object.class.to_s.constantize
allow(sender).to receive(:encryption_key).and_return(OpenSSL::PKey::RSA.new(1024))
Workers::ReceiveEncryptedSalmon.new.perform(alice.id, generate_retraction(entity_name, target_object, sender))
expect(target_klass.exists?(guid: target_object.guid)).to be(true)
end
end