diff options
Diffstat (limited to 'spec/controllers/groups')
5 files changed, 121 insertions, 135 deletions
diff --git a/spec/controllers/groups/clusters_controller_spec.rb b/spec/controllers/groups/clusters_controller_spec.rb index 710e983dfbd..4eeae64b760 100644 --- a/spec/controllers/groups/clusters_controller_spec.rb +++ b/spec/controllers/groups/clusters_controller_spec.rb @@ -32,6 +32,10 @@ RSpec.describe Groups::ClustersController do create(:cluster, :disabled, :provided_by_gcp, :production_environment, cluster_type: :group_type, groups: [group]) end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + it 'lists available clusters and renders html' do go @@ -116,6 +120,10 @@ RSpec.describe Groups::ClustersController do get :new, params: { group_id: group, provider: provider } end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + describe 'functionality for new cluster' do context 'when omniauth has been configured' do let(:key) { 'secret-key' } @@ -255,6 +263,10 @@ RSpec.describe Groups::ClustersController do post :create_gcp, params: params.merge(group_id: group) end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + describe 'functionality' do context 'when access token is valid' do before do @@ -349,6 +361,10 @@ RSpec.describe Groups::ClustersController do post :create_user, params: params.merge(group_id: group) end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + describe 'functionality' do context 'when creates a cluster' do it 'creates a new cluster' do @@ -457,6 +473,10 @@ RSpec.describe Groups::ClustersController do post :create_aws, params: params.merge(group_id: group) end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { post_create_aws } + end + it 'creates a new cluster' do expect(ClusterProvisionWorker).to receive(:perform_async) expect { post_create_aws }.to change { Clusters::Cluster.count } @@ -519,6 +539,10 @@ RSpec.describe Groups::ClustersController do post :authorize_aws_role, params: params.merge(group_id: group) end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + before do allow(Clusters::Aws::FetchCredentialsService).to receive(:new) .and_return(double(execute: double)) @@ -579,6 +603,10 @@ RSpec.describe Groups::ClustersController do } end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + it 'deletes the namespaces associated with the cluster' do expect { go }.to change { Clusters::KubernetesNamespace.count } @@ -611,6 +639,10 @@ RSpec.describe Groups::ClustersController do format: :json end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + describe 'functionality' do it 'responds with matching schema' do go @@ -651,6 +683,10 @@ RSpec.describe Groups::ClustersController do } end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + describe 'functionality' do render_views @@ -705,6 +741,10 @@ RSpec.describe Groups::ClustersController do } end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + it 'updates and redirects back to show page' do go @@ -802,6 +842,10 @@ RSpec.describe Groups::ClustersController do } end + include_examples ':certificate_based_clusters feature flag controller responses' do + let(:subject) { go } + end + describe 'functionality' do context 'when cluster is provided by GCP' do context 'when cluster is created' do diff --git a/spec/controllers/groups/dependency_proxy_for_containers_controller_spec.rb b/spec/controllers/groups/dependency_proxy_for_containers_controller_spec.rb index 57a83da3425..61445603a2d 100644 --- a/spec/controllers/groups/dependency_proxy_for_containers_controller_spec.rb +++ b/spec/controllers/groups/dependency_proxy_for_containers_controller_spec.rb @@ -170,6 +170,14 @@ RSpec.describe Groups::DependencyProxyForContainersController do end end + shared_examples 'namespace statistics refresh' do + it 'updates namespace statistics' do + expect(Groups::UpdateStatisticsWorker).to receive(:perform_async) + + subject + end + end + before do allow(Gitlab.config.dependency_proxy) .to receive(:enabled).and_return(true) @@ -403,13 +411,15 @@ RSpec.describe Groups::DependencyProxyForContainersController do context 'with a valid user' do before do group.add_guest(user) - - expect_next_found_instance_of(Group) do |instance| - expect(instance).to receive_message_chain(:dependency_proxy_blobs, :create!) - end end it_behaves_like 'a package tracking event', described_class.name, 'pull_blob' + + it 'creates a blob' do + expect { subject }.to change { group.dependency_proxy_blobs.count }.by(1) + end + + it_behaves_like 'namespace statistics refresh' end end @@ -473,6 +483,8 @@ RSpec.describe Groups::DependencyProxyForContainersController do expect(manifest.digest).to eq(digest) expect(manifest.file_name).to eq(file_name) end + + it_behaves_like 'namespace statistics refresh' end context 'with existing stale manifest' do @@ -483,6 +495,8 @@ RSpec.describe Groups::DependencyProxyForContainersController do expect { subject }.to change { group.dependency_proxy_manifests.count }.by(0) .and change { manifest.reload.digest }.from(old_digest).to(digest) end + + it_behaves_like 'namespace statistics refresh' end end end diff --git a/spec/controllers/groups/group_members_controller_spec.rb b/spec/controllers/groups/group_members_controller_spec.rb index 04a9b9f5250..25d32436d58 100644 --- a/spec/controllers/groups/group_members_controller_spec.rb +++ b/spec/controllers/groups/group_members_controller_spec.rb @@ -38,12 +38,6 @@ RSpec.describe Groups::GroupMembersController do expect(assigns(:invited_members).map(&:invite_email)).to match_array(invited.map(&:invite_email)) end - it 'assigns skip groups' do - get :index, params: { group_id: group } - - expect(assigns(:skip_groups)).to match_array(group.related_group_ids) - end - it 'restricts search to one email' do get :index, params: { group_id: group, search_invited: invited.first.invite_email } @@ -68,11 +62,10 @@ RSpec.describe Groups::GroupMembersController do sign_in(user) end - it 'does not assign invited members or skip_groups', :aggregate_failures do + it 'does not assign invited members' do get :index, params: { group_id: group } expect(assigns(:invited_members)).to be_nil - expect(assigns(:skip_groups)).to be_nil end end @@ -106,107 +99,6 @@ RSpec.describe Groups::GroupMembersController do end end - describe 'POST create' do - let_it_be(:group_user) { create(:user) } - - before do - sign_in(user) - end - - context 'when user does not have enough rights' do - before do - group.add_developer(user) - end - - it 'returns 403', :aggregate_failures do - post :create, params: { - group_id: group, - user_ids: group_user.id, - access_level: Gitlab::Access::GUEST - } - - expect(response).to have_gitlab_http_status(:forbidden) - expect(group.users).not_to include group_user - end - end - - context 'when user has enough rights' do - before do - group.add_owner(user) - end - - it 'adds user to members', :aggregate_failures, :snowplow do - post :create, params: { - group_id: group, - user_ids: group_user.id, - access_level: Gitlab::Access::GUEST - } - - expect(controller).to set_flash.to 'Users were successfully added.' - expect(response).to redirect_to(group_group_members_path(group)) - expect(group.users).to include group_user - expect_snowplow_event( - category: 'Members::CreateService', - action: 'create_member', - label: 'group-members-page', - property: 'existing_user', - user: user - ) - end - - it 'adds no user to members', :aggregate_failures do - post :create, params: { - group_id: group, - user_ids: '', - access_level: Gitlab::Access::GUEST - } - - expect(controller).to set_flash.to 'No users specified.' - expect(response).to redirect_to(group_group_members_path(group)) - expect(group.users).not_to include group_user - end - end - - context 'access expiry date' do - before do - group.add_owner(user) - end - - subject do - post :create, params: { - group_id: group, - user_ids: group_user.id, - access_level: Gitlab::Access::GUEST, - expires_at: expires_at - } - end - - context 'when set to a date in the past' do - let(:expires_at) { 2.days.ago } - - it 'does not add user to members', :aggregate_failures do - subject - - expect(flash[:alert]).to include('Expires at cannot be a date in the past') - expect(response).to redirect_to(group_group_members_path(group)) - expect(group.users).not_to include group_user - end - end - - context 'when set to a date in the future' do - let(:expires_at) { 5.days.from_now } - - it 'adds user to members', :aggregate_failures do - subject - - expect(controller).to set_flash.to 'Users were successfully added.' - expect(response).to redirect_to(group_group_members_path(group)) - expect(group.users).to include group_user - end - end - end - end - describe 'PUT update' do let_it_be(:requester) { create(:group_member, :access_request, group: group) } @@ -515,14 +407,6 @@ RSpec.describe Groups::GroupMembersController do end end - describe 'POST #create' do - it 'is successful' do - post :create, params: { group_id: group, users: user, access_level: Gitlab::Access::GUEST } - - expect(response).to have_gitlab_http_status(:found) - end - end - describe 'PUT #update' do it 'is successful' do put :update, diff --git a/spec/controllers/groups/releases_controller_spec.rb b/spec/controllers/groups/releases_controller_spec.rb index 582a77b1c50..8b08f913e10 100644 --- a/spec/controllers/groups/releases_controller_spec.rb +++ b/spec/controllers/groups/releases_controller_spec.rb @@ -20,11 +20,11 @@ RSpec.describe Groups::ReleasesController do context 'as json' do let(:format) { :json } - subject { get :index, params: { group_id: group }, format: format } + subject(:index) { get :index, params: { group_id: group }, format: format } context 'json_response' do before do - subject + index end it 'returns an application/json content_type' do @@ -38,7 +38,7 @@ RSpec.describe Groups::ReleasesController do context 'the user is not authorized' do before do - subject + index end it 'does not return any releases' do @@ -54,12 +54,38 @@ RSpec.describe Groups::ReleasesController do it "returns all group's public and private project's releases as JSON, ordered by released_at" do sign_in(guest) - subject + index expect(json_response.map {|r| r['tag'] } ).to match_array(%w(p2 p1 v2 v1)) end end + context 'group_releases_finder_inoperator feature flag' do + before do + sign_in(guest) + end + + it 'calls old code when disabled' do + stub_feature_flags(group_releases_finder_inoperator: false) + + allow(ReleasesFinder).to receive(:new).and_call_original + + index + + expect(ReleasesFinder).to have_received(:new) + end + + it 'calls new code when enabled' do + stub_feature_flags(group_releases_finder_inoperator: true) + + allow(Releases::GroupReleasesFinder).to receive(:new).and_call_original + + index + + expect(Releases::GroupReleasesFinder).to have_received(:new) + end + end + context 'N+1 queries' do it 'avoids N+1 database queries' do control_count = ActiveRecord::QueryRecorder.new { subject }.count diff --git a/spec/controllers/groups/runners_controller_spec.rb b/spec/controllers/groups/runners_controller_spec.rb index 9f0615a96ae..b4950b93a3f 100644 --- a/spec/controllers/groups/runners_controller_spec.rb +++ b/spec/controllers/groups/runners_controller_spec.rb @@ -190,7 +190,7 @@ RSpec.describe Groups::RunnersController do end it 'destroys the runner and redirects' do - expect_next_instance_of(Ci::UnregisterRunnerService, runner) do |service| + expect_next_instance_of(Ci::Runners::UnregisterRunnerService, runner, user) do |service| expect(service).to receive(:execute).once.and_call_original end @@ -208,21 +208,39 @@ RSpec.describe Groups::RunnersController do end end - context 'when user is an owner and runner in multiple projects' do - let(:project_2) { create(:project, group: group) } + context 'with runner associated with multiple projects' do + let_it_be(: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) + context 'when user is an admin', :enable_admin_mode do + let(:user) { create(:user, :admin) } + + before do + sign_in(user) + end + + it 'destroys the project runner and redirects' do + delete :destroy, params: params_runner_project_2 + + expect(response).to have_gitlab_http_status(:found) + expect(Ci::Runner.find_by(id: runner_project_2.id)).to be_nil + end end - it 'does not destroy the project runner' do - delete :destroy, params: params_runner_project_2 + context 'when user is an owner' do + 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 + expect(response).to have_gitlab_http_status(:found) + expect(flash[:alert]).to eq('Runner cannot be deleted, please contact your administrator.') + expect(Ci::Runner.find_by(id: runner_project_2.id)).to be_present + end end end |