Fix: 投稿ではないリンクを参照したときにリンクプレビューが生成されない問題 (#482)
This commit is contained in:
parent
ef3eb48932
commit
65cc1273aa
2 changed files with 48 additions and 5 deletions
|
@ -88,6 +88,10 @@ class FetchLinkCardService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def referenced_urls
|
def referenced_urls
|
||||||
|
referenced_urls_raw.filter { |uri| ActivityPub::TagManager.instance.uri_to_resource(uri, Status, url: true).present? }
|
||||||
|
end
|
||||||
|
|
||||||
|
def referenced_urls_raw
|
||||||
unless @status.local?
|
unless @status.local?
|
||||||
document = Nokogiri::HTML(@status.text)
|
document = Nokogiri::HTML(@status.text)
|
||||||
document.search('a[href^="http://"]', 'a[href^="https://"]').each do |link|
|
document.search('a[href^="http://"]', 'a[href^="https://"]').each do |link|
|
||||||
|
|
|
@ -7,6 +7,7 @@ RSpec.describe FetchLinkCardService, type: :service do
|
||||||
|
|
||||||
let(:html) { '<!doctype html><title>Hello world</title>' }
|
let(:html) { '<!doctype html><title>Hello world</title>' }
|
||||||
let(:oembed_cache) { nil }
|
let(:oembed_cache) { nil }
|
||||||
|
let(:custom_before) { false }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_request(:get, 'http://example.com/html').to_return(headers: { 'Content-Type' => 'text/html' }, body: html)
|
stub_request(:get, 'http://example.com/html').to_return(headers: { 'Content-Type' => 'text/html' }, body: html)
|
||||||
|
@ -30,7 +31,7 @@ RSpec.describe FetchLinkCardService, type: :service do
|
||||||
|
|
||||||
Rails.cache.write('oembed_endpoint:example.com', oembed_cache) if oembed_cache
|
Rails.cache.write('oembed_endpoint:example.com', oembed_cache) if oembed_cache
|
||||||
|
|
||||||
subject.call(status)
|
subject.call(status) unless custom_before
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with a local status' do
|
context 'with a local status' do
|
||||||
|
@ -236,16 +237,46 @@ RSpec.describe FetchLinkCardService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with URL of reference' do
|
context 'with URI of reference and normal page' do
|
||||||
let(:status) { Fabricate(:status, text: 'RT http://example.com/html') }
|
let(:status) { Fabricate(:status, text: 'RT http://example.com/text http://example.com/html') }
|
||||||
|
let(:custom_before) { true }
|
||||||
|
|
||||||
|
before { Fabricate(:status, uri: 'http://example.com/text') }
|
||||||
|
|
||||||
it 'creates preview card' do
|
it 'creates preview card' do
|
||||||
|
subject.call(status)
|
||||||
|
expect(status.preview_card).to_not be_nil
|
||||||
|
expect(status.preview_card.url).to eq 'http://example.com/html'
|
||||||
|
expect(status.preview_card.title).to eq 'Hello world'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with URI of reference' do
|
||||||
|
let(:status) { Fabricate(:status, text: 'RT http://example.com/text') }
|
||||||
|
let(:custom_before) { true }
|
||||||
|
|
||||||
|
before { Fabricate(:status, uri: 'http://example.com/text') }
|
||||||
|
|
||||||
|
it 'does not create preview card' do
|
||||||
|
subject.call(status)
|
||||||
expect(status.preview_card).to be_nil
|
expect(status.preview_card).to be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with URL of reference and normal page' do
|
context 'with URL of reference' do
|
||||||
let(:status) { Fabricate(:status, text: 'RT http://example.com/text http://example.com/html') }
|
let(:status) { Fabricate(:status, text: 'RT http://example.com/text') }
|
||||||
|
let(:custom_before) { true }
|
||||||
|
|
||||||
|
before { Fabricate(:status, uri: 'http://example.com/text/activity', url: 'http://example.com/text') }
|
||||||
|
|
||||||
|
it 'does not create preview card' do
|
||||||
|
subject.call(status)
|
||||||
|
expect(status.preview_card).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with reference normal URL' do
|
||||||
|
let(:status) { Fabricate(:status, text: 'RT http://example.com/html') }
|
||||||
|
|
||||||
it 'creates preview card' do
|
it 'creates preview card' do
|
||||||
expect(status.preview_card).to_not be_nil
|
expect(status.preview_card).to_not be_nil
|
||||||
|
@ -281,8 +312,12 @@ RSpec.describe FetchLinkCardService, type: :service do
|
||||||
RT <a href="http://example.com/html" target="_blank" rel="noopener noreferrer" title="http://example.com/html">Hello</a>
|
RT <a href="http://example.com/html" target="_blank" rel="noopener noreferrer" title="http://example.com/html">Hello</a>
|
||||||
TEXT
|
TEXT
|
||||||
end
|
end
|
||||||
|
let(:custom_before) { true }
|
||||||
|
|
||||||
|
before { Fabricate(:status, uri: 'http://example.com/html') }
|
||||||
|
|
||||||
it 'creates preview card' do
|
it 'creates preview card' do
|
||||||
|
subject.call(status)
|
||||||
expect(status.preview_card).to be_nil
|
expect(status.preview_card).to be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -294,8 +329,12 @@ RSpec.describe FetchLinkCardService, type: :service do
|
||||||
<a href="http://example.com/html_sub" target="_blank" rel="noopener noreferrer" title="http://example.com/html_sub">Hello</a>
|
<a href="http://example.com/html_sub" target="_blank" rel="noopener noreferrer" title="http://example.com/html_sub">Hello</a>
|
||||||
TEXT
|
TEXT
|
||||||
end
|
end
|
||||||
|
let(:custom_before) { true }
|
||||||
|
|
||||||
|
before { Fabricate(:status, uri: 'http://example.com/html') }
|
||||||
|
|
||||||
it 'creates preview card' do
|
it 'creates preview card' do
|
||||||
|
subject.call(status)
|
||||||
expect(status.preview_card).to_not be_nil
|
expect(status.preview_card).to_not be_nil
|
||||||
expect(status.preview_card.url).to eq 'http://example.com/html_sub'
|
expect(status.preview_card.url).to eq 'http://example.com/html_sub'
|
||||||
expect(status.preview_card.title).to eq 'Hello world'
|
expect(status.preview_card.title).to eq 'Hello world'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue