This commit introduces support for AccountMigration federation message receive. It covers the cases when the new home pod for a user is remote respective to the recepient pod of the message. It also allows to initiate migration locally by a podmin from the rails console. This will give the pods a possibility to understand the account migration event on the federation level and thus future version which will implement migration will be backward compatible with the pods starting from this commit.
311 lines
16 KiB
Ruby
311 lines
16 KiB
Ruby
describe Diaspora::Federation::Entities do
|
|
describe ".build" do
|
|
it "builds an account deletion" do
|
|
diaspora_entity = FactoryGirl.build(:account_deletion)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::AccountDeletion)
|
|
expect(federation_entity.author).to eq(diaspora_entity.person.diaspora_handle)
|
|
end
|
|
|
|
it "builds an account migration" do
|
|
diaspora_entity = FactoryGirl.build(:account_migration)
|
|
diaspora_entity.old_private_key = OpenSSL::PKey::RSA.generate(1024).export
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::AccountMigration)
|
|
expect(federation_entity.author).to eq(diaspora_entity.old_person.diaspora_handle)
|
|
expect(federation_entity.profile.author).to eq(diaspora_entity.new_person.diaspora_handle)
|
|
end
|
|
|
|
it "builds a comment" do
|
|
diaspora_entity = FactoryGirl.build(:comment)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Comment)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.parent_guid).to eq(diaspora_entity.post.guid)
|
|
expect(federation_entity.text).to eq(diaspora_entity.text)
|
|
expect(federation_entity.author_signature).to be_nil
|
|
expect(federation_entity.additional_data).to be_empty
|
|
end
|
|
|
|
it "builds a comment with signature" do
|
|
diaspora_entity = FactoryGirl.build(:comment, signature: FactoryGirl.build(:comment_signature))
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Comment)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.parent_guid).to eq(diaspora_entity.post.guid)
|
|
expect(federation_entity.text).to eq(diaspora_entity.text)
|
|
expect(federation_entity.author_signature).to eq(diaspora_entity.signature.author_signature)
|
|
expect(federation_entity.signature_order.map(&:to_s)).to eq(diaspora_entity.signature.signature_order.order.split)
|
|
expect(federation_entity.additional_data).to eq(diaspora_entity.signature.additional_data)
|
|
end
|
|
|
|
it "builds a contact" do
|
|
diaspora_entity = FactoryGirl.build(:contact, receiving: true)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Contact)
|
|
expect(federation_entity.author).to eq(diaspora_entity.user.diaspora_handle)
|
|
expect(federation_entity.recipient).to eq(diaspora_entity.person.diaspora_handle)
|
|
expect(federation_entity.sharing).to be_truthy
|
|
expect(federation_entity.following).to be_truthy
|
|
end
|
|
|
|
context "Conversation" do
|
|
let(:participant) { FactoryGirl.create(:person) }
|
|
let(:diaspora_entity) { FactoryGirl.create(:conversation_with_message, participants: [participant]) }
|
|
let(:federation_entity) { described_class.build(diaspora_entity) }
|
|
|
|
it "builds a conversation" do
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Conversation)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.subject).to eq(diaspora_entity.subject)
|
|
expect(federation_entity.created_at).to eq(diaspora_entity.created_at)
|
|
end
|
|
|
|
it "adds the participants" do
|
|
expect(federation_entity.participants)
|
|
.to eq("#{participant.diaspora_handle};#{diaspora_entity.author.diaspora_handle}")
|
|
end
|
|
|
|
it "includes the message" do
|
|
diaspora_message = diaspora_entity.messages.first
|
|
federation_message = federation_entity.messages.first
|
|
|
|
expect(federation_message.author).to eq(diaspora_message.author.diaspora_handle)
|
|
expect(federation_message.guid).to eq(diaspora_message.guid)
|
|
expect(federation_message.conversation_guid).to eq(diaspora_entity.guid)
|
|
expect(federation_message.text).to eq(diaspora_message.text)
|
|
expect(federation_message.created_at).to eq(diaspora_message.created_at)
|
|
end
|
|
end
|
|
|
|
it "builds a like" do
|
|
diaspora_entity = FactoryGirl.build(:like)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Like)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.parent_guid).to eq(diaspora_entity.target.guid)
|
|
expect(federation_entity.positive).to eq(diaspora_entity.positive)
|
|
expect(federation_entity.author_signature).to be_nil
|
|
expect(federation_entity.additional_data).to be_empty
|
|
end
|
|
|
|
it "builds a like with signature" do
|
|
diaspora_entity = FactoryGirl.build(:like, signature: FactoryGirl.build(:like_signature))
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Like)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.parent_guid).to eq(diaspora_entity.target.guid)
|
|
expect(federation_entity.positive).to eq(diaspora_entity.positive)
|
|
expect(federation_entity.author_signature).to eq(diaspora_entity.signature.author_signature)
|
|
expect(federation_entity.signature_order.map(&:to_s)).to eq(diaspora_entity.signature.signature_order.order.split)
|
|
expect(federation_entity.additional_data).to eq(diaspora_entity.signature.additional_data)
|
|
end
|
|
|
|
it "builds a message" do
|
|
diaspora_entity = FactoryGirl.create(:message)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Message)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.conversation_guid).to eq(diaspora_entity.conversation.guid)
|
|
expect(federation_entity.text).to eq(diaspora_entity.text)
|
|
expect(federation_entity.created_at).to eq(diaspora_entity.created_at)
|
|
end
|
|
|
|
it "builds a participation" do
|
|
diaspora_entity = FactoryGirl.build(:participation)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Participation)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.parent_guid).to eq(diaspora_entity.target.guid)
|
|
expect(federation_entity.parent_type).to eq(diaspora_entity.target.class.base_class.to_s)
|
|
end
|
|
|
|
it "builds a photo" do
|
|
diaspora_entity = FactoryGirl.create(:photo)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Photo)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.public).to eq(diaspora_entity.public)
|
|
expect(federation_entity.created_at).to eq(diaspora_entity.created_at)
|
|
expect(federation_entity.remote_photo_path).to eq(diaspora_entity.remote_photo_path)
|
|
expect(federation_entity.remote_photo_name).to eq(diaspora_entity.remote_photo_name)
|
|
expect(federation_entity.text).to eq(diaspora_entity.text)
|
|
expect(federation_entity.height).to eq(diaspora_entity.height)
|
|
expect(federation_entity.width).to eq(diaspora_entity.width)
|
|
end
|
|
|
|
it "builds a poll participation" do
|
|
diaspora_entity = FactoryGirl.build(:poll_participation)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::PollParticipation)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.parent_guid).to eq(diaspora_entity.poll_answer.poll.guid)
|
|
expect(federation_entity.poll_answer_guid).to eq(diaspora_entity.poll_answer.guid)
|
|
expect(federation_entity.author_signature).to be_nil
|
|
expect(federation_entity.additional_data).to be_empty
|
|
end
|
|
|
|
it "builds a poll participation with signature" do
|
|
signature = FactoryGirl.build(:poll_participation_signature)
|
|
diaspora_entity = FactoryGirl.build(:poll_participation, signature: signature)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::PollParticipation)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.parent_guid).to eq(diaspora_entity.poll_answer.poll.guid)
|
|
expect(federation_entity.poll_answer_guid).to eq(diaspora_entity.poll_answer.guid)
|
|
expect(federation_entity.author_signature).to eq(signature.author_signature)
|
|
expect(federation_entity.signature_order.map(&:to_s)).to eq(signature.signature_order.order.split)
|
|
expect(federation_entity.additional_data).to eq(signature.additional_data)
|
|
end
|
|
|
|
it "builds a profile" do
|
|
diaspora_entity = FactoryGirl.build(:profile_with_image_url)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Profile)
|
|
expect(federation_entity.author).to eq(diaspora_entity.diaspora_handle)
|
|
expect(federation_entity.first_name).to eq(diaspora_entity.first_name)
|
|
expect(federation_entity.last_name).to eq(diaspora_entity.last_name)
|
|
expect(federation_entity.image_url).to eq(diaspora_entity.image_url)
|
|
expect(federation_entity.image_url_medium).to eq(diaspora_entity.image_url_medium)
|
|
expect(federation_entity.image_url_small).to eq(diaspora_entity.image_url_small)
|
|
expect(federation_entity.birthday).to eq(diaspora_entity.birthday)
|
|
expect(federation_entity.gender).to eq(diaspora_entity.gender)
|
|
expect(federation_entity.bio).to eq(diaspora_entity.bio)
|
|
expect(federation_entity.location).to eq(diaspora_entity.location)
|
|
expect(federation_entity.searchable).to eq(diaspora_entity.searchable)
|
|
expect(federation_entity.nsfw).to eq(diaspora_entity.nsfw)
|
|
expect(federation_entity.tag_string.split(" ")).to match_array(diaspora_entity.tag_string.split(" "))
|
|
expect(federation_entity.public).to eq(diaspora_entity.public_details)
|
|
end
|
|
|
|
it "builds a reshare" do
|
|
diaspora_entity = FactoryGirl.create(:reshare)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Reshare)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.root_author).to eq(diaspora_entity.root.author.diaspora_handle)
|
|
expect(federation_entity.root_guid).to eq(diaspora_entity.root.guid)
|
|
expect(federation_entity.public).to be_truthy
|
|
expect(federation_entity.created_at).to eq(diaspora_entity.created_at)
|
|
expect(federation_entity.provider_display_name).to eq(diaspora_entity.provider_display_name)
|
|
end
|
|
|
|
context "Retraction" do
|
|
it "builds a Retraction entity for a Photo retraction" do
|
|
target = FactoryGirl.create(:photo, author: alice.person)
|
|
retraction = Retraction.for(target)
|
|
federation_entity = described_class.build(retraction)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Retraction)
|
|
expect(federation_entity.author).to eq(target.author.diaspora_handle)
|
|
expect(federation_entity.target_guid).to eq(target.guid)
|
|
expect(federation_entity.target_type).to eq("Photo")
|
|
end
|
|
|
|
it "builds a Contact for a Contact retraction" do
|
|
target = FactoryGirl.create(:contact, receiving: false)
|
|
retraction = ContactRetraction.for(target)
|
|
federation_entity = described_class.build(retraction)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Contact)
|
|
expect(federation_entity.author).to eq(target.user.diaspora_handle)
|
|
expect(federation_entity.recipient).to eq(target.person.diaspora_handle)
|
|
expect(federation_entity.sharing).to be_falsey
|
|
expect(federation_entity.following).to be_falsey
|
|
end
|
|
end
|
|
|
|
context "StatusMessage" do
|
|
it "builds a status message" do
|
|
diaspora_entity = FactoryGirl.create(:status_message)
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
|
|
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::StatusMessage)
|
|
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_entity.guid).to eq(diaspora_entity.guid)
|
|
expect(federation_entity.text).to eq(diaspora_entity.text)
|
|
expect(federation_entity.public).to eq(diaspora_entity.public)
|
|
expect(federation_entity.created_at).to eq(diaspora_entity.created_at)
|
|
expect(federation_entity.provider_display_name).to eq(diaspora_entity.provider_display_name)
|
|
|
|
expect(federation_entity.photos).to be_empty
|
|
expect(federation_entity.location).to be_nil
|
|
expect(federation_entity.poll).to be_nil
|
|
end
|
|
|
|
it "includes the photos" do
|
|
diaspora_entity = FactoryGirl.create(:status_message_with_photo)
|
|
diaspora_photo = diaspora_entity.photos.first
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
federation_photo = federation_entity.photos.first
|
|
|
|
expect(federation_entity.photos.size).to eq(1)
|
|
expect(federation_photo.author).to eq(diaspora_entity.author.diaspora_handle)
|
|
expect(federation_photo.guid).to eq(diaspora_photo.guid)
|
|
expect(federation_photo.public).to eq(diaspora_photo.public)
|
|
expect(federation_photo.created_at).to eq(diaspora_photo.created_at)
|
|
expect(federation_photo.remote_photo_path).to eq(diaspora_photo.remote_photo_path)
|
|
expect(federation_photo.remote_photo_name).to eq(diaspora_photo.remote_photo_name)
|
|
expect(federation_photo.text).to eq(diaspora_photo.text)
|
|
expect(federation_photo.height).to eq(diaspora_photo.height)
|
|
expect(federation_photo.width).to eq(diaspora_photo.width)
|
|
end
|
|
|
|
it "includes the location" do
|
|
diaspora_entity = FactoryGirl.create(:status_message_with_location)
|
|
diaspora_location = diaspora_entity.location
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
federation_location = federation_entity.location
|
|
|
|
expect(federation_location.address).to eq(diaspora_location.address)
|
|
expect(federation_location.lat).to eq(diaspora_location.lat)
|
|
expect(federation_location.lng).to eq(diaspora_location.lng)
|
|
end
|
|
|
|
it "includes the poll" do
|
|
diaspora_entity = FactoryGirl.create(:status_message_with_poll)
|
|
diaspora_poll = diaspora_entity.poll
|
|
federation_entity = described_class.build(diaspora_entity)
|
|
federation_poll = federation_entity.poll
|
|
|
|
expect(federation_poll.guid).to eq(diaspora_poll.guid)
|
|
expect(federation_poll.question).to eq(diaspora_poll.question)
|
|
|
|
diaspora_answer1 = diaspora_poll.poll_answers.first
|
|
diaspora_answer2 = diaspora_poll.poll_answers.second
|
|
federation_answer1 = federation_poll.poll_answers.first
|
|
federation_answer2 = federation_poll.poll_answers.second
|
|
|
|
expect(federation_answer1.guid).to eq(diaspora_answer1.guid)
|
|
expect(federation_answer1.answer).to eq(diaspora_answer1.answer)
|
|
expect(federation_answer2.guid).to eq(diaspora_answer2.guid)
|
|
expect(federation_answer2.answer).to eq(diaspora_answer2.answer)
|
|
end
|
|
end
|
|
end
|
|
end
|