63 lines
2.5 KiB
Ruby
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
|