diff options
author | Heinrich Lee Yu <heinrich@gitlab.com> | 2019-06-21 05:01:14 +0800 |
---|---|---|
committer | Heinrich Lee Yu <heinrich@gitlab.com> | 2019-07-04 03:46:26 +0800 |
commit | 76b0518f334090294d4ad7db7be64846f6018e80 (patch) | |
tree | d2cd19c6f875dcefaadd37689beed49e837ef9bd /spec/uploaders/file_uploader_spec.rb | |
parent | fb35a3b7f4250f683b6a234dd70d24aa38f229a6 (diff) | |
download | gitlab-ce-76b0518f334090294d4ad7db7be64846f6018e80.tar.gz |
Use #filename when generating upload URLs53357-fix-plus-in-upload-file-names
We don't need to find the filename from the remote URL
Diffstat (limited to 'spec/uploaders/file_uploader_spec.rb')
-rw-r--r-- | spec/uploaders/file_uploader_spec.rb | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/spec/uploaders/file_uploader_spec.rb b/spec/uploaders/file_uploader_spec.rb index 185c62491ce..04206de3dc6 100644 --- a/spec/uploaders/file_uploader_spec.rb +++ b/spec/uploaders/file_uploader_spec.rb @@ -184,40 +184,37 @@ describe FileUploader do end end - describe '#cache!' do - subject do - uploader.store!(uploaded_file) - end + context 'when remote file is used' do + let(:temp_file) { Tempfile.new("test") } - context 'when remote file is used' do - let(:temp_file) { Tempfile.new("test") } + let!(:fog_connection) do + stub_uploads_object_storage(described_class) + end - let!(:fog_connection) do - stub_uploads_object_storage(described_class) - end + let(:filename) { "my file.txt" } + let(:uploaded_file) do + UploadedFile.new(temp_file.path, filename: filename, remote_id: "test/123123") + end - let(:uploaded_file) do - UploadedFile.new(temp_file.path, filename: "my file.txt", remote_id: "test/123123") - end + let!(:fog_file) do + fog_connection.directories.new(key: 'uploads').files.create( + key: 'tmp/uploads/test/123123', + body: 'content' + ) + end - let!(:fog_file) do - fog_connection.directories.new(key: 'uploads').files.create( - key: 'tmp/uploads/test/123123', - body: 'content' - ) - end + before do + FileUtils.touch(temp_file) - before do - FileUtils.touch(temp_file) - end + uploader.store!(uploaded_file) + end - after do - FileUtils.rm_f(temp_file) - end + after do + FileUtils.rm_f(temp_file) + end + describe '#cache!' do it 'file is stored remotely in permament location with sanitized name' do - subject - expect(uploader).to be_exists expect(uploader).not_to be_cached expect(uploader).not_to be_file_storage @@ -228,5 +225,18 @@ describe FileUploader do expect(uploader.object_store).to eq(described_class::Store::REMOTE) end end + + describe '#to_h' do + subject { uploader.to_h } + + let(:filename) { 'my+file.txt' } + + it 'generates URL using original file name instead of filename returned by object storage' do + # GCS returns a URL with a `+` instead of `%2B` + allow(uploader.file).to receive(:url).and_return('https://storage.googleapis.com/gitlab-test-uploads/@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b/64c5065e62100b1a12841644256a98be/my+file.txt') + + expect(subject[:url]).to end_with(filename) + end + end end end |