diaspora/spec/controllers/links_controller_spec.rb
cmrd Senya 6f812a5b8f
Add LinksController
LinksController redirects requests for provided diaspora:// links to
respective entities urls.
2018-07-11 01:24:28 +02:00

71 lines
2.2 KiB
Ruby

# frozen_string_literal: true
describe LinksController, type: :controller do
describe "#resolve" do
context "with post" do
let(:post) { FactoryGirl.create(:status_message) }
let(:link_text) { "#{post.author.diaspora_handle}/post/#{post.guid}" }
subject { get :resolve, params: {q: link_query} }
shared_examples "redirects to the post" do
it "redirects to the post" do
expect(subject).to redirect_to(post_url(post))
end
end
context "with stripped link text" do
let(:link_query) { link_text }
include_examples "redirects to the post"
end
context "with link text starting with //" do
let(:link_query) { "//#{link_text}" }
include_examples "redirects to the post"
end
context "with link text starting with diaspora://" do
let(:link_query) { "diaspora://#{link_text}" }
include_examples "redirects to the post"
end
context "with link text starting with web+diaspora://" do
let(:link_query) { "web+diaspora://#{link_text}" }
include_examples "redirects to the post"
end
context "when post is non-fetchable" do
let(:diaspora_id) { FactoryGirl.create(:person).diaspora_handle }
let(:guid) { "1234567890abcdef" }
let(:link_query) { "web+diaspora://#{diaspora_id}/post/#{guid}" }
before do
expect(DiasporaFederation::Federation::Fetcher)
.to receive(:fetch_public)
.with(diaspora_id, "post", guid)
.and_raise(DiasporaFederation::Federation::Fetcher::NotFetchable)
end
it "responds 404" do
expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
end
end
context "when user is non-fetchable" do
let(:diaspora_id) { "unknown@pod.tld" }
let(:guid) { "1234567890abcdef" }
let(:link_query) { "web+diaspora://#{diaspora_id}/post/#{guid}" }
before do
expect(Person)
.to receive(:find_or_fetch_by_identifier)
.with(diaspora_id)
.and_return(nil)
end
it "responds 404" do
expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
end
end