diff options
author | Zeger-Jan van de Weg <zegerjan@gitlab.com> | 2016-02-26 09:55:43 +0100 |
---|---|---|
committer | Zeger-Jan van de Weg <zegerjan@gitlab.com> | 2016-03-19 21:23:03 +0100 |
commit | 212e83bab3f1f9055f1321c3e934b4f4659250bf (patch) | |
tree | f3b67cf54ba43ca7d008c470beadfd12df3cfbb2 /spec | |
parent | 3f22a92f4a561543c2249786b695d0c65120455b (diff) | |
download | gitlab-ce-212e83bab3f1f9055f1321c3e934b4f4659250bf.tar.gz |
Soft delete issuables
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/projects/issues_controller_spec.rb | 28 | ||||
-rw-r--r-- | spec/controllers/projects/merge_requests_controller_spec.rb | 21 | ||||
-rw-r--r-- | spec/models/issue_spec.rb | 5 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 5 | ||||
-rw-r--r-- | spec/requests/api/issues_spec.rb | 13 | ||||
-rw-r--r-- | spec/requests/api/merge_requests_spec.rb | 18 |
6 files changed, 84 insertions, 6 deletions
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb index 2cd81231144..62643a755b7 100644 --- a/spec/controllers/projects/issues_controller_spec.rb +++ b/spec/controllers/projects/issues_controller_spec.rb @@ -1,11 +1,11 @@ require('spec_helper') describe Projects::IssuesController do - describe "GET #index" do - let(:project) { create(:project) } - let(:user) { create(:user) } - let(:issue) { create(:issue, project: project) } + let(:project) { create(:project) } + let(:user) { create(:user) } + let(:issue) { create(:issue, project: project) } + describe "GET #index" do before do sign_in(user) project.team << [user, :developer] @@ -186,4 +186,24 @@ describe Projects::IssuesController do end end end + + describe "DELETE #destroy" do + it "rejects a developer to destory an issue" do + delete :destroy, namespace_id: project.namespace.path, project_id: project.path, id: issue.iid + expect(response.status).to eq 404 + end + + context "user is an admin" do + before do + user.admin = true + user.save + end + + it "lets an admin delete an issue" do + delete :destroy, namespace_id: project.namespace.path, project_id: project.path, id: issue.iid + + expect(response.status).to eq 302 + end + end + end end diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb index e82fe26c7a6..6c1aa8368ea 100644 --- a/spec/controllers/projects/merge_requests_controller_spec.rb +++ b/spec/controllers/projects/merge_requests_controller_spec.rb @@ -157,6 +157,27 @@ describe Projects::MergeRequestsController do end end + describe "DELETE #destroy" do + it "lets mere mortals not acces this endpoint" do + delete :destroy, namespace_id: project.namespace.path, project_id: project.path, id: merge_request.iid + + expect(response.status).to eq 404 + end + + context "user is an admin" do + before do + user.admin = true + user.save + end + + it "lets an admin delete an issue" do + delete :destroy, namespace_id: project.namespace.path, project_id: project.path, id: merge_request.iid + + expect(response.status).to be 302 + end + end + end + describe 'GET diffs' do def go(format: 'html') get :diffs, diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 540a62eb1f8..5107e9a5030 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -37,6 +37,11 @@ describe Issue, models: true do subject { create(:issue) } + describe "act_as_paranoid" do + it { is_expected.to have_db_column(:deleted_at) } + it { is_expected.to have_db_index(:deleted_at) } + end + describe '#to_reference' do it 'returns a String reference to the object' do expect(subject.to_reference).to eq "##{subject.iid}" diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index f2f07e4ee17..bd0a4ebe337 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -49,6 +49,11 @@ describe MergeRequest, models: true do it { is_expected.to include_module(Taskable) } end + describe "act_as_paranoid" do + it { is_expected.to have_db_column(:deleted_at) } + it { is_expected.to have_db_index(:deleted_at) } + end + describe 'validation' do it { is_expected.to validate_presence_of(:target_branch) } it { is_expected.to validate_presence_of(:source_branch) } diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index bb2ab058003..7d6ebc9b76e 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -469,9 +469,18 @@ describe API::API, api: true do end describe "DELETE /projects/:id/issues/:issue_id" do - it "should delete a project issue" do + it "should reject non admins form deleting an issue" do delete api("/projects/#{project.id}/issues/#{issue.id}", user) - expect(response.status).to eq(405) + expect(response.status).to eq(403) + end + + it "deletes the issue if an admin requests it" do + user.admin = true + user.save + + delete api("/projects/#{project.id}/issues/#{issue.id}", user) + expect(response.status).to eq(200) + expect(json_response['state']).to eq 'opened' end end end diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index 4fd1df25568..5a0bc4ff076 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -315,6 +315,24 @@ describe API::API, api: true do end end + describe "DELETE /projects/:id/merge_request/:merge_request_id" do + it "rejects non admin users from deletions" do + delete api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user) + + expect(response.status).to eq(403) + end + + it "let's Admins delete a merge request" do + user.admin = true + user.save + + delete api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user) + + expect(response.status).to eq(200) + expect(json_response['id']).to eq merge_request.id + end + end + describe "PUT /projects/:id/merge_requests/:merge_request_id to close MR" do it "should return merge_request" do put api("/projects/#{project.id}/merge_requests/#{merge_request.id}", user), state_event: "close" |