diff options
Diffstat (limited to 'spec/requests/api/deployments_spec.rb')
-rw-r--r-- | spec/requests/api/deployments_spec.rb | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/spec/requests/api/deployments_spec.rb b/spec/requests/api/deployments_spec.rb index 69f7b54c277..24c3ee59c18 100644 --- a/spec/requests/api/deployments_spec.rb +++ b/spec/requests/api/deployments_spec.rb @@ -448,6 +448,90 @@ RSpec.describe API::Deployments do end end + describe 'DELETE /projects/:id/deployments/:deployment_id' do + let(:project) { create(:project, :repository) } + let(:environment) { create(:environment, project: project) } + let(:commits) { project.repository.commits(nil, { limit: 3 }) } + let!(:deploy) do + create( + :deployment, + :success, + project: project, + environment: environment, + deployable: nil, + sha: commits[1].sha + ) + end + + let!(:old_deploy) do + create( + :deployment, + :success, + project: project, + environment: environment, + deployable: nil, + sha: commits[0].sha, + finished_at: 1.year.ago + ) + end + + let!(:running_deploy) do + create( + :deployment, + :running, + project: project, + environment: environment, + deployable: nil, + sha: commits[2].sha + ) + end + + context 'as an maintainer' do + it 'deletes a deployment' do + delete api("/projects/#{project.id}/deployments/#{old_deploy.id}", user) + + expect(response).to have_gitlab_http_status(:no_content) + end + + it 'will not delete a running deployment' do + delete api("/projects/#{project.id}/deployments/#{running_deploy.id}", user) + + expect(response).to have_gitlab_http_status(:bad_request) + expect(response.body).to include("Cannot destroy running deployment") + end + end + + context 'as a developer' do + let(:developer) { create(:user) } + + before do + project.add_developer(developer) + end + + it 'is forbidden' do + delete api("/projects/#{project.id}/deployments/#{deploy.id}", developer) + + expect(response).to have_gitlab_http_status(:forbidden) + end + end + + context 'as non member' do + it 'is not found' do + delete api("/projects/#{project.id}/deployments/#{deploy.id}", non_member) + + expect(response).to have_gitlab_http_status(:not_found) + end + end + + context 'for non-existent deployment' do + it 'is not found' do + delete api("/projects/#{project.id}/deployments/#{non_existing_record_id}", project.first_owner) + + expect(response).to have_gitlab_http_status(:not_found) + end + end + end + describe 'GET /projects/:id/deployments/:deployment_id/merge_requests' do let(:project) { create(:project, :repository) } let!(:deployment) { create(:deployment, :success, project: project) } |