summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorMark Fletcher <mark@gitlab.com>2017-02-21 20:21:31 +0530
committerMark Fletcher <mark@gitlab.com>2017-02-22 17:40:20 +0530
commitd3425933dddf4e849199c06dd3ce00c212d0c6da (patch)
treee285f3bec6463b2c29ba446856438836975d924c /spec
parent459a97d46812fecc59c973bad356935422c7f60e (diff)
downloadgitlab-ce-d3425933dddf4e849199c06dd3ce00c212d0c6da.tar.gz
Add housekeeping endpoint for Projects API
Diffstat (limited to 'spec')
-rw-r--r--spec/requests/api/projects_spec.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 4e90aae9279..2f1181b2e8c 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -1422,4 +1422,53 @@ describe API::Projects, api: true do
end
end
end
+
+ describe 'POST /projects/:id/housekeeping' do
+ let(:housekeeping) { Projects::HousekeepingService.new(project) }
+
+ before do
+ allow(Projects::HousekeepingService).to receive(:new).with(project).and_return(housekeeping)
+ end
+
+ context 'when authenticated as owner' do
+ it 'starts the housekeeping process' do
+ expect(housekeeping).to receive(:execute).once
+
+ post api("/projects/#{project.id}/housekeeping", user)
+
+ expect(response).to have_http_status(201)
+ end
+
+ context 'when housekeeping lease is taken' do
+ it 'returns conflict' do
+ expect(housekeeping).to receive(:execute).once.and_raise(Projects::HousekeepingService::LeaseTaken)
+
+ post api("/projects/#{project.id}/housekeeping", user)
+
+ expect(response).to have_http_status(409)
+ expect(json_response['message']).to match(/Somebody already triggered housekeeping for this project/)
+ end
+ end
+ end
+
+ context 'when authenticated as developer' do
+ before do
+ project_member2
+ end
+
+ it 'returns forbidden error' do
+ post api("/projects/#{project.id}/housekeeping", user3)
+
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ context 'when unauthenticated' do
+ it 'returns authentication error' do
+ post api("/projects/#{project.id}/housekeeping")
+
+ expect(response).to have_http_status(401)
+ end
+ end
+ end
end