From c3ac4f332929f605355267dc34f979d03a40be92 Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 2 Jul 2017 20:57:41 -0500 Subject: [PATCH] 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. --- app/logical/downloads/file.rb | 6 +++++- app/models/post_replacement.rb | 2 +- app/models/upload.rb | 6 +++--- test/unit/post_replacement_test.rb | 10 ++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/logical/downloads/file.rb b/app/logical/downloads/file.rb index 8229426e5..10cc6de29 100644 --- a/app/logical/downloads/file.rb +++ b/app/logical/downloads/file.rb @@ -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 diff --git a/app/models/post_replacement.rb b/app/models/post_replacement.rb index ef5d03373..0351e1d7a 100644 --- a/app/models/post_replacement.rb +++ b/app/models/post_replacement.rb @@ -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 diff --git a/app/models/upload.rb b/app/models/upload.rb index 01cb2ef66..828d767e7 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -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 diff --git a/test/unit/post_replacement_test.rb b/test/unit/post_replacement_test.rb index 25e2672e9..619b70a92 100644 --- a/test/unit/post_replacement_test.rb +++ b/test/unit/post_replacement_test.rb @@ -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