FIX: remove 'crawl_images' site setting (#14646)
This commit is contained in:
parent
b9164d22ee
commit
d1fc759ac4
|
@ -65,7 +65,6 @@ Discourse::Application.configure do
|
||||||
s.set_regardless_of_locale(:min_post_length, 5)
|
s.set_regardless_of_locale(:min_post_length, 5)
|
||||||
s.set_regardless_of_locale(:min_first_post_length, 5)
|
s.set_regardless_of_locale(:min_first_post_length, 5)
|
||||||
s.set_regardless_of_locale(:min_personal_message_post_length, 10)
|
s.set_regardless_of_locale(:min_personal_message_post_length, 10)
|
||||||
s.set_regardless_of_locale(:crawl_images, false)
|
|
||||||
s.set_regardless_of_locale(:download_remote_images_to_local, false)
|
s.set_regardless_of_locale(:download_remote_images_to_local, false)
|
||||||
s.set_regardless_of_locale(:unique_posts_mins, 0)
|
s.set_regardless_of_locale(:unique_posts_mins, 0)
|
||||||
s.set_regardless_of_locale(:max_consecutive_replies, 0)
|
s.set_regardless_of_locale(:max_consecutive_replies, 0)
|
||||||
|
|
|
@ -1293,8 +1293,6 @@ files:
|
||||||
default: "1|1.5|2"
|
default: "1|1.5|2"
|
||||||
type: list
|
type: list
|
||||||
list_type: compact
|
list_type: compact
|
||||||
crawl_images:
|
|
||||||
default: true
|
|
||||||
max_image_width:
|
max_image_width:
|
||||||
client: true
|
client: true
|
||||||
default: 690
|
default: 690
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class RemoveCrawlImagesSiteSetting < ActiveRecord::Migration[6.1]
|
||||||
|
def up
|
||||||
|
execute <<~SQL
|
||||||
|
DELETE
|
||||||
|
FROM site_settings
|
||||||
|
WHERE name = 'crawl_images';
|
||||||
|
SQL
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
raise ActiveRecord::IrreversibleMigration
|
||||||
|
end
|
||||||
|
end
|
|
@ -296,9 +296,6 @@ class CookedPostProcessor
|
||||||
|
|
||||||
return unless is_valid_image_url?(absolute_url)
|
return unless is_valid_image_url?(absolute_url)
|
||||||
|
|
||||||
# we can *always* crawl our own images
|
|
||||||
return unless SiteSetting.crawl_images? || Discourse.store.has_been_uploaded?(url)
|
|
||||||
|
|
||||||
@size_cache[url] = FastImage.size(absolute_url)
|
@size_cache[url] = FastImage.size(absolute_url)
|
||||||
rescue Zlib::BufError, URI::Error, OpenSSL::SSL::SSLError
|
rescue Zlib::BufError, URI::Error, OpenSSL::SSL::SSLError
|
||||||
# FastImage.size raises BufError for some gifs, leave it.
|
# FastImage.size raises BufError for some gifs, leave it.
|
||||||
|
|
|
@ -26,6 +26,7 @@ RSpec.describe DiscourseNarrativeBot::AdvancedUserNarrative do
|
||||||
fab!(:reset_trigger) { DiscourseNarrativeBot::TrackSelector.reset_trigger }
|
fab!(:reset_trigger) { DiscourseNarrativeBot::TrackSelector.reset_trigger }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
stub_image_size
|
||||||
Jobs.run_immediately!
|
Jobs.run_immediately!
|
||||||
SiteSetting.discourse_narrative_bot_enabled = true
|
SiteSetting.discourse_narrative_bot_enabled = true
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,6 +29,7 @@ describe DiscourseNarrativeBot::NewUserNarrative do
|
||||||
fab!(:reset_trigger) { DiscourseNarrativeBot::TrackSelector.reset_trigger }
|
fab!(:reset_trigger) { DiscourseNarrativeBot::TrackSelector.reset_trigger }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
stub_image_size
|
||||||
Jobs.run_immediately!
|
Jobs.run_immediately!
|
||||||
SiteSetting.discourse_narrative_bot_enabled = true
|
SiteSetting.discourse_narrative_bot_enabled = true
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,6 +17,7 @@ describe DiscourseNarrativeBot::TrackSelector do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
stub_image_size
|
||||||
stub_request(:get, "http://api.forismatic.com/api/1.0/?format=json&lang=en&method=getQuote").
|
stub_request(:get, "http://api.forismatic.com/api/1.0/?format=json&lang=en&method=getQuote").
|
||||||
to_return(status: 200, body: "{\"quoteText\":\"Be Like Water\",\"quoteAuthor\":\"Bruce Lee\"}")
|
to_return(status: 200, body: "{\"quoteText\":\"Be Like Water\",\"quoteAuthor\":\"Bruce Lee\"}")
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
stub_image_size
|
||||||
Jobs.run_immediately!
|
Jobs.run_immediately!
|
||||||
SiteSetting.discourse_narrative_bot_enabled = true
|
SiteSetting.discourse_narrative_bot_enabled = true
|
||||||
end
|
end
|
||||||
|
|
|
@ -345,6 +345,7 @@ describe CookedPostProcessor do
|
||||||
let(:cpp) { CookedPostProcessor.new(post, image_sizes: image_sizes) }
|
let(:cpp) { CookedPostProcessor.new(post, image_sizes: image_sizes) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
stub_image_size
|
||||||
cpp.post_process
|
cpp.post_process
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -462,7 +463,6 @@ describe CookedPostProcessor do
|
||||||
it 'should not add lightbox' do
|
it 'should not add lightbox' do
|
||||||
FastImage.expects(:size).returns([1750, 2000])
|
FastImage.expects(:size).returns([1750, 2000])
|
||||||
|
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
cpp.post_process
|
cpp.post_process
|
||||||
|
|
||||||
expect(cpp.html).to match_html("<p><img src=\"http://test.discourse/#{upload_path}/original/1X/1234567890123456.svg?somepamas\" width=\"690\"\ height=\"788\"></p>")
|
expect(cpp.html).to match_html("<p><img src=\"http://test.discourse/#{upload_path}/original/1X/1234567890123456.svg?somepamas\" width=\"690\"\ height=\"788\"></p>")
|
||||||
|
@ -526,6 +526,7 @@ describe CookedPostProcessor do
|
||||||
it "does not create thumbnails or optimize images" do
|
it "does not create thumbnails or optimize images" do
|
||||||
CookedPostProcessor.any_instance.expects(:optimize_image!).never
|
CookedPostProcessor.any_instance.expects(:optimize_image!).never
|
||||||
Upload.any_instance.expects(:create_thumbnail!).never
|
Upload.any_instance.expects(:create_thumbnail!).never
|
||||||
|
stub_image_size
|
||||||
cpp.post_process
|
cpp.post_process
|
||||||
|
|
||||||
expect(cpp.html).not_to match_html cooked_html
|
expect(cpp.html).not_to match_html cooked_html
|
||||||
|
@ -828,21 +829,18 @@ describe CookedPostProcessor do
|
||||||
|
|
||||||
it "resizes when only width is specified" do
|
it "resizes when only width is specified" do
|
||||||
img = { 'src' => 'http://foo.bar/image3.png', 'width' => 100 }
|
img = { 'src' => 'http://foo.bar/image3.png', 'width' => 100 }
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
FastImage.expects(:size).returns([200, 400])
|
FastImage.expects(:size).returns([200, 400])
|
||||||
expect(cpp.get_size_from_attributes(img)).to eq([100, 200])
|
expect(cpp.get_size_from_attributes(img)).to eq([100, 200])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "resizes when only height is specified" do
|
it "resizes when only height is specified" do
|
||||||
img = { 'src' => 'http://foo.bar/image3.png', 'height' => 100 }
|
img = { 'src' => 'http://foo.bar/image3.png', 'height' => 100 }
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
FastImage.expects(:size).returns([100, 300])
|
FastImage.expects(:size).returns([100, 300])
|
||||||
expect(cpp.get_size_from_attributes(img)).to eq([33, 100])
|
expect(cpp.get_size_from_attributes(img)).to eq([33, 100])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't raise an error with a weird url" do
|
it "doesn't raise an error with a weird url" do
|
||||||
img = { 'src' => nil, 'height' => 100 }
|
img = { 'src' => nil, 'height' => 100 }
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
expect(cpp.get_size_from_attributes(img)).to be_nil
|
expect(cpp.get_size_from_attributes(img)).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -876,39 +874,10 @@ describe CookedPostProcessor do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "caches the results" do
|
it "caches the results" do
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
FastImage.expects(:size).returns([200, 400])
|
FastImage.expects(:size).returns([200, 400])
|
||||||
cpp.get_size("http://foo.bar/image3.png")
|
cpp.get_size("http://foo.bar/image3.png")
|
||||||
expect(cpp.get_size("http://foo.bar/image3.png")).to eq([200, 400])
|
expect(cpp.get_size("http://foo.bar/image3.png")).to eq([200, 400])
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when crawl_images is disabled" do
|
|
||||||
|
|
||||||
before do
|
|
||||||
SiteSetting.crawl_images = false
|
|
||||||
end
|
|
||||||
|
|
||||||
it "doesn't call FastImage" do
|
|
||||||
FastImage.expects(:size).never
|
|
||||||
expect(cpp.get_size("http://foo.bar/image1.png")).to eq(nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "is always allowed to crawl our own images" do
|
|
||||||
store = stub
|
|
||||||
Discourse.expects(:store).returns(store).at_least_once
|
|
||||||
store.expects(:has_been_uploaded?).returns(true)
|
|
||||||
FastImage.expects(:size).returns([100, 200])
|
|
||||||
expect(cpp.get_size("http://foo.bar/image2.png")).to eq([100, 200])
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns nil if FastImage can't get the original size" do
|
|
||||||
Discourse.store.class.any_instance.expects(:has_been_uploaded?).returns(true)
|
|
||||||
FastImage.expects(:size).returns(nil)
|
|
||||||
expect(cpp.get_size("http://foo.bar/image3.png")).to eq(nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "#is_valid_image_url?" do
|
context "#is_valid_image_url?" do
|
||||||
|
@ -1078,15 +1047,17 @@ describe CookedPostProcessor do
|
||||||
post.save_custom_fields
|
post.save_custom_fields
|
||||||
|
|
||||||
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
||||||
|
stub_image_size(width: 100, height: 200)
|
||||||
cpp.post_process_oneboxes
|
cpp.post_process_oneboxes
|
||||||
|
|
||||||
expect(cpp.doc.to_s).to eq("<p><img class=\"onebox\" src=\"#{upload.url}\" width=\"\" height=\"\"></p>")
|
expect(cpp.doc.to_s).to eq("<p><img class=\"onebox\" src=\"#{upload.url}\" width=\"100\" height=\"200\"></p>")
|
||||||
|
|
||||||
upload.destroy!
|
upload.destroy!
|
||||||
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
||||||
|
stub_image_size(width: 100, height: 200)
|
||||||
cpp.post_process_oneboxes
|
cpp.post_process_oneboxes
|
||||||
|
|
||||||
expect(cpp.doc.to_s).to eq("<p><img class=\"onebox\" src=\"#{image_url}\" width=\"\" height=\"\"></p>")
|
expect(cpp.doc.to_s).to eq("<p><img class=\"onebox\" src=\"#{image_url}\" width=\"100\" height=\"200\"></p>")
|
||||||
Oneboxer.unstub(:onebox)
|
Oneboxer.unstub(:onebox)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1112,9 +1083,10 @@ describe CookedPostProcessor do
|
||||||
UrlHelper.expects(:cook_url).with(upload.url, secure: true).returns(cooked_url)
|
UrlHelper.expects(:cook_url).with(upload.url, secure: true).returns(cooked_url)
|
||||||
|
|
||||||
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
||||||
|
stub_image_size(width: 100, height: 200)
|
||||||
cpp.post_process_oneboxes
|
cpp.post_process_oneboxes
|
||||||
|
|
||||||
expect(cpp.doc.to_s).to eq("<p><img class=\"onebox\" src=\"#{cooked_url}\" width=\"\" height=\"\"></p>")
|
expect(cpp.doc.to_s).to eq("<p><img class=\"onebox\" src=\"#{cooked_url}\" width=\"100\" height=\"200\"></p>")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1206,8 +1178,6 @@ describe CookedPostProcessor do
|
||||||
context "#post_process_oneboxes with square image" do
|
context "#post_process_oneboxes with square image" do
|
||||||
|
|
||||||
it "generates a onebox-avatar class" do
|
it "generates a onebox-avatar class" do
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
|
|
||||||
url = 'https://square-image.com/onebox'
|
url = 'https://square-image.com/onebox'
|
||||||
|
|
||||||
body = <<~HTML
|
body = <<~HTML
|
||||||
|
@ -1226,7 +1196,7 @@ describe CookedPostProcessor do
|
||||||
|
|
||||||
# not an ideal stub but shipping the whole image to fast image can add
|
# not an ideal stub but shipping the whole image to fast image can add
|
||||||
# a lot of cost to this test
|
# a lot of cost to this test
|
||||||
FastImage.stubs(:size).returns([200, 200])
|
stub_image_size(width: 200, height: 200)
|
||||||
|
|
||||||
post = Fabricate.build(:post, raw: url)
|
post = Fabricate.build(:post, raw: url)
|
||||||
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
||||||
|
@ -1817,10 +1787,13 @@ describe CookedPostProcessor do
|
||||||
Fabricate(:post, topic: topic, post_type: Post.types[:small_action])
|
Fabricate(:post, topic: topic, post_type: Post.types[:small_action])
|
||||||
reply = PostCreator.create!(topic.user, topic_id: topic.id, raw: raw)
|
reply = PostCreator.create!(topic.user, topic_id: topic.id, raw: raw)
|
||||||
|
|
||||||
|
stub_image_size
|
||||||
CookedPostProcessor.new(reply).post_process
|
CookedPostProcessor.new(reply).post_process
|
||||||
expect(reply.raw).to eq(raw)
|
expect(reply.raw).to eq(raw)
|
||||||
|
|
||||||
PostRevisor.new(reply).revise!(Discourse.system_user, raw: raw, edit_reason: "put back full quote")
|
PostRevisor.new(reply).revise!(Discourse.system_user, raw: raw, edit_reason: "put back full quote")
|
||||||
|
|
||||||
|
stub_image_size
|
||||||
CookedPostProcessor.new(reply).post_process(new_post: true)
|
CookedPostProcessor.new(reply).post_process(new_post: true)
|
||||||
expect(reply.raw).to eq("and this is the third reply")
|
expect(reply.raw).to eq("and this is the third reply")
|
||||||
end
|
end
|
||||||
|
|
|
@ -1185,6 +1185,7 @@ describe PostRevisor do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "updates the upload secure status, which is secure by default from the composer. set to false for a public topic" do
|
it "updates the upload secure status, which is secure by default from the composer. set to false for a public topic" do
|
||||||
|
stub_image_size
|
||||||
subject.revise!(user, raw: <<~RAW)
|
subject.revise!(user, raw: <<~RAW)
|
||||||
This is a post with a secure upload
|
This is a post with a secure upload
|
||||||
![image5](#{image5.short_url})
|
![image5](#{image5.short_url})
|
||||||
|
@ -1196,6 +1197,7 @@ describe PostRevisor do
|
||||||
|
|
||||||
it "does not update the upload secure status, which is secure by default from the composer for a private" do
|
it "does not update the upload secure status, which is secure by default from the composer for a private" do
|
||||||
post.topic.update(category: Fabricate(:private_category, group: Fabricate(:group)))
|
post.topic.update(category: Fabricate(:private_category, group: Fabricate(:group)))
|
||||||
|
stub_image_size
|
||||||
subject.revise!(user, raw: <<~RAW)
|
subject.revise!(user, raw: <<~RAW)
|
||||||
This is a post with a secure upload
|
This is a post with a secure upload
|
||||||
![image5](#{image5.short_url})
|
![image5](#{image5.short_url})
|
||||||
|
|
|
@ -37,6 +37,7 @@ describe Jobs::ProcessPost do
|
||||||
it 'processes posts' do
|
it 'processes posts' do
|
||||||
post = Fabricate(:post, raw: "<img src='#{Discourse.base_url_no_prefix}/awesome/picture.png'>")
|
post = Fabricate(:post, raw: "<img src='#{Discourse.base_url_no_prefix}/awesome/picture.png'>")
|
||||||
expect(post.cooked).to match(/http/)
|
expect(post.cooked).to match(/http/)
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
Jobs::ProcessPost.new.execute(post_id: post.id)
|
Jobs::ProcessPost.new.execute(post_id: post.id)
|
||||||
post.reload
|
post.reload
|
||||||
|
@ -53,6 +54,7 @@ describe Jobs::ProcessPost do
|
||||||
it "extracts links to quoted posts" do
|
it "extracts links to quoted posts" do
|
||||||
quoted_post = Fabricate(:post, raw: "This is a post with a link to https://www.discourse.org", post_number: 42)
|
quoted_post = Fabricate(:post, raw: "This is a post with a link to https://www.discourse.org", post_number: 42)
|
||||||
post.update_columns(raw: "This quote is the best\n\n[quote=\"#{quoted_post.user.username}, topic:#{quoted_post.topic_id}, post:#{quoted_post.post_number}\"]\n#{quoted_post.excerpt}\n[/quote]")
|
post.update_columns(raw: "This quote is the best\n\n[quote=\"#{quoted_post.user.username}, topic:#{quoted_post.topic_id}, post:#{quoted_post.post_number}\"]\n#{quoted_post.excerpt}\n[/quote]")
|
||||||
|
stub_image_size
|
||||||
# when creating a quote, we also create the reflexion link
|
# when creating a quote, we also create the reflexion link
|
||||||
expect { Jobs::ProcessPost.new.execute(post_id: post.id) }.to change { TopicLink.count }.by(2)
|
expect { Jobs::ProcessPost.new.execute(post_id: post.id) }.to change { TopicLink.count }.by(2)
|
||||||
end
|
end
|
||||||
|
@ -60,6 +62,7 @@ describe Jobs::ProcessPost do
|
||||||
it "extracts links to oneboxed topics" do
|
it "extracts links to oneboxed topics" do
|
||||||
oneboxed_post = Fabricate(:post)
|
oneboxed_post = Fabricate(:post)
|
||||||
post.update_columns(raw: "This post is the best\n\n#{oneboxed_post.full_url}")
|
post.update_columns(raw: "This post is the best\n\n#{oneboxed_post.full_url}")
|
||||||
|
stub_image_size
|
||||||
# when creating a quote, we also create the reflexion link
|
# when creating a quote, we also create the reflexion link
|
||||||
expect { Jobs::ProcessPost.new.execute(post_id: post.id) }.to change { TopicLink.count }.by(2)
|
expect { Jobs::ProcessPost.new.execute(post_id: post.id) }.to change { TopicLink.count }.by(2)
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,7 +31,6 @@ describe Jobs::PullHotlinkedImages do
|
||||||
"#{Discourse.base_url}/#{upload_path}/original/1X/c530c06cf89c410c0355d7852644a73fc3ec8c04.png"
|
"#{Discourse.base_url}/#{upload_path}/original/1X/c530c06cf89c410c0355d7852644a73fc3ec8c04.png"
|
||||||
)
|
)
|
||||||
|
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
SiteSetting.download_remote_images_to_local = true
|
SiteSetting.download_remote_images_to_local = true
|
||||||
SiteSetting.max_image_size_kb = 2
|
SiteSetting.max_image_size_kb = 2
|
||||||
SiteSetting.download_remote_images_threshold = 0
|
SiteSetting.download_remote_images_threshold = 0
|
||||||
|
@ -62,6 +61,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
|
|
||||||
it 'replaces images' do
|
it 'replaces images' do
|
||||||
post = Fabricate(:post, raw: "<img src='#{image_url}'>")
|
post = Fabricate(:post, raw: "<img src='#{image_url}'>")
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect do
|
expect do
|
||||||
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
||||||
|
@ -73,6 +73,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
|
|
||||||
it 'removes downloaded images when they are no longer needed' do
|
it 'removes downloaded images when they are no longer needed' do
|
||||||
post = Fabricate(:post, raw: "<img src='#{image_url}'>")
|
post = Fabricate(:post, raw: "<img src='#{image_url}'>")
|
||||||
|
stub_image_size
|
||||||
post.rebake!
|
post.rebake!
|
||||||
post.reload
|
post.reload
|
||||||
expect(post.post_uploads.count).to eq(1)
|
expect(post.post_uploads.count).to eq(1)
|
||||||
|
@ -85,6 +86,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
|
|
||||||
it 'replaces images again after edit' do
|
it 'replaces images again after edit' do
|
||||||
post = Fabricate(:post, raw: "<img src='#{image_url}'>")
|
post = Fabricate(:post, raw: "<img src='#{image_url}'>")
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect do
|
expect do
|
||||||
post.rebake!
|
post.rebake!
|
||||||
|
@ -104,6 +106,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
|
|
||||||
it 'replaces encoded image urls' do
|
it 'replaces encoded image urls' do
|
||||||
post = Fabricate(:post, raw: "<img src='#{encoded_image_url}'>")
|
post = Fabricate(:post, raw: "<img src='#{encoded_image_url}'>")
|
||||||
|
stub_image_size
|
||||||
expect do
|
expect do
|
||||||
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
||||||
end.to change { Upload.count }.by(1)
|
end.to change { Upload.count }.by(1)
|
||||||
|
@ -143,6 +146,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
it 'replaces correct image URL' do
|
it 'replaces correct image URL' do
|
||||||
url = image_url.sub("/2e/Longcat1.png", '')
|
url = image_url.sub("/2e/Longcat1.png", '')
|
||||||
post = Fabricate(:post, raw: "[Images](#{url})\n![](#{image_url})")
|
post = Fabricate(:post, raw: "[Images](#{url})\n![](#{image_url})")
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect do
|
expect do
|
||||||
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
||||||
|
@ -154,6 +158,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
it 'replaces images without protocol' do
|
it 'replaces images without protocol' do
|
||||||
url = image_url.sub(/^https?\:/, '')
|
url = image_url.sub(/^https?\:/, '')
|
||||||
post = Fabricate(:post, raw: "<img alt='test' src='#{url}'>")
|
post = Fabricate(:post, raw: "<img alt='test' src='#{url}'>")
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect do
|
expect do
|
||||||
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
||||||
|
@ -166,6 +171,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
url = image_url.sub(/\.[a-zA-Z0-9]+$/, '')
|
url = image_url.sub(/\.[a-zA-Z0-9]+$/, '')
|
||||||
stub_request(:get, url).to_return(body: png, headers: { "Content-Type" => "image/png" })
|
stub_request(:get, url).to_return(body: png, headers: { "Content-Type" => "image/png" })
|
||||||
post = Fabricate(:post, raw: "<img src='#{url}'>")
|
post = Fabricate(:post, raw: "<img src='#{url}'>")
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect do
|
expect do
|
||||||
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
Jobs::PullHotlinkedImages.new.execute(post_id: post.id)
|
||||||
|
@ -182,6 +188,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
.to_return(status: 200, body: file_from_fixtures("smallest.png"))
|
.to_return(status: 200, body: file_from_fixtures("smallest.png"))
|
||||||
|
|
||||||
post = Fabricate(:post, raw: "<img src='#{url}'>")
|
post = Fabricate(:post, raw: "<img src='#{url}'>")
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
||||||
.to change { Upload.count }.by(1)
|
.to change { Upload.count }.by(1)
|
||||||
|
@ -261,6 +268,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
![abcde](#{image_url} 'some test')
|
![abcde](#{image_url} 'some test')
|
||||||
![](#{image_url} 'some test')
|
![](#{image_url} 'some test')
|
||||||
MD
|
MD
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
||||||
.to change { Upload.count }.by(1)
|
.to change { Upload.count }.by(1)
|
||||||
|
@ -281,6 +289,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
![some test](#{image_url})
|
![some test](#{image_url})
|
||||||
![some test 2]("#{image_url})
|
![some test 2]("#{image_url})
|
||||||
MD
|
MD
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
||||||
.to change { Upload.count }.by(1)
|
.to change { Upload.count }.by(1)
|
||||||
|
@ -296,6 +305,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
#{image_url}
|
#{image_url}
|
||||||
[/img]
|
[/img]
|
||||||
MD
|
MD
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
expect { Jobs::PullHotlinkedImages.new.execute(post_id: post.id) }
|
||||||
.to change { Upload.count }.by(1)
|
.to change { Upload.count }.by(1)
|
||||||
|
@ -336,6 +346,8 @@ describe Jobs::PullHotlinkedImages do
|
||||||
|
|
||||||
it 'replaces image src' do
|
it 'replaces image src' do
|
||||||
post = Fabricate(:post, raw: "#{url}")
|
post = Fabricate(:post, raw: "#{url}")
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
post.rebake!
|
post.rebake!
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
|
@ -345,6 +357,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
|
|
||||||
it 'associates uploads correctly' do
|
it 'associates uploads correctly' do
|
||||||
post = Fabricate(:post, raw: "#{url}")
|
post = Fabricate(:post, raw: "#{url}")
|
||||||
|
stub_image_size
|
||||||
post.rebake!
|
post.rebake!
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
|
@ -364,6 +377,7 @@ describe Jobs::PullHotlinkedImages do
|
||||||
<img src='#{broken_image_url}'>
|
<img src='#{broken_image_url}'>
|
||||||
<a href='#{url}'><img src='#{large_image_url}'></a>
|
<a href='#{url}'><img src='#{large_image_url}'></a>
|
||||||
BODY
|
BODY
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
2.times do
|
2.times do
|
||||||
post.rebake!
|
post.rebake!
|
||||||
|
|
|
@ -900,6 +900,7 @@ describe PostAction do
|
||||||
Jobs.run_immediately!
|
Jobs.run_immediately!
|
||||||
post = Fabricate(:post)
|
post = Fabricate(:post)
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
|
stub_image_size
|
||||||
result = PostActionCreator.create(user, post, :spam, message: "WAT")
|
result = PostActionCreator.create(user, post, :spam, message: "WAT")
|
||||||
topic = result.post_action.related_post.topic
|
topic = result.post_action.related_post.topic
|
||||||
reviewable = result.reviewable
|
reviewable = result.reviewable
|
||||||
|
|
|
@ -22,6 +22,7 @@ describe QuotedPost do
|
||||||
|
|
||||||
#{post3.full_url}
|
#{post3.full_url}
|
||||||
RAW
|
RAW
|
||||||
|
stub_image_size
|
||||||
|
|
||||||
post4 = create_post(topic: topic, raw: raw, post_number: 4, reply_to_post_number: post3.post_number)
|
post4 = create_post(topic: topic, raw: raw, post_number: 4, reply_to_post_number: post3.post_number)
|
||||||
|
|
||||||
|
|
|
@ -182,6 +182,7 @@ RSpec.configure do |config|
|
||||||
config.include SidekiqHelpers
|
config.include SidekiqHelpers
|
||||||
config.include UploadsHelpers
|
config.include UploadsHelpers
|
||||||
config.include OneboxHelpers
|
config.include OneboxHelpers
|
||||||
|
config.include FastImageHelpers
|
||||||
config.mock_framework = :mocha
|
config.mock_framework = :mocha
|
||||||
config.order = 'random'
|
config.order = 'random'
|
||||||
config.infer_spec_type_from_file_location!
|
config.infer_spec_type_from_file_location!
|
||||||
|
|
|
@ -225,7 +225,6 @@ describe SearchIndexer do
|
||||||
|
|
||||||
it 'should not include lightbox in search' do
|
it 'should not include lightbox in search' do
|
||||||
Jobs.run_immediately!
|
Jobs.run_immediately!
|
||||||
SiteSetting.crawl_images = true
|
|
||||||
SiteSetting.max_image_width = 1
|
SiteSetting.max_image_width = 1
|
||||||
|
|
||||||
stub_request(:get, "https://meta.discourse.org/some.png")
|
stub_request(:get, "https://meta.discourse.org/some.png")
|
||||||
|
|
|
@ -153,6 +153,8 @@ describe UserAnonymizer do
|
||||||
|
|
||||||
topic = Fabricate(:topic, user: user)
|
topic = Fabricate(:topic, user: user)
|
||||||
quoted_post = create_post(user: user, topic: topic, post_number: 1, raw: "quoted post")
|
quoted_post = create_post(user: user, topic: topic, post_number: 1, raw: "quoted post")
|
||||||
|
|
||||||
|
stub_image_size
|
||||||
post = create_post(raw: <<~RAW)
|
post = create_post(raw: <<~RAW)
|
||||||
Lorem ipsum
|
Lorem ipsum
|
||||||
|
|
||||||
|
|
|
@ -107,6 +107,7 @@ describe UsernameChanger do
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_post_and_change_username(args = {}, &block)
|
def create_post_and_change_username(args = {}, &block)
|
||||||
|
stub_image_size
|
||||||
post = create_post(args.merge(topic_id: topic.id))
|
post = create_post(args.merge(topic_id: topic.id))
|
||||||
|
|
||||||
args.delete(:revisions)&.each do |revision|
|
args.delete(:revisions)&.each do |revision|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module FastImageHelpers
|
||||||
|
def stub_image_size(width: nil, height: nil)
|
||||||
|
FastImage.stubs(:size).returns([width, height])
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue