diff options
author | Robert Schilling <rschilling@student.tugraz.at> | 2017-02-06 16:39:22 +0300 |
---|---|---|
committer | Robert Schilling <rschilling@student.tugraz.at> | 2017-02-07 16:14:15 +0300 |
commit | 67f5522d2ebbb9c34b8b3f14a63d4a5bab982036 (patch) | |
tree | a2bca6313b4fedbfa4f7e3c09988f94c4bf93f7e /spec | |
parent | f97d7769e0c70b0d4cda376d03939e2aa78d2c0e (diff) |
Remove /projects/:id/keys/.. endpoints
Diffstat (limited to 'spec')
-rw-r--r-- | spec/requests/api/v3/deploy_keys_spec.rb | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/spec/requests/api/v3/deploy_keys_spec.rb b/spec/requests/api/v3/deploy_keys_spec.rb new file mode 100644 index 00000000000..f5bdf408c5e --- /dev/null +++ b/spec/requests/api/v3/deploy_keys_spec.rb @@ -0,0 +1,172 @@ +require 'spec_helper' + +describe API::V3::DeployKeys, api: true do + include ApiHelpers + + let(:user) { create(:user) } + let(:admin) { create(:admin) } + let(:project) { create(:empty_project, creator_id: user.id) } + let(:project2) { create(:empty_project, creator_id: user.id) } + let(:deploy_key) { create(:deploy_key, public: true) } + + let!(:deploy_keys_project) do + create(:deploy_keys_project, project: project, deploy_key: deploy_key) + end + + describe 'GET /deploy_keys' do + context 'when unauthenticated' do + it 'should return authentication error' do + get v3_api('/deploy_keys') + + expect(response.status).to eq(401) + end + end + + context 'when authenticated as non-admin user' do + it 'should return a 403 error' do + get v3_api('/deploy_keys', user) + + expect(response.status).to eq(403) + end + end + + context 'when authenticated as admin' do + it 'should return all deploy keys' do + get v3_api('/deploy_keys', admin) + + expect(response.status).to eq(200) + expect(json_response).to be_an Array + expect(json_response.first['id']).to eq(deploy_keys_project.deploy_key.id) + end + end + end + + %w(deploy_keys keys).each do |path| + describe "GET /projects/:id/#{path}" do + before { deploy_key } + + it 'should return array of ssh keys' do + get v3_api("/projects/#{project.id}/#{path}", admin) + + expect(response).to have_http_status(200) + expect(json_response).to be_an Array + expect(json_response.first['title']).to eq(deploy_key.title) + end + end + + describe "GET /projects/:id/#{path}/:key_id" do + it 'should return a single key' do + get v3_api("/projects/#{project.id}/#{path}/#{deploy_key.id}", admin) + + expect(response).to have_http_status(200) + expect(json_response['title']).to eq(deploy_key.title) + end + + it 'should return 404 Not Found with invalid ID' do + get v3_api("/projects/#{project.id}/#{path}/404", admin) + + expect(response).to have_http_status(404) + end + end + + describe "POST /projects/:id/deploy_keys" do + it 'should not create an invalid ssh key' do + post v3_api("/projects/#{project.id}/#{path}", admin), { title: 'invalid key' } + + expect(response).to have_http_status(400) + expect(json_response['error']).to eq('key is missing') + end + + it 'should not create a key without title' do + post v3_api("/projects/#{project.id}/#{path}", admin), key: 'some key' + + expect(response).to have_http_status(400) + expect(json_response['error']).to eq('title is missing') + end + + it 'should create new ssh key' do + key_attrs = attributes_for :another_key + + expect do + post v3_api("/projects/#{project.id}/#{path}", admin), key_attrs + end.to change{ project.deploy_keys.count }.by(1) + end + + it 'returns an existing ssh key when attempting to add a duplicate' do + expect do + post v3_api("/projects/#{project.id}/#{path}", admin), { key: deploy_key.key, title: deploy_key.title } + end.not_to change { project.deploy_keys.count } + + expect(response).to have_http_status(201) + end + + it 'joins an existing ssh key to a new project' do + expect do + post v3_api("/projects/#{project2.id}/#{path}", admin), { key: deploy_key.key, title: deploy_key.title } + end.to change { project2.deploy_keys.count }.by(1) + + expect(response).to have_http_status(201) + end + end + + describe "DELETE /projects/:id/#{path}/:key_id" do + before { deploy_key } + + it 'should delete existing key' do + expect do + delete v3_api("/projects/#{project.id}/#{path}/#{deploy_key.id}", admin) + end.to change{ project.deploy_keys.count }.by(-1) + end + + it 'should return 404 Not Found with invalid ID' do + delete v3_api("/projects/#{project.id}/#{path}/404", admin) + + expect(response).to have_http_status(404) + end + end + + describe "POST /projects/:id/#{path}/:key_id/enable" do + let(:project2) { create(:empty_project) } + + context 'when the user can admin the project' do + it 'enables the key' do + expect do + post v3_api("/projects/#{project2.id}/#{path}/#{deploy_key.id}/enable", admin) + end.to change { project2.deploy_keys.count }.from(0).to(1) + + expect(response).to have_http_status(201) + expect(json_response['id']).to eq(deploy_key.id) + end + end + + context 'when authenticated as non-admin user' do + it 'should return a 404 error' do + post v3_api("/projects/#{project2.id}/#{path}/#{deploy_key.id}/enable", user) + + expect(response).to have_http_status(404) + end + end + end + + describe "DELETE /projects/:id/deploy_keys/:key_id/disable" do + context 'when the user can admin the project' do + it 'disables the key' do + expect do + delete v3_api("/projects/#{project.id}/#{path}/#{deploy_key.id}/disable", admin) + end.to change { project.deploy_keys.count }.from(1).to(0) + + expect(response).to have_http_status(200) + expect(json_response['id']).to eq(deploy_key.id) + end + end + + context 'when authenticated as non-admin user' do + it 'should return a 404 error' do + delete v3_api("/projects/#{project.id}/#{path}/#{deploy_key.id}/disable", user) + + expect(response).to have_http_status(404) + end + end + end + end +end |