56 lines
1.9 KiB
Ruby
56 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe DiasporaLinkService do
|
|
let(:service) { described_class.new(link) }
|
|
|
|
describe "#find_or_fetch_entity" do
|
|
context "when entity is known" do
|
|
let(:post) { FactoryGirl.create(:status_message) }
|
|
let(:link) { "diaspora://#{post.author.diaspora_handle}/post/#{post.guid}" }
|
|
|
|
it "returns the entity" do
|
|
expect(service.find_or_fetch_entity).to eq(post)
|
|
end
|
|
end
|
|
|
|
context "when entity is unknown" do
|
|
let(:remote_person) { FactoryGirl.create(:person) }
|
|
let(:guid) { "1234567890abcdef" }
|
|
let(:link) { "diaspora://#{remote_person.diaspora_handle}/post/#{guid}" }
|
|
|
|
it "fetches entity" do
|
|
expect(DiasporaFederation::Federation::Fetcher)
|
|
.to receive(:fetch_public)
|
|
.with(remote_person.diaspora_handle, "post", guid) {
|
|
FactoryGirl.create(:status_message, author: remote_person, guid: guid)
|
|
}
|
|
|
|
entity = service.find_or_fetch_entity
|
|
expect(entity).to be_a(StatusMessage)
|
|
expect(entity.guid).to eq(guid)
|
|
expect(entity.author).to eq(remote_person)
|
|
end
|
|
|
|
it "returns nil when entity is non fetchable" do
|
|
expect(DiasporaFederation::Federation::Fetcher)
|
|
.to receive(:fetch_public)
|
|
.with(remote_person.diaspora_handle, "post", guid)
|
|
.and_raise(DiasporaFederation::Federation::Fetcher::NotFetchable)
|
|
|
|
expect(service.find_or_fetch_entity).to be_nil
|
|
end
|
|
end
|
|
|
|
context "with invalid links" do
|
|
it "returns nil when the link is invalid" do
|
|
service = described_class.new("web+diaspora://something_invalid")
|
|
expect(service.find_or_fetch_entity).to be_nil
|
|
end
|
|
|
|
it "returns nil when the author is valid, but rest of the link is invalid" do
|
|
service = described_class.new("web+diaspora://#{alice.diaspora_handle}/foo/bar")
|
|
expect(service.find_or_fetch_entity).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|