summaryrefslogtreecommitdiff
path: root/spec/controllers
diff options
context:
space:
mode:
authorFrancisco Javier López <fjlopez@gitlab.com>2018-08-30 12:34:41 +0000
committerSean McGivern <sean@mcgivern.me.uk>2018-08-30 12:34:41 +0000
commitedb5759caf8c328803fdc04e3ae520d234edfcfc (patch)
treee73ba9b241027664a1e27d5778cbd18c0e5a9434 /spec/controllers
parentb8856d662942f54d7353e69505be08deb9b1d575 (diff)
downloadgitlab-ce-edb5759caf8c328803fdc04e3ae520d234edfcfc.tar.gz
Fixed project logo when it is LFS tracked
Diffstat (limited to 'spec/controllers')
-rw-r--r--spec/controllers/projects/avatars_controller_spec.rb53
-rw-r--r--spec/controllers/projects/raw_controller_spec.rb101
2 files changed, 58 insertions, 96 deletions
diff --git a/spec/controllers/projects/avatars_controller_spec.rb b/spec/controllers/projects/avatars_controller_spec.rb
index 17c9a61f339..14059cff74c 100644
--- a/spec/controllers/projects/avatars_controller_spec.rb
+++ b/spec/controllers/projects/avatars_controller_spec.rb
@@ -1,24 +1,55 @@
require 'spec_helper'
describe Projects::AvatarsController do
- let(:project) { create(:project, :repository, avatar: fixture_file_upload("spec/fixtures/dk.png", "image/png")) }
- let(:user) { create(:user) }
+ let(:project) { create(:project, :repository) }
before do
- sign_in(user)
- project.add_maintainer(user)
controller.instance_variable_set(:@project, project)
end
- it 'GET #show' do
- get :show, namespace_id: project.namespace.id, project_id: project.id
+ describe 'GET #show' do
+ subject { get :show, namespace_id: project.namespace, project_id: project }
- expect(response).to have_gitlab_http_status(404)
+ context 'when repository has no avatar' do
+ it 'shows 404' do
+ subject
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'when repository has an avatar' do
+ before do
+ allow(project).to receive(:avatar_in_git).and_return(filepath)
+ end
+
+ context 'when the avatar is stored in the repository' do
+ let(:filepath) { 'files/images/logo-white.png' }
+
+ it 'sends the avatar' do
+ subject
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response.header['Content-Type']).to eq('image/png')
+ expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with('git-blob:')
+ end
+ end
+
+ context 'when the avatar is stored in lfs' do
+ it_behaves_like 'repository lfs file load' do
+ let(:filename) { 'lfs_object.iso' }
+ let(:filepath) { "files/lfs/#{filename}" }
+ end
+ end
+ end
end
- it 'removes avatar from DB by calling destroy' do
- delete :destroy, namespace_id: project.namespace.id, project_id: project.id
- expect(project.avatar.present?).to be_falsey
- expect(project).to be_valid
+ describe 'DELETE #destroy' do
+ it 'removes avatar from DB by calling destroy' do
+ delete :destroy, namespace_id: project.namespace.id, project_id: project.id
+
+ expect(project.avatar.present?).to be_falsey
+ expect(project).to be_valid
+ end
end
end
diff --git a/spec/controllers/projects/raw_controller_spec.rb b/spec/controllers/projects/raw_controller_spec.rb
index c3468536ae1..6b658bf5295 100644
--- a/spec/controllers/projects/raw_controller_spec.rb
+++ b/spec/controllers/projects/raw_controller_spec.rb
@@ -1,14 +1,21 @@
require 'spec_helper'
describe Projects::RawController do
- let(:public_project) { create(:project, :public, :repository) }
+ let(:project) { create(:project, :public, :repository) }
+
+ describe 'GET #show' do
+ subject do
+ get(:show,
+ namespace_id: project.namespace,
+ project_id: project,
+ id: filepath)
+ end
- describe '#show' do
context 'regular filename' do
- let(:id) { 'master/README.md' }
+ let(:filepath) { 'master/README.md' }
it 'delivers ASCII file' do
- get_show(public_project, id)
+ subject
expect(response).to have_gitlab_http_status(200)
expect(response.header['Content-Type']).to eq('text/plain; charset=utf-8')
@@ -19,10 +26,10 @@ describe Projects::RawController do
end
context 'image header' do
- let(:id) { 'master/files/images/6049019_460s.jpg' }
+ let(:filepath) { 'master/files/images/6049019_460s.jpg' }
it 'sets image content type header' do
- get_show(public_project, id)
+ subject
expect(response).to have_gitlab_http_status(200)
expect(response.header['Content-Type']).to eq('image/jpeg')
@@ -30,85 +37,9 @@ describe Projects::RawController do
end
end
- context 'lfs object' do
- let(:id) { 'be93687/files/lfs/lfs_object.iso' }
- let!(:lfs_object) { create(:lfs_object, oid: '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', size: '1575078') }
-
- context 'when lfs is enabled' do
- before do
- allow_any_instance_of(Project).to receive(:lfs_enabled?).and_return(true)
- end
-
- context 'when project has access' do
- before do
- public_project.lfs_objects << lfs_object
- allow_any_instance_of(LfsObjectUploader).to receive(:exists?).and_return(true)
- allow(controller).to receive(:send_file) { controller.head :ok }
- end
-
- it 'serves the file' do
- expect(controller).to receive(:send_file).with("#{LfsObjectUploader.root}/91/ef/f75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897", filename: 'lfs_object.iso', disposition: 'attachment')
- get_show(public_project, id)
-
- expect(response).to have_gitlab_http_status(200)
- end
-
- context 'and lfs uses object storage' do
- let(:lfs_object) { create(:lfs_object, :with_file, oid: '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897', size: '1575078') }
-
- before do
- stub_lfs_object_storage
- lfs_object.file.migrate!(LfsObjectUploader::Store::REMOTE)
- end
-
- it 'responds with redirect to file' do
- get_show(public_project, id)
-
- expect(response).to have_gitlab_http_status(302)
- expect(response.location).to include(lfs_object.reload.file.path)
- end
-
- it 'sets content disposition' do
- get_show(public_project, id)
-
- file_uri = URI.parse(response.location)
- params = CGI.parse(file_uri.query)
-
- expect(params["response-content-disposition"].first).to eq 'attachment;filename="lfs_object.iso"'
- end
- end
- end
-
- context 'when project does not have access' do
- it 'does not serve the file' do
- get_show(public_project, id)
-
- expect(response).to have_gitlab_http_status(404)
- end
- end
- end
-
- context 'when lfs is not enabled' do
- before do
- allow_any_instance_of(Project).to receive(:lfs_enabled?).and_return(false)
- end
-
- it 'delivers ASCII file' do
- get_show(public_project, id)
-
- expect(response).to have_gitlab_http_status(200)
- expect(response.header['Content-Type']).to eq('text/plain; charset=utf-8')
- expect(response.header['Content-Disposition'])
- .to eq('inline')
- expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with('git-blob:')
- end
- end
+ it_behaves_like 'repository lfs file load' do
+ let(:filename) { 'lfs_object.iso' }
+ let(:filepath) { "be93687/files/lfs/#{filename}" }
end
end
-
- def get_show(project, id)
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project,
- id: id)
- end
end