Fix #3197 - Post Replacement comment: use Replacement URL instead of Final Source

Record the URL of the image that was actually downloaded as the replacement URL.
This commit is contained in:
evazion
2017-07-02 20:57:41 -05:00
parent 5a2745ee71
commit c3ac4f3329
4 changed files with 19 additions and 5 deletions

View File

@@ -3,7 +3,7 @@ module Downloads
class Error < Exception ; end
attr_reader :data, :options
attr_accessor :source, :original_source, :content_type, :file_path
attr_accessor :source, :original_source, :downloaded_source, :content_type, :file_path
def initialize(source, file_path, options = {})
# source can potentially get rewritten in the course
@@ -11,6 +11,9 @@ module Downloads
@source = source
@original_source = source
# the URL actually downloaded after rewriting the original source.
@downloaded_source = nil
# where to save the download
@file_path = file_path
@@ -43,6 +46,7 @@ module Downloads
response.read_body(out)
end
end
@downloaded_source = @source
@source = after_download(@source)
end

View File

@@ -26,7 +26,7 @@ class PostReplacement < ApplicationRecord
if replacement_file.present?
update(replacement_url: "file://#{replacement_file.original_filename}")
else
update(replacement_url: upload.source)
update(replacement_url: upload.downloaded_source)
end
# queue the deletion *before* updating the post so that we use the old

View File

@@ -7,7 +7,7 @@ class Upload < ApplicationRecord
attr_accessor :file, :image_width, :image_height, :file_ext, :md5,
:file_size, :as_pending, :artist_commentary_title,
:artist_commentary_desc, :include_artist_commentary,
:referer_url
:referer_url, :downloaded_source
belongs_to :uploader, :class_name => "User"
belongs_to :post
before_validation :initialize_uploader, :on => :create
@@ -110,7 +110,7 @@ class Upload < ApplicationRecord
update_attribute(:status, "processing")
self.source = strip_source
if is_downloadable?
self.source = download_from_source(temp_file_path)
self.downloaded_source, self.source = download_from_source(temp_file_path)
end
validate_file_exists
self.content_type = file_header_to_content_type(file_path)
@@ -407,7 +407,7 @@ class Upload < ApplicationRecord
download = Downloads::File.new(source, destination_path, :referer_url => referer_url)
download.download!
ugoira_service.load(download.data)
download.source
[download.downloaded_source, download.source]
end
end

View File

@@ -216,5 +216,15 @@ class PostReplacementTest < ActiveSupport::TestCase
assert_equal(final_source, @post.source)
end
end
context "a post when replaced with a HTML source" do
should "record the image URL as the replacement URL, not the HTML source" do
replacement_url = "https://twitter.com/nounproject/status/540944400767922176"
image_url = "http://pbs.twimg.com/media/B4HSEP5CUAA4xyu.png:orig"
@post.replace!(replacement_url: replacement_url)
assert_equal(image_url, @post.replacements.last.replacement_url)
end
end
end
end