Extract EE specific files/lines for Manage spec/requests/api

We have the following files containing EE specific code. We should move them to ee/

spec/requests/api/groups_spec.rb
diff --git a/spec/requests/api/groups_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/groups_spec.rb
index 7176bc23e34..df120b91ea1 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/groups_spec.rb
@@ -16,6 +16,7 @@ describe API::Groups do
   before do
     group1.add_owner(user1)
     group2.add_owner(user2)
+    group1.ldap_group_links.create cn: 'ldap-group', group_access: Gitlab::Access::MAINTAINER, provider: 'ldap'
   end
 
   describe "GET /groups" do
@@ -57,6 +58,19 @@ describe API::Groups do
         expect(json_response.length).to eq(1)
         expect(json_response)
           .to satisfy_one { |group| group['name'] == group1.name }
+
+        expect(json_response)
+          .to satisfy_one { |group| group['ldap_cn'] == group1.ldap_cn }
+        expect(json_response)
+          .to satisfy_one { |group| group['ldap_access'] == group1.ldap_access }
+
+        expect(json_response).to satisfy_one do |group|
+          ldap_group_link = group['ldap_group_links'].first
+
+          ldap_group_link['cn'] == group1.ldap_cn &&
+            ldap_group_link['group_access'] == group1.ldap_access &&
+            ldap_group_link['provider'] == 'ldap'
+        end
       end
 
       it "does not include statistics" do
@@ -452,6 +466,25 @@ describe API::Groups do
 
         expect(response).to have_gitlab_http_status(404)
       end
+
+      # EE
+      it 'returns 403 for updating shared_runners_minutes_limit' do
+        expect do
+          put api("/groups/#{group1.id}", user1), params: { shared_runners_minutes_limit: 133 }
+        end.not_to change { group1.shared_runners_minutes_limit }
+
+        expect(response).to have_gitlab_http_status(403)
+      end
+
+      it 'returns 200 if shared_runners_minutes_limit is not changing' do
+        group1.update(shared_runners_minutes_limit: 133)
+
+        expect do
+          put api("/groups/#{group1.id}", user1), params: { shared_runners_minutes_limit: 133 }
+        end.not_to change { group1.shared_runners_minutes_limit }
+
+        expect(response).to have_gitlab_http_status(200)
+      end
     end
 
     context 'when authenticated as the admin' do
@@ -461,6 +494,17 @@ describe API::Groups do
         expect(response).to have_gitlab_http_status(200)
         expect(json_response['name']).to eq(new_group_name)
       end
+
+      # EE
+      it 'updates the group for shared_runners_minutes_limit' do
+        expect do
+          put api("/groups/#{group1.id}", admin), params: { shared_runners_minutes_limit: 133 }
+        end.to change { group1.reload.shared_runners_minutes_limit }
+          .from(nil).to(133)
+
+        expect(response).to have_gitlab_http_status(200)
+        expect(json_response['shared_runners_minutes_limit']).to eq(133)
+      end
     end
 
     context 'when authenticated as an user that can see the group' do
@@ -855,6 +899,42 @@ describe API::Groups do
 
         expect(response).to have_gitlab_http_status(400)
       end
+
+      it "creates an ldap_group_link if ldap_cn and ldap_access are supplied" do
+        group_attributes = attributes_for(:group, ldap_cn: 'ldap-group', ldap_access: Gitlab::Access::DEVELOPER)
+        expect { post api("/groups", admin), params: group_attributes }.to change { LdapGroupLink.count }.by(1)
+      end
+
+      # EE
+      context 'when shared_runners_minutes_limit is given' do
+        context 'when the current user is not an admin' do
+          it "does not create a group with shared_runners_minutes_limit" do
+            group = attributes_for(:group, { shared_runners_minutes_limit: 133 })
+
+            expect do
+              post api("/groups", user3), params: group
+            end.not_to change { Group.count }
+
+            expect(response).to have_gitlab_http_status(403)
+          end
+        end
+
+        context 'when the current user is an admin' do
+          it "creates a group with shared_runners_minutes_limit" do
+            group = attributes_for(:group, { shared_runners_minutes_limit: 133 })
+
+            expect do
+              post api("/groups", admin), params: group
+            end.to change { Group.count }.by(1)
+
+            created_group = Group.find(json_response['id'])
+
+            expect(created_group.shared_runners_minutes_limit).to eq(133)
+            expect(response).to have_gitlab_http_status(201)
+            expect(json_response['shared_runners_minutes_limit']).to eq(133)
+          end
+        end
+      end
     end
   end
 
@@ -981,4 +1061,100 @@ describe API::Groups do
       group2.add_owner(user1)
     end
   end
+
+  describe 'POST /groups/:id/ldap_sync' do
+    before do
+      allow(Gitlab::Auth::LDAP::Config).to receive(:enabled?).and_return(true)
+    end
+
+    context 'when the ldap_group_sync feature is available' do
+      before do
+        stub_licensed_features(ldap_group_sync: true)
+      end
+
+      context 'when authenticated as the group owner' do
+        context 'when the group is ready to sync' do
+          it 'returns 202 Accepted' do
+            ldap_sync(group1.id, user1, :disable!)
+            expect(response).to have_gitlab_http_status(202)
+          end
+
+          it 'queues a sync job' do
+            expect { ldap_sync(group1.id, user1, :fake!) }.to change(LdapGroupSyncWorker.jobs, :size).by(1)
+          end
+
+          it 'sets the ldap_sync state to pending' do
+            ldap_sync(group1.id, user1, :disable!)
+            expect(group1.reload.ldap_sync_pending?).to be_truthy
+          end
+        end
+
+        context 'when the group is already pending a sync' do
+          before do
+            group1.pending_ldap_sync!
+          end
+
+          it 'returns 202 Accepted' do
+            ldap_sync(group1.id, user1, :disable!)
+            expect(response).to have_gitlab_http_status(202)
+          end
+
+          it 'does not queue a sync job' do
+            expect { ldap_sync(group1.id, user1, :fake!) }.not_to change(LdapGroupSyncWorker.jobs, :size)
+          end
+
+          it 'does not change the ldap_sync state' do
+            expect do
+              ldap_sync(group1.id, user1, :disable!)
+            end.not_to change { group1.reload.ldap_sync_status }
+          end
+        end
+
+        it 'returns 404 for a non existing group' do
+          ldap_sync(1328, user1, :disable!)
+          expect(response).to have_gitlab_http_status(404)
+        end
+      end
+
+      context 'when authenticated as the admin' do
+        it 'returns 202 Accepted' do
+          ldap_sync(group1.id, admin, :disable!)
+          expect(response).to have_gitlab_http_status(202)
+        end
+      end
+
+      context 'when authenticated as a non-owner user that can see the group' do
+        it 'returns 403' do
+          ldap_sync(group1.id, user2, :disable!)
+          expect(response).to have_gitlab_http_status(403)
+        end
+      end
+
+      context 'when authenticated as an user that cannot see the group' do
+        it 'returns 404' do
+          ldap_sync(group2.id, user1, :disable!)
+
+          expect(response).to have_gitlab_http_status(404)
+        end
+      end
+    end
+
+    context 'when the ldap_group_sync feature is not available' do
+      before do
+        stub_licensed_features(ldap_group_sync: false)
+      end
+
+      it 'returns 404 (same as CE would)' do
+        ldap_sync(group1.id, admin, :disable!)
+
+        expect(response).to have_gitlab_http_status(404)
+      end
+    end
+  end
+
+  def ldap_sync(group_id, user, sidekiq_testing_method)
+    Sidekiq::Testing.send(sidekiq_testing_method) do
+      post api("/groups/#{group_id}/ldap_sync", user)
+    end
+  end
 end
spec/requests/api/members_spec.rb
diff --git a/spec/requests/api/members_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/members_spec.rb
index 79edbb301f2..3e73ea3f7f8 100644
--- a/spec/requests/api/members_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/members_spec.rb
@@ -293,6 +293,23 @@ describe API::Members do
     end
   end
 
+  ## EE specific
+  shared_examples 'POST /projects/:id/members with the project group membership locked' do
+    context 'project in a group' do
+      it 'returns a 405 method not allowed error when group membership lock is enabled' do
+        group_with_membership_locked = create(:group, membership_lock: true)
+        project = create(:project, group: group_with_membership_locked)
+        project.group.add_owner(maintainer)
+
+        post api("/projects/#{project.id}/members", maintainer),
+             params: { user_id: developer.id, access_level: Member::MAINTAINER }
+
+        expect(response.status).to eq 405
+      end
+    end
+  end
+  ## EE specific
+
   shared_examples 'PUT /:source_type/:id/members/:user_id' do |source_type|
     context "with :source_type == #{source_type.pluralize}" do
       it_behaves_like 'a 404 response when source is private' do
@@ -433,6 +450,10 @@ describe API::Members do
     let(:source) { project }
   end
 
+  ## EE specific
+  it_behaves_like 'POST /projects/:id/members with the project group membership locked'
+  ## EE specific
+
   it_behaves_like 'POST /:source_type/:id/members', 'group' do
     let(:source) { group }
   end
spec/requests/api/projects_spec.rb
diff --git a/spec/requests/api/projects_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/projects_spec.rb
index 792abdb2972..ecfb84cd4ab 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/projects_spec.rb
@@ -4,15 +4,6 @@ require 'spec_helper'
 shared_examples 'languages and percentages JSON response' do
   let(:expected_languages) { project.repository.languages.map { |language| language.values_at(:label, :value)}.to_h }
 
-  before do
-    allow(project.repository).to receive(:languages).and_return(
-      [{ value: 66.69, label: "Ruby", color: "#701516", highlight: "#701516" },
-       { value: 22.98, label: "JavaScript", color: "#f1e05a", highlight: "#f1e05a" },
-       { value: 7.91, label: "HTML", color: "#e34c26", highlight: "#e34c26" },
-       { value: 2.42, label: "CoffeeScript", color: "#244776", highlight: "#244776" }]
-    )
-  end
-
   it 'returns expected language values' do
     get api("/projects/#{project.id}/languages", user)
 
@@ -20,23 +11,6 @@ shared_examples 'languages and percentages JSON response' do
     expect(json_response).to eq(expected_languages)
     expect(json_response.count).to be > 1
   end
-
-  context 'when the languages were detected before' do
-    before do
-      Projects::DetectRepositoryLanguagesService.new(project, project.owner).execute
-    end
-
-    it 'returns the detection from the database' do
-      # Allow this to happen once, so the expected languages can be determined
-      expect(project.repository).to receive(:languages).once
-
-      get api("/projects/#{project.id}/languages", user)
-
-      expect(response).to have_gitlab_http_status(:ok)
-      expect(json_response).to eq(expected_languages)
-      expect(json_response.count).to be > 1
-    end
-  end
 end
 
 describe API::Projects do
@@ -981,7 +955,56 @@ describe API::Projects do
       end
     end
 
-    context 'when authenticated' do
+    context 'when authenticated as an admin' do
+      it 'returns a project by id including repository_storage' do
+        project
+        project_member
+        group = create(:group)
+        link = create(:project_group_link, project: project, group: group)
+
+        get api("/projects/#{project.id}", admin)
+
+        expect(response).to have_gitlab_http_status(200)
+        expect(json_response['id']).to eq(project.id)
+        expect(json_response['description']).to eq(project.description)
+        expect(json_response['default_branch']).to eq(project.default_branch)
+        expect(json_response['tag_list']).to be_an Array
+        expect(json_response['archived']).to be_falsey
+        expect(json_response['visibility']).to be_present
+        expect(json_response['ssh_url_to_repo']).to be_present
+        expect(json_response['http_url_to_repo']).to be_present
+        expect(json_response['web_url']).to be_present
+        expect(json_response['owner']).to be_a Hash
+        expect(json_response['owner']).to be_a Hash
+        expect(json_response['name']).to eq(project.name)
+        expect(json_response['path']).to be_present
+        expect(json_response['issues_enabled']).to be_present
+        expect(json_response['merge_requests_enabled']).to be_present
+        expect(json_response['wiki_enabled']).to be_present
+        expect(json_response['jobs_enabled']).to be_present
+        expect(json_response['snippets_enabled']).to be_present
+        expect(json_response['container_registry_enabled']).to be_present
+        expect(json_response['created_at']).to be_present
+        expect(json_response['last_activity_at']).to be_present
+        expect(json_response['shared_runners_enabled']).to be_present
+        expect(json_response['creator_id']).to be_present
+        expect(json_response['namespace']).to be_present
+        expect(json_response['avatar_url']).to be_nil
+        expect(json_response['star_count']).to be_present
+        expect(json_response['forks_count']).to be_present
+        expect(json_response['public_jobs']).to be_present
+        expect(json_response['shared_with_groups']).to be_an Array
+        expect(json_response['shared_with_groups'].length).to eq(1)
+        expect(json_response['shared_with_groups'][0]['group_id']).to eq(group.id)
+        expect(json_response['shared_with_groups'][0]['group_name']).to eq(group.name)
+        expect(json_response['shared_with_groups'][0]['group_access_level']).to eq(link.group_access)
+        expect(json_response['only_allow_merge_if_pipeline_succeeds']).to eq(project.only_allow_merge_if_pipeline_succeeds)
+        expect(json_response['only_allow_merge_if_all_discussions_are_resolved']).to eq(project.only_allow_merge_if_all_discussions_are_resolved)
+        expect(json_response['repository_storage']).to eq(project.repository_storage)
+      end
+    end
+
+    context 'when authenticated as a regular user' do
       before do
         project
         project_member
@@ -1037,6 +1060,7 @@ describe API::Projects do
         expect(json_response['only_allow_merge_if_all_discussions_are_resolved']).to eq(project.only_allow_merge_if_all_discussions_are_resolved)
         expect(json_response['merge_method']).to eq(project.merge_method.to_s)
         expect(json_response['readme_url']).to eq(project.readme_url)
+        expect(json_response).not_to have_key('repository_storage')
       end
 
       it 'returns a group link with expiration date' do
@@ -1577,6 +1601,13 @@ describe API::Projects do
         expect(project.project_group_links).to be_empty
       end
 
+      it 'returns 204 when deleting a group share' do
+        delete api("/projects/#{project.id}/share/#{group.id}", user)
+
+        expect(response).to have_gitlab_http_status(204)
+        expect(project.project_group_links).to be_empty
+      end
+
       it_behaves_like '412 response' do
         let(:request) { api("/projects/#{project.id}/share/#{group.id}", user) }
       end
@@ -1690,6 +1721,15 @@ describe API::Projects do
         expect(json_response['request_access_enabled']).to eq(false)
       end
 
+      it 'updates approvals_before_merge' do
+        project_param = { approvals_before_merge: 3 }
+
+        put api("/projects/#{project.id}", user), params: project_param
+
+        expect(response).to have_gitlab_http_status(200)
+        expect(json_response['approvals_before_merge']).to eq(3)
+      end
+
       it 'updates path & name to existing path & name in different namespace' do
         project_param = { path: project4.path, name: project4.name }
spec/requests/api/services_spec.rb
diff --git a/spec/requests/api/services_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/services_spec.rb
index e260aa21e25..7f25e8dbd0a 100644
--- a/spec/requests/api/services_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/services_spec.rb
@@ -198,4 +198,21 @@ describe API::Services do
       expect(json_response['properties']['username']).to eq('new_username')
     end
   end
+
+  describe 'Slack application Service' do
+    before do
+      project.create_gitlab_slack_application_service
+
+      stub_application_setting(
+        slack_app_verification_token: 'token'
+      )
+    end
+
+    it 'returns status 200' do
+      post api('/slack/trigger'), params: { token: 'token', text: 'help' }
+
+      expect(response).to have_gitlab_http_status(200)
+      expect(json_response['response_type']).to eq("ephemeral")
+    end
+  end
 end
spec/requests/api/settings_spec.rb
diff --git a/spec/requests/api/settings_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/settings_spec.rb
index f33eb5b9e02..3304e75c1bb 100644
--- a/spec/requests/api/settings_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/settings_spec.rb
@@ -13,6 +13,7 @@ describe API::Settings, 'Settings' do
       expect(json_response['default_projects_limit']).to eq(42)
       expect(json_response['password_authentication_enabled_for_web']).to be_truthy
       expect(json_response['repository_storages']).to eq(['default'])
+      expect(json_response['password_authentication_enabled']).to be_truthy
       expect(json_response['plantuml_enabled']).to be_falsey
       expect(json_response['plantuml_url']).to be_nil
       expect(json_response['default_project_visibility']).to be_a String
spec/requests/api/users_spec.rb
diff --git a/spec/requests/api/users_spec.rb b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/users_spec.rb
index b381431306d..1b337f42042 100644
--- a/spec/requests/api/users_spec.rb
+++ b/home/yorickpeterse/Projects/gitlab/gdk-ee/gitlab/spec/requests/api/users_spec.rb
@@ -269,6 +269,17 @@ describe API::Users do
         expect(response).to have_gitlab_http_status(400)
       end
     end
+
+    context "when authenticated and ldap is enabled" do
+      it "returns non-ldap user" do
+        create :omniauth_user, provider: "ldapserver1"
+        get api("/users", user), params: { skip_ldap: "true" }
+        expect(response).to have_gitlab_http_status(200)
+        expect(json_response).to be_an Array
+        username = user.username
+        expect(json_response.first["username"]).to eq username
+      end
+    end
   end
 
   describe "GET /users/:id" do
@@ -613,10 +624,13 @@ describe API::Users do
     end
 
     it "updates user with new password and forces reset on next login" do
+      stub_licensed_features(extended_audit_events: true)
+
       put api("/users/#{user.id}", admin), params: { password: '12345678' }
 
       expect(response).to have_gitlab_http_status(200)
       expect(user.reload.password_expires_at).to be <= Time.now
+      expect(AuditEvent.count).to eq(1)
     end
 
     it "updates user with organization" do
@@ -706,6 +720,17 @@ describe API::Users do
       expect(user.reload.private_profile).to eq(true)
     end
 
+    # EE
+    it "updates shared_runners_minutes_limit" do
+      expect do
+        put api("/users/#{user.id}", admin), params: { shared_runners_minutes_limit: 133 }
+      end.to change { user.reload.shared_runners_minutes_limit }
+        .from(nil).to(133)
+
+      expect(response).to have_gitlab_http_status(200)
+      expect(json_response['shared_runners_minutes_limit']).to eq(133)
+    end
+
     it "does not update admin status" do
       put api("/users/#{admin_user.id}", admin), params: { can_create_group: false }
 
@@ -729,6 +754,14 @@ describe API::Users do
 
         expect(response).to have_gitlab_http_status(403)
       end
+
+      it "cannot update their own shared_runners_minutes_limit" do
+        expect do
+          put api("/users/#{user.id}", user), params: { shared_runners_minutes_limit: 133 }
+        end.not_to change { user.reload.shared_runners_minutes_limit }
+
+        expect(response).to have_gitlab_http_status(403)
+      end
     end
 
     it "returns 404 for non-existing user" do

A lot of files but most of them should be able to just move to EE files.

Assignee Loading
Time tracking Loading