diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-20 18:42:06 +0000 |
commit | 6e4e1050d9dba2b7b2523fdd1768823ab85feef4 (patch) | |
tree | 78be5963ec075d80116a932011d695dd33910b4e /spec/controllers/concerns | |
parent | 1ce776de4ae122aba3f349c02c17cebeaa8ecf07 (diff) | |
download | gitlab-ce-6e4e1050d9dba2b7b2523fdd1768823ab85feef4.tar.gz |
Add latest changes from gitlab-org/gitlab@13-3-stable-ee
Diffstat (limited to 'spec/controllers/concerns')
4 files changed, 139 insertions, 3 deletions
diff --git a/spec/controllers/concerns/checks_collaboration_spec.rb b/spec/controllers/concerns/checks_collaboration_spec.rb index be8beff5dd6..7fcd190d71a 100644 --- a/spec/controllers/concerns/checks_collaboration_spec.rb +++ b/spec/controllers/concerns/checks_collaboration_spec.rb @@ -33,7 +33,7 @@ RSpec.describe ChecksCollaboration do it 'is true when the user can push to a branch of the project' do fake_access = double('Gitlab::UserAccess') expect(fake_access).to receive(:can_push_to_branch?).with('a-branch').and_return(true) - expect(Gitlab::UserAccess).to receive(:new).with(user, project: project).and_return(fake_access) + expect(Gitlab::UserAccess).to receive(:new).with(user, container: project).and_return(fake_access) expect(helper.can_collaborate_with_project?(project, ref: 'a-branch')).to be_truthy end diff --git a/spec/controllers/concerns/graceful_timeout_handling_spec.rb b/spec/controllers/concerns/graceful_timeout_handling_spec.rb new file mode 100644 index 00000000000..cece36f06b2 --- /dev/null +++ b/spec/controllers/concerns/graceful_timeout_handling_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GracefulTimeoutHandling, type: :controller do + controller(ApplicationController) do + include GracefulTimeoutHandling + + skip_before_action :authenticate_user! + + def index + raise ActiveRecord::QueryCanceled.new + end + end + + context 'for json request' do + subject { get :index, format: :json } + + it 'renders graceful error message' do + subject + + expect(json_response['error']).to eq(_('There is too much data to calculate. Please change your selection.')) + expect(response.code).to eq '200' + end + + it 'logs exception' do + expect(Gitlab::ErrorTracking).to receive(:track_exception).with(kind_of(ActiveRecord::QueryCanceled)) + + subject + end + end + + context 'for html request' do + subject { get :index, format: :html } + + it 'has no effect' do + expect do + subject + end.to raise_error(ActiveRecord::QueryCanceled) + end + end +end diff --git a/spec/controllers/concerns/metrics_dashboard_spec.rb b/spec/controllers/concerns/metrics_dashboard_spec.rb index f0c9874965e..8a4d8828aaa 100644 --- a/spec/controllers/concerns/metrics_dashboard_spec.rb +++ b/spec/controllers/concerns/metrics_dashboard_spec.rb @@ -165,13 +165,14 @@ RSpec.describe MetricsDashboard do it 'adds starred dashboard information and sorts the list' do all_dashboards = json_response['all_dashboards'].map { |dashboard| dashboard.slice('display_name', 'starred', 'user_starred_path') } expected_response = [ - { "display_name" => "Default dashboard", "starred" => false, 'user_starred_path' => api_v4_projects_metrics_user_starred_dashboards_path(id: project.id, params: { dashboard_path: 'config/prometheus/common_metrics.yml' }) }, { "display_name" => "anomaly.yml", "starred" => false, 'user_starred_path' => api_v4_projects_metrics_user_starred_dashboards_path(id: project.id, params: { dashboard_path: '.gitlab/dashboards/anomaly.yml' }) }, { "display_name" => "errors.yml", "starred" => true, 'user_starred_path' => api_v4_projects_metrics_user_starred_dashboards_path(id: project.id, params: { dashboard_path: '.gitlab/dashboards/errors.yml' }) }, + { "display_name" => "K8s pod health", "starred" => false, 'user_starred_path' => api_v4_projects_metrics_user_starred_dashboards_path(id: project.id, params: { dashboard_path: 'config/prometheus/pod_metrics.yml' }) }, + { "display_name" => "Overview", "starred" => false, 'user_starred_path' => api_v4_projects_metrics_user_starred_dashboards_path(id: project.id, params: { dashboard_path: 'config/prometheus/common_metrics.yml' }) }, { "display_name" => "test.yml", "starred" => true, 'user_starred_path' => api_v4_projects_metrics_user_starred_dashboards_path(id: project.id, params: { dashboard_path: '.gitlab/dashboards/test.yml' }) } ] - expect(all_dashboards).to eql expected_response + expect(all_dashboards).to eq(expected_response) end end end diff --git a/spec/controllers/concerns/send_file_upload_spec.rb b/spec/controllers/concerns/send_file_upload_spec.rb index 7cfaf1b248f..e24e4cbf5e7 100644 --- a/spec/controllers/concerns/send_file_upload_spec.rb +++ b/spec/controllers/concerns/send_file_upload_spec.rb @@ -21,6 +21,12 @@ RSpec.describe SendFileUpload do let(:controller_class) do Class.new do include SendFileUpload + + def params + {} + end + + def current_user; end end end @@ -42,6 +48,89 @@ RSpec.describe SendFileUpload do FileUtils.rm_f(temp_file) end + shared_examples 'handles image resize requests' do + let(:headers) { double } + + before do + allow(uploader).to receive(:image?).and_return(true) + allow(uploader).to receive(:mounted_as).and_return(:avatar) + + allow(controller).to receive(:headers).and_return(headers) + # both of these are valid cases, depending on whether we are dealing with + # local or remote files + allow(controller).to receive(:send_file) + allow(controller).to receive(:redirect_to) + end + + context 'when feature is enabled for current user' do + let(:user) { build(:user) } + + before do + stub_feature_flags(dynamic_image_resizing: user) + allow(controller).to receive(:current_user).and_return(user) + end + + context 'with valid width parameter' do + it 'renders OK with workhorse command header' do + expect(controller).not_to receive(:send_file) + expect(controller).to receive(:params).at_least(:once).and_return(width: '64') + expect(controller).to receive(:head).with(:ok) + expect(headers).to receive(:store).with(Gitlab::Workhorse::SEND_DATA_HEADER, /^send-scaled-img:/) + + subject + end + end + + context 'with missing width parameter' do + it 'does not write workhorse command header' do + expect(headers).not_to receive(:store).with(Gitlab::Workhorse::SEND_DATA_HEADER, /^send-scaled-img:/) + + subject + end + end + + context 'with invalid width parameter' do + it 'does not write workhorse command header' do + expect(controller).to receive(:params).at_least(:once).and_return(width: 'not a number') + expect(headers).not_to receive(:store).with(Gitlab::Workhorse::SEND_DATA_HEADER, /^send-scaled-img:/) + + subject + end + end + + context 'with width that is not allowed' do + it 'does not write workhorse command header' do + expect(controller).to receive(:params).at_least(:once).and_return(width: '63') + expect(headers).not_to receive(:store).with(Gitlab::Workhorse::SEND_DATA_HEADER, /^send-scaled-img:/) + + subject + end + end + + context 'when image file is not an avatar' do + it 'does not write workhorse command header' do + expect(uploader).to receive(:mounted_as).and_return(nil) # FileUploader is not mounted + expect(headers).not_to receive(:store).with(Gitlab::Workhorse::SEND_DATA_HEADER, /^send-scaled-img:/) + + subject + end + end + end + + context 'when feature is disabled' do + before do + stub_feature_flags(dynamic_image_resizing: false) + end + + it 'does not write workhorse command header' do + expect(controller).to receive(:params).at_least(:once).and_return(width: '64') + expect(headers).not_to receive(:store).with(Gitlab::Workhorse::SEND_DATA_HEADER, /^send-scaled-img:/) + + subject + end + end + end + context 'when local file is used' do before do uploader.store!(temp_file) @@ -52,6 +141,8 @@ RSpec.describe SendFileUpload do subject end + + it_behaves_like 'handles image resize requests' end context 'with inline image' do @@ -155,6 +246,8 @@ RSpec.describe SendFileUpload do it_behaves_like 'proxied file' end end + + it_behaves_like 'handles image resize requests' end end end |