Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/controllers/groups')
-rw-r--r--spec/controllers/groups/clusters_controller_spec.rb44
-rw-r--r--spec/controllers/groups/dependency_proxy_for_containers_controller_spec.rb22
-rw-r--r--spec/controllers/groups/group_members_controller_spec.rb118
-rw-r--r--spec/controllers/groups/releases_controller_spec.rb34
-rw-r--r--spec/controllers/groups/runners_controller_spec.rb38
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