summaryrefslogtreecommitdiff
path: root/spec/controllers/groups
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers/groups')
-rw-r--r--spec/controllers/groups/clusters_controller_spec.rb40
-rw-r--r--spec/controllers/groups/imports_controller_spec.rb2
-rw-r--r--spec/controllers/groups/runners_controller_spec.rb127
-rw-r--r--spec/controllers/groups/settings/ci_cd_controller_spec.rb15
4 files changed, 180 insertions, 4 deletions
diff --git a/spec/controllers/groups/clusters_controller_spec.rb b/spec/controllers/groups/clusters_controller_spec.rb
index 6765cf0990a..1593e1290c4 100644
--- a/spec/controllers/groups/clusters_controller_spec.rb
+++ b/spec/controllers/groups/clusters_controller_spec.rb
@@ -192,6 +192,46 @@ RSpec.describe Groups::ClustersController do
end
end
+ it_behaves_like 'GET #metrics_dashboard for dashboard', 'Cluster health' do
+ let(:cluster) { create(:cluster, :provided_by_gcp, cluster_type: :group_type, groups: [group]) }
+
+ let(:metrics_dashboard_req_params) do
+ {
+ id: cluster.id,
+ group_id: group.name
+ }
+ end
+ end
+
+ describe 'GET #prometheus_proxy' do
+ let(:proxyable) do
+ create(:cluster, :provided_by_gcp, cluster_type: :group_type, groups: [group])
+ end
+
+ it_behaves_like 'metrics dashboard prometheus api proxy' do
+ let(:proxyable_params) do
+ {
+ id: proxyable.id.to_s,
+ group_id: group.name
+ }
+ end
+
+ context 'with anonymous user' do
+ let(:prometheus_body) { nil }
+
+ before do
+ sign_out(user)
+ end
+
+ it 'returns 404' do
+ get :prometheus_proxy, params: prometheus_proxy_params
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
+ end
+
describe 'POST create for new cluster' do
let(:legacy_abac_param) { 'true' }
let(:params) do
diff --git a/spec/controllers/groups/imports_controller_spec.rb b/spec/controllers/groups/imports_controller_spec.rb
index eb43a62b75b..7372c2e9575 100644
--- a/spec/controllers/groups/imports_controller_spec.rb
+++ b/spec/controllers/groups/imports_controller_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe Groups::ImportsController do
+RSpec.describe Groups::ImportsController do
describe 'GET #show' do
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group, :private) }
diff --git a/spec/controllers/groups/runners_controller_spec.rb b/spec/controllers/groups/runners_controller_spec.rb
index 376cd569952..91ff0a53ec7 100644
--- a/spec/controllers/groups/runners_controller_spec.rb
+++ b/spec/controllers/groups/runners_controller_spec.rb
@@ -6,6 +6,9 @@ RSpec.describe Groups::RunnersController do
let(:user) { create(:user) }
let(:group) { create(:group) }
let(:runner) { create(:ci_runner, :group, groups: [group]) }
+ let(:project) { create(:project, group: group) }
+ let(:runner_project) { create(:ci_runner, :project, projects: [project]) }
+ let(:params_runner_project) { { group_id: group, id: runner_project } }
let(:params) { { group_id: group, id: runner } }
before do
@@ -24,6 +27,13 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template(:show)
end
+
+ it 'renders show with 200 status code project runner' do
+ get :show, params: { group_id: group, id: runner_project }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to render_template(:show)
+ end
end
context 'when user is not owner' do
@@ -36,6 +46,12 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:not_found)
end
+
+ it 'renders a 404 project runner' do
+ get :show, params: { group_id: group, id: runner_project }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
end
end
@@ -51,6 +67,13 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template(:edit)
end
+
+ it 'renders show with 200 status code project runner' do
+ get :edit, params: { group_id: group, id: runner_project }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to render_template(:edit)
+ end
end
context 'when user is not owner' do
@@ -63,6 +86,12 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:not_found)
end
+
+ it 'renders a 404 project runner' do
+ get :edit, params: { group_id: group, id: runner_project }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
end
end
@@ -82,6 +111,17 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:found)
expect(runner.reload.description).to eq(new_desc)
end
+
+ it 'updates the project runner, ticks the queue, and redirects project runner' do
+ new_desc = runner_project.description.swapcase
+
+ expect do
+ post :update, params: params_runner_project.merge(runner: { description: new_desc } )
+ end.to change { runner_project.ensure_runner_queue_value }
+
+ expect(response).to have_gitlab_http_status(:found)
+ expect(runner_project.reload.description).to eq(new_desc)
+ end
end
context 'when user is not an owner' do
@@ -99,6 +139,17 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:not_found)
expect(runner.reload.description).to eq(old_desc)
end
+
+ it 'rejects the update and responds 404 project runner' do
+ old_desc = runner_project.description
+
+ expect do
+ post :update, params: params_runner_project.merge(runner: { description: old_desc.swapcase } )
+ end.not_to change { runner_project.ensure_runner_queue_value }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(runner_project.reload.description).to eq(old_desc)
+ end
end
end
@@ -114,6 +165,31 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:found)
expect(Ci::Runner.find_by(id: runner.id)).to be_nil
end
+
+ it 'destroys the project runner and redirects' do
+ delete :destroy, params: params_runner_project
+
+ expect(response).to have_gitlab_http_status(:found)
+ expect(Ci::Runner.find_by(id: runner_project.id)).to be_nil
+ end
+ end
+
+ context 'when user is an owner and runner in multiple projects' do
+ let(:project_2) { create(:project, group: group) }
+ let(:runner_project_2) { create(:ci_runner, :project, projects: [project, project_2]) }
+ let(:params_runner_project_2) { { group_id: group, id: runner_project_2 } }
+
+ before do
+ group.add_owner(user)
+ end
+
+ it 'does not destroy the project runner' do
+ delete :destroy, params: params_runner_project_2
+
+ expect(response).to have_gitlab_http_status(:found)
+ expect(flash[:alert]).to eq('Runner was not deleted because it is assigned to multiple projects.')
+ expect(Ci::Runner.find_by(id: runner_project_2.id)).to be_present
+ end
end
context 'when user is not an owner' do
@@ -127,6 +203,13 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:not_found)
expect(Ci::Runner.find_by(id: runner.id)).to be_present
end
+
+ it 'responds 404 and does not destroy the project runner' do
+ delete :destroy, params: params_runner_project
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(Ci::Runner.find_by(id: runner_project.id)).to be_present
+ end
end
end
@@ -146,6 +229,17 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:found)
expect(runner.reload.active).to eq(true)
end
+
+ it 'marks the project runner as active, ticks the queue, and redirects' do
+ runner_project.update(active: false)
+
+ expect do
+ post :resume, params: params_runner_project
+ end.to change { runner_project.ensure_runner_queue_value }
+
+ expect(response).to have_gitlab_http_status(:found)
+ expect(runner_project.reload.active).to eq(true)
+ end
end
context 'when user is not an owner' do
@@ -163,6 +257,17 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:not_found)
expect(runner.reload.active).to eq(false)
end
+
+ it 'responds 404 and does not activate the project runner' do
+ runner_project.update(active: false)
+
+ expect do
+ post :resume, params: params_runner_project
+ end.not_to change { runner_project.ensure_runner_queue_value }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(runner_project.reload.active).to eq(false)
+ end
end
end
@@ -182,6 +287,17 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:found)
expect(runner.reload.active).to eq(false)
end
+
+ it 'marks the project runner as inactive, ticks the queue, and redirects' do
+ runner_project.update(active: true)
+
+ expect do
+ post :pause, params: params_runner_project
+ end.to change { runner_project.ensure_runner_queue_value }
+
+ expect(response).to have_gitlab_http_status(:found)
+ expect(runner_project.reload.active).to eq(false)
+ end
end
context 'when user is not an owner' do
@@ -199,6 +315,17 @@ RSpec.describe Groups::RunnersController do
expect(response).to have_gitlab_http_status(:not_found)
expect(runner.reload.active).to eq(true)
end
+
+ it 'responds 404 and does not update the project runner or queue' do
+ runner_project.update(active: true)
+
+ expect do
+ post :pause, params: params
+ end.not_to change { runner_project.ensure_runner_queue_value }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ expect(runner_project.reload.active).to eq(true)
+ end
end
end
end
diff --git a/spec/controllers/groups/settings/ci_cd_controller_spec.rb b/spec/controllers/groups/settings/ci_cd_controller_spec.rb
index 55c19de4aa1..f11bb66caab 100644
--- a/spec/controllers/groups/settings/ci_cd_controller_spec.rb
+++ b/spec/controllers/groups/settings/ci_cd_controller_spec.rb
@@ -5,8 +5,15 @@ require 'spec_helper'
RSpec.describe Groups::Settings::CiCdController do
include ExternalAuthorizationServiceHelpers
- let(:group) { create(:group) }
- let(:user) { create(:user) }
+ let_it_be(:group) { create(:group) }
+ let_it_be(:sub_group) { create(:group, parent: group) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, group: group) }
+ let_it_be(:project_2) { create(:project, group: sub_group) }
+ let_it_be(:runner_group) { create(:ci_runner, :group, groups: [group]) }
+ let_it_be(:runner_project_1) { create(:ci_runner, :project, projects: [project])}
+ let_it_be(:runner_project_2) { create(:ci_runner, :project, projects: [project_2])}
+ let_it_be(:runner_project_3) { create(:ci_runner, :project, projects: [project, project_2])}
before do
sign_in(user)
@@ -18,11 +25,12 @@ RSpec.describe Groups::Settings::CiCdController do
group.add_owner(user)
end
- it 'renders show with 200 status code' do
+ it 'renders show with 200 status code and correct runners' do
get :show, params: { group_id: group }
expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template(:show)
+ expect(assigns(:group_runners)).to match_array([runner_group, runner_project_1, runner_project_2, runner_project_3])
end
end
@@ -35,6 +43,7 @@ RSpec.describe Groups::Settings::CiCdController do
get :show, params: { group_id: group }
expect(response).to have_gitlab_http_status(:not_found)
+ expect(assigns(:group_runners)).to be_nil
end
end