write spec for Diaspora::Federation::Entities to replace xml specs

This commit is contained in:
Benjamin Neff 2016-06-10 19:16:31 +02:00
parent 7893a23927
commit d2219aa58f
2 changed files with 314 additions and 1 deletions

View file

@ -21,6 +21,7 @@ FactoryGirl.define do
gender "robot"
location "Earth"
birthday Date.today
tag_string "#one #two"
association :person
end
@ -177,6 +178,8 @@ FactoryGirl.define do
factory(:photo) do
sequence(:random_string) {|n| SecureRandom.hex(10) }
association :author, :factory => :person
height 42
width 23
after(:build) do |p|
p.unprocessed_image.store! File.open(File.join(File.dirname(__FILE__), 'fixtures', 'button.png'))
p.update_remote_path
@ -290,7 +293,7 @@ FactoryGirl.define do
end
factory(:conversation_with_message, parent: :conversation) do
after(:build) do |c|
after(:create) do |c|
msg = FactoryGirl.build(:message)
msg.conversation_id = c.id
c.participants << msg.author

View file

@ -0,0 +1,310 @@
require "spec_helper"
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 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)
end
it "builds a contact (request)" do
diaspora_entity = FactoryGirl.build(:contact)
federation_entity = described_class.build(diaspora_entity)
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Request)
expect(federation_entity.author).to eq(diaspora_entity.user.diaspora_handle)
expect(federation_entity.recipient).to eq(diaspora_entity.person.diaspora_handle)
end
context "Conversation" do
let(:diaspora_entity) { FactoryGirl.create(:conversation_with_message) }
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("#{diaspora_entity.author.diaspora_handle};#{diaspora_entity.messages.first.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)
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)
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).to eq(diaspora_entity.tag_string)
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 "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.raw_message).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
describe ".build_retraction" do
context "Retraction" do
it "builds a Retraction for a Photo" do
target = FactoryGirl.create(:photo, author: alice.person)
retraction = Retraction.for(target, alice)
federation_retraction = described_class.build_retraction(retraction)
expect(federation_retraction).to be_instance_of(DiasporaFederation::Entities::Retraction)
expect(federation_retraction.author).to eq(target.author.diaspora_handle)
expect(federation_retraction.target_guid).to eq(target.guid)
expect(federation_retraction.target_type).to eq("Photo")
end
it "builds a Retraction for a Contact" do
target = FactoryGirl.create(:contact)
retraction = Retraction.for(target, target.user)
federation_retraction = described_class.build_retraction(retraction)
expect(federation_retraction).to be_instance_of(DiasporaFederation::Entities::Retraction)
expect(federation_retraction.author).to eq(target.user.diaspora_handle)
expect(federation_retraction.target_guid).to eq(target.user.guid)
expect(federation_retraction.target_type).to eq("Person")
end
end
context "SignedRetraction" do
it "builds a SignedRetraction for a StatusMessage" do
target = FactoryGirl.create(:status_message, author: alice.person)
retraction = Retraction.for(target, alice)
federation_retraction = described_class.build_retraction(retraction)
expect(federation_retraction).to be_instance_of(DiasporaFederation::Entities::SignedRetraction)
expect(federation_retraction.author).to eq(target.author.diaspora_handle)
expect(federation_retraction.target_guid).to eq(target.guid)
expect(federation_retraction.target_type).to eq("Post")
end
it "builds a SignedRetraction for a Reshare" do
target = FactoryGirl.create(:reshare, author: alice.person)
retraction = Retraction.for(target, alice)
federation_retraction = described_class.build_retraction(retraction)
expect(federation_retraction).to be_instance_of(DiasporaFederation::Entities::SignedRetraction)
expect(federation_retraction.author).to eq(target.author.diaspora_handle)
expect(federation_retraction.target_guid).to eq(target.guid)
expect(federation_retraction.target_type).to eq("Post")
end
end
context "RelayableRetraction" do
it "builds a RelayableRetraction for a Comment" do
target = FactoryGirl.create(:comment, author: alice.person)
retraction = Retraction.for(target, alice)
federation_retraction = described_class.build_retraction(retraction)
expect(federation_retraction).to be_instance_of(DiasporaFederation::Entities::RelayableRetraction)
expect(federation_retraction.author).to eq(alice.diaspora_handle)
expect(federation_retraction.target_guid).to eq(target.guid)
expect(federation_retraction.target_type).to eq("Comment")
end
it "builds a RelayableRetraction for a Like" do
target = FactoryGirl.create(:like, author: alice.person)
retraction = Retraction.for(target, alice)
federation_retraction = described_class.build_retraction(retraction)
expect(federation_retraction).to be_instance_of(DiasporaFederation::Entities::RelayableRetraction)
expect(federation_retraction.author).to eq(alice.diaspora_handle)
expect(federation_retraction.target_guid).to eq(target.guid)
expect(federation_retraction.target_type).to eq("Like")
end
it "builds a RelayableRetraction for a PollParticipation" do
target = FactoryGirl.create(:poll_participation, author: alice.person)
retraction = Retraction.for(target, alice)
federation_retraction = described_class.build_retraction(retraction)
expect(federation_retraction).to be_instance_of(DiasporaFederation::Entities::RelayableRetraction)
expect(federation_retraction.author).to eq(alice.diaspora_handle)
expect(federation_retraction.target_guid).to eq(target.guid)
expect(federation_retraction.target_type).to eq("PollParticipation")
end
end
end
end