These are some initial tests, more to come. It tests some features of Request, StatusMessage, Comment, Like, Participation, Retraction, SignedRetraction, RelayableRetraction entities receive process.
269 lines
10 KiB
Ruby
269 lines
10 KiB
Ruby
require "spec_helper"
|
|
require "diaspora_federation/test"
|
|
|
|
describe "diaspora federation callbacks" do
|
|
describe ":fetch_person_for_webfinger" do
|
|
it "returns a WebFinger instance with the data from the person" do
|
|
person = alice.person
|
|
wf = DiasporaFederation.callbacks.trigger(:fetch_person_for_webfinger, alice.diaspora_handle)
|
|
expect(wf.acct_uri).to eq("acct:#{person.diaspora_handle}")
|
|
expect(wf.alias_url).to eq(AppConfig.url_to("/people/#{person.guid}"))
|
|
expect(wf.hcard_url).to eq(AppConfig.url_to("/hcard/users/#{person.guid}"))
|
|
expect(wf.seed_url).to eq(AppConfig.pod_uri)
|
|
expect(wf.profile_url).to eq(person.profile_url)
|
|
expect(wf.atom_url).to eq(person.atom_url)
|
|
expect(wf.salmon_url).to eq(person.receive_url)
|
|
expect(wf.guid).to eq(person.guid)
|
|
expect(wf.public_key).to eq(person.serialized_public_key)
|
|
end
|
|
|
|
it "returns nil if the person was not found" do
|
|
wf = DiasporaFederation.callbacks.trigger(:fetch_person_for_webfinger, "unknown@example.com")
|
|
expect(wf).to be_nil
|
|
end
|
|
end
|
|
|
|
describe ":fetch_person_for_hcard" do
|
|
it "returns a HCard instance with the data from the person" do
|
|
person = alice.person
|
|
hcard = DiasporaFederation.callbacks.trigger(:fetch_person_for_hcard, alice.guid)
|
|
expect(hcard.guid).to eq(person.guid)
|
|
expect(hcard.nickname).to eq(person.username)
|
|
expect(hcard.full_name).to eq("#{person.profile.first_name} #{person.profile.last_name}")
|
|
expect(hcard.url).to eq(AppConfig.pod_uri)
|
|
expect(hcard.photo_large_url).to eq(person.image_url)
|
|
expect(hcard.photo_medium_url).to eq(person.image_url(:thumb_medium))
|
|
expect(hcard.photo_small_url).to eq(person.image_url(:thumb_small))
|
|
expect(hcard.public_key).to eq(person.serialized_public_key)
|
|
expect(hcard.searchable).to eq(person.searchable)
|
|
expect(hcard.first_name).to eq(person.profile.first_name)
|
|
expect(hcard.last_name).to eq(person.profile.last_name)
|
|
end
|
|
|
|
it "trims the full_name" do
|
|
user = FactoryGirl.create(:user)
|
|
user.person.profile.last_name = nil
|
|
user.person.profile.save
|
|
|
|
hcard = DiasporaFederation.callbacks.trigger(:fetch_person_for_hcard, user.guid)
|
|
expect(hcard.full_name).to eq(user.person.profile.first_name)
|
|
end
|
|
|
|
it "returns nil if the person was not found" do
|
|
hcard = DiasporaFederation.callbacks.trigger(:fetch_person_for_hcard, "1234567890abcdef")
|
|
expect(hcard).to be_nil
|
|
end
|
|
end
|
|
|
|
describe ":save_person_after_webfinger" do
|
|
context "new person" do
|
|
it "creates a new person" do
|
|
person = DiasporaFederation::Entities::Person.new(FactoryGirl.attributes_for(:federation_person_from_webfinger))
|
|
|
|
DiasporaFederation.callbacks.trigger(:save_person_after_webfinger, person)
|
|
|
|
person_entity = Person.find_by(diaspora_handle: person.diaspora_id)
|
|
expect(person_entity.guid).to eq(person.guid)
|
|
expect(person_entity.serialized_public_key).to eq(person.exported_key)
|
|
expect(person_entity.url).to eq(person.url)
|
|
|
|
profile = person.profile
|
|
profile_entity = person_entity.profile
|
|
expect(profile_entity.first_name).to eq(profile.first_name)
|
|
expect(profile_entity.last_name).to eq(profile.last_name)
|
|
expect(profile_entity[:image_url]).to be_nil
|
|
expect(profile_entity[:image_url_medium]).to be_nil
|
|
expect(profile_entity[:image_url_small]).to be_nil
|
|
expect(profile_entity.searchable).to eq(profile.searchable)
|
|
end
|
|
|
|
it "creates a new person with images" do
|
|
person = DiasporaFederation::Entities::Person.new(
|
|
FactoryGirl.attributes_for(
|
|
:federation_person_from_webfinger,
|
|
profile: DiasporaFederation::Entities::Profile.new(
|
|
FactoryGirl.attributes_for(:federation_profile_from_hcard_with_image_url))
|
|
)
|
|
)
|
|
|
|
DiasporaFederation.callbacks.trigger(:save_person_after_webfinger, person)
|
|
|
|
person_entity = Person.find_by(diaspora_handle: person.diaspora_id)
|
|
expect(person_entity.guid).to eq(person.guid)
|
|
expect(person_entity.serialized_public_key).to eq(person.exported_key)
|
|
expect(person_entity.url).to eq(person.url)
|
|
|
|
profile = person.profile
|
|
profile_entity = person_entity.profile
|
|
expect(profile_entity.first_name).to eq(profile.first_name)
|
|
expect(profile_entity.last_name).to eq(profile.last_name)
|
|
expect(profile_entity.image_url).to eq(profile.image_url)
|
|
expect(profile_entity.image_url_medium).to eq(profile.image_url_medium)
|
|
expect(profile_entity.image_url_small).to eq(profile.image_url_small)
|
|
expect(profile_entity.searchable).to eq(profile.searchable)
|
|
end
|
|
end
|
|
|
|
context "update profile" do
|
|
let(:existing_person_entity) { FactoryGirl.create(:person) }
|
|
let(:person) {
|
|
DiasporaFederation::Entities::Person.new(
|
|
FactoryGirl.attributes_for(:federation_person_from_webfinger,
|
|
diaspora_id: existing_person_entity.diaspora_handle)
|
|
)
|
|
}
|
|
|
|
it "updates an existing profile" do
|
|
DiasporaFederation.callbacks.trigger(:save_person_after_webfinger, person)
|
|
|
|
person_entity = Person.find_by(diaspora_handle: existing_person_entity.diaspora_handle)
|
|
|
|
profile = person.profile
|
|
profile_entity = person_entity.profile
|
|
expect(profile_entity.first_name).to eq(profile.first_name)
|
|
expect(profile_entity.last_name).to eq(profile.last_name)
|
|
end
|
|
|
|
it "should not change the existing person" do
|
|
DiasporaFederation.callbacks.trigger(:save_person_after_webfinger, person)
|
|
|
|
person_entity = Person.find_by(diaspora_handle: existing_person_entity.diaspora_handle)
|
|
expect(person_entity.guid).to eq(existing_person_entity.guid)
|
|
expect(person_entity.serialized_public_key).to eq(existing_person_entity.serialized_public_key)
|
|
expect(person_entity.url).to eq(existing_person_entity.url)
|
|
end
|
|
|
|
it "creates profile for existing person if no profile present" do
|
|
existing_person_entity.profile = nil
|
|
existing_person_entity.save
|
|
|
|
DiasporaFederation.callbacks.trigger(:save_person_after_webfinger, person)
|
|
|
|
person_entity = Person.find_by(diaspora_handle: existing_person_entity.diaspora_handle)
|
|
|
|
profile = person.profile
|
|
profile_entity = person_entity.profile
|
|
expect(profile_entity.first_name).to eq(profile.first_name)
|
|
expect(profile_entity.last_name).to eq(profile.last_name)
|
|
end
|
|
end
|
|
end
|
|
|
|
def create_a_local_person
|
|
FactoryGirl.create(:user).person
|
|
end
|
|
|
|
def create_a_remote_person
|
|
FactoryGirl.create(:person)
|
|
end
|
|
|
|
def create_post_by_a_local_person
|
|
FactoryGirl.create(:status_message, author: create_a_local_person).guid
|
|
end
|
|
|
|
def create_post_by_a_remote_person
|
|
FactoryGirl.create(:status_message, author: create_a_remote_person).guid
|
|
end
|
|
|
|
describe :fetch_private_key_by_diaspora_id do
|
|
it "returns a private key for a local user" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, create_a_local_person.diaspora_handle)
|
|
).not_to be_nil
|
|
end
|
|
|
|
it "returns nil for a remote user" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, create_a_remote_person.diaspora_handle)
|
|
).to be_nil
|
|
end
|
|
|
|
it "returns nil for an unknown id" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, FactoryGirl.generate(:diaspora_id))
|
|
).to be_nil
|
|
end
|
|
end
|
|
|
|
describe :fetch_author_private_key_by_entity_guid do
|
|
it "returns a private key for a post by a local user" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", create_post_by_a_local_person)
|
|
).not_to be_nil
|
|
end
|
|
|
|
it "returns nil for a post by a remote user" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", create_post_by_a_remote_person)
|
|
).to be_nil
|
|
end
|
|
|
|
it "returns nil for an unknown post" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", FactoryGirl.generate(:guid))
|
|
).to be_nil
|
|
end
|
|
end
|
|
|
|
describe :fetch_public_key_by_diaspora_id do
|
|
it "returns a public key for a person" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, create_a_remote_person.diaspora_handle)
|
|
).not_to be_nil
|
|
end
|
|
|
|
it "returns nil for an unknown person" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, FactoryGirl.generate(:diaspora_id))
|
|
).to be_nil
|
|
end
|
|
end
|
|
|
|
describe :fetch_author_public_key_by_entity_guid do
|
|
it "returns a public key for a known post" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", create_post_by_a_remote_person)
|
|
).not_to be_nil
|
|
end
|
|
|
|
it "returns nil for an unknown post" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", FactoryGirl.generate(:guid))
|
|
).to be_nil
|
|
end
|
|
end
|
|
|
|
describe :entity_author_is_local? do
|
|
it "returns true for a post by a local user" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", create_post_by_a_local_person)
|
|
).to be(true)
|
|
end
|
|
|
|
it "returns false for a post by a remote user" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", create_post_by_a_remote_person)
|
|
).to be(false)
|
|
end
|
|
|
|
it "returns false for a unknown post" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", FactoryGirl.generate(:diaspora_id))
|
|
).to be(false)
|
|
end
|
|
end
|
|
|
|
describe :fetch_entity_author_id_by_guid do
|
|
it "returns id for a existing guid" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", create_post_by_a_remote_person)
|
|
).not_to be_nil
|
|
end
|
|
|
|
it "returns nil for a non-existing guid" do
|
|
expect(
|
|
DiasporaFederation.callbacks.trigger(described_class, "Post", FactoryGirl.generate(:guid))
|
|
).to be_nil
|
|
end
|
|
end
|
|
end
|