diff --git a/lib/file_store/base_store.rb b/lib/file_store/base_store.rb index 85c3be2ab0..15b85cb994 100644 --- a/lib/file_store/base_store.rb +++ b/lib/file_store/base_store.rb @@ -85,6 +85,7 @@ module FileStore follow_redirect: true ) cache_file(file, filename) + file = get_from_cache(filename) end file diff --git a/spec/components/file_store/base_store_spec.rb b/spec/components/file_store/base_store_spec.rb index ac2aebd0fa..5ef2579747 100644 --- a/spec/components/file_store/base_store_spec.rb +++ b/spec/components/file_store/base_store_spec.rb @@ -45,4 +45,33 @@ RSpec.describe FileStore::BaseStore do expect(FileStore::BaseStore.new.get_path_for_optimized_image(optimized)).to eq(optimized_path) end end + + describe '#download' do + before do + `rm -rf #{FileStore::BaseStore::CACHE_DIR}` + + SiteSetting.enable_s3_uploads = true + SiteSetting.s3_upload_bucket = "s3-upload-bucket" + SiteSetting.s3_access_key_id = "some key" + SiteSetting.s3_secret_access_key = "some secret key" + + stub_request(:get, upload_s3.url).to_return(status: 200, body: "Hello world") + end + + let(:upload_s3) { Fabricate(:upload_s3) } + + it "should return consistent encodings for fresh and cached downloads" do + # Net::HTTP always returns binary ASCII-8BIT encoding. File.read auto-detects the encoding + # Make sure we File.read after downloading a file for consistency + + store = FileStore::BaseStore.new + + first_encoding = store.download(upload_s3).read.encoding + + second_encoding = store.download(upload_s3).read.encoding + + expect(first_encoding).to eq(Encoding::UTF_8) + expect(second_encoding).to eq(Encoding::UTF_8) + end + end end