diff options
author | Alexis Reigel <alexis.reigel.ext@siemens.com> | 2018-06-11 14:58:40 +0200 |
---|---|---|
committer | Alexis Reigel <alexis.reigel.ext@siemens.com> | 2018-09-15 21:39:26 +0200 |
commit | 048b4469e8c46327e3e3e9bbdfd7ef9bd27e047f (patch) | |
tree | c9e1b19daf18bb11a3b9e22928b8a586b758547f | |
parent | 4b6619cfd3ca127d728d7277cac3da8ed54b99b0 (diff) | |
download | gitlab-ce-048b4469e8c46327e3e3e9bbdfd7ef9bd27e047f.tar.gz |
cleanup runners api specs
-rw-r--r-- | spec/requests/api/runners_spec.rb | 148 |
1 files changed, 84 insertions, 64 deletions
diff --git a/spec/requests/api/runners_spec.rb b/spec/requests/api/runners_spec.rb index 3939500d7ca..3a318a0334f 100644 --- a/spec/requests/api/runners_spec.rb +++ b/spec/requests/api/runners_spec.rb @@ -25,30 +25,34 @@ describe API::Runners do describe 'GET /runners' do context 'authorized user' do - it 'returns user available runners' do + it 'returns response status and headers' do get api('/runners', user) - shared = json_response.any? { |r| r['is_shared'] } - descriptions = json_response.map { |runner| runner['description'] } expect(response).to have_gitlab_http_status(200) expect(response).to include_pagination_headers - expect(json_response).to be_an Array - expect(json_response[0]).to have_key('ip_address') - expect(descriptions).to contain_exactly( - 'Project runner', 'Two projects runner', 'Group runner' - ) - expect(shared).to be_falsey + end + + it 'returns user available runners' do + get api('/runners', user) + + expect(json_response).to match_array [ + a_hash_including('description' => 'Project runner'), + a_hash_including('description' => 'Two projects runner'), + a_hash_including('description' => 'Group runner') + ] end it 'filters runners by scope' do - get api('/runners?scope=active', user) + create(:ci_runner, :project, :inactive, description: 'Inactive project runner', projects: [project]) + + get api('/runners?scope=paused', user) - shared = json_response.any? { |r| r['is_shared'] } expect(response).to have_gitlab_http_status(200) expect(response).to include_pagination_headers - expect(json_response).to be_an Array - expect(json_response[0]).to have_key('ip_address') - expect(shared).to be_falsey + + expect(json_response).to match_array [ + a_hash_including('description' => 'Inactive project runner') + ] end it 'avoids filtering if scope is invalid' do @@ -84,66 +88,75 @@ describe API::Runners do describe 'GET /runners/all' do context 'authorized user' do context 'with admin privileges' do + it 'returns response status and headers' do + get api('/runners/all', admin) + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + end + it 'returns all runners' do get api('/runners/all', admin) - shared = json_response.any? { |r| r['is_shared'] } + expect(json_response).to match_array [ + a_hash_including('description' => 'Project runner'), + a_hash_including('description' => 'Two projects runner'), + a_hash_including('description' => 'Group runner'), + a_hash_including('description' => 'Shared runner') + ] + end + + it 'filters runners by scope' do + get api('/runners/all?scope=shared', admin) + + shared = json_response.all? { |r| r['is_shared'] } expect(response).to have_gitlab_http_status(200) expect(response).to include_pagination_headers expect(json_response).to be_an Array expect(json_response[0]).to have_key('ip_address') expect(shared).to be_truthy end - end - context 'without admin privileges' do - it 'does not return runners list' do - get api('/runners/all', user) - - expect(response).to have_gitlab_http_status(403) - end - end + it 'filters runners by scope' do + get api('/runners/all?scope=specific', admin) - it 'filters runners by scope' do - get api('/runners/all?scope=shared', admin) + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers - shared = json_response.all? { |r| r['is_shared'] } - expect(response).to have_gitlab_http_status(200) - expect(response).to include_pagination_headers - expect(json_response).to be_an Array - expect(json_response[0]).to have_key('ip_address') - expect(shared).to be_truthy - end + expect(json_response).to match_array [ + a_hash_including('description' => 'Project runner'), + a_hash_including('description' => 'Two projects runner'), + a_hash_including('description' => 'Group runner') + ] + end - it 'filters runners by scope' do - get api('/runners/all?scope=specific', admin) + it 'avoids filtering if scope is invalid' do + get api('/runners/all?scope=unknown', admin) + expect(response).to have_gitlab_http_status(400) + end - shared = json_response.any? { |r| r['is_shared'] } - expect(response).to have_gitlab_http_status(200) - expect(response).to include_pagination_headers - expect(json_response).to be_an Array - expect(json_response[0]).to have_key('ip_address') - expect(shared).to be_falsey - end + it 'filters runners by type' do + get api('/runners/all?type=project_type', admin) - it 'avoids filtering if scope is invalid' do - get api('/runners/all?scope=unknown', admin) - expect(response).to have_gitlab_http_status(400) - end + expect(json_response).to match_array [ + a_hash_including('description' => 'Project runner'), + a_hash_including('description' => 'Two projects runner') + ] + end - it 'filters runners by type' do - get api('/runners/all?type=project_type', admin) + it 'does not filter by invalid type' do + get api('/runners/all?type=bogus', admin) - expect(json_response).to match_array [ - a_hash_including('description' => 'Project runner'), - a_hash_including('description' => 'Two projects runner') - ] + expect(response).to have_gitlab_http_status(400) + end end - it 'does not filter by invalid type' do - get api('/runners/all?type=bogus', admin) + context 'without admin privileges' do + it 'does not return runners list' do + get api('/runners/all', user) - expect(response).to have_gitlab_http_status(400) + expect(response).to have_gitlab_http_status(403) + end end end @@ -607,26 +620,33 @@ describe API::Runners do describe 'GET /projects/:id/runners' do context 'authorized user with maintainer privileges' do - it "returns project's runners" do - get api("/projects/#{project.id}/runners", user) + it 'returns response status and headers' do + get api('/runners/all', admin) - shared = json_response.any? { |r| r['is_shared'] } expect(response).to have_gitlab_http_status(200) expect(response).to include_pagination_headers - expect(json_response).to be_an Array - expect(json_response[0]).to have_key('ip_address') - expect(shared).to be_truthy + end + + it 'returns all runners' do + get api("/projects/#{project.id}/runners", user) + + expect(json_response).to match_array [ + a_hash_including('description' => 'Project runner'), + a_hash_including('description' => 'Two projects runner'), + a_hash_including('description' => 'Shared runner') + ] end it 'filters runners by scope' do get api("/projects/#{project.id}/runners?scope=specific", user) - shared = json_response.any? { |r| r['is_shared'] } expect(response).to have_gitlab_http_status(200) expect(response).to include_pagination_headers - expect(json_response).to be_an Array - expect(json_response[0]).to have_key('ip_address') - expect(shared).to be_falsey + + expect(json_response).to match_array [ + a_hash_including('description' => 'Project runner'), + a_hash_including('description' => 'Two projects runner') + ] end it 'avoids filtering if scope is invalid' do |