Commit ff3eeffa authored by Alejandro Rodríguez's avatar Alejandro Rodríguez

Implement /internal/pre-receive for shell operations

parent 8323e55b
...@@ -143,6 +143,14 @@ module API ...@@ -143,6 +143,14 @@ module API
{ success: true, recovery_codes: codes } { success: true, recovery_codes: codes }
end end
post '/pre_receive' do
status 200
reference_counter_increased = Gitlab::ReferenceCounter.new(params[:gl_repository]).increase
{ reference_counter_increased: reference_counter_increased }
end
post "/notify_post_receive" do post "/notify_post_receive" do
status 200 status 200
......
...@@ -5,6 +5,8 @@ describe API::Internal do ...@@ -5,6 +5,8 @@ describe API::Internal do
let(:key) { create(:key, user: user) } let(:key) { create(:key, user: user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let(:secret_token) { Gitlab::Shell.secret_token } let(:secret_token) { Gitlab::Shell.secret_token }
let(:gl_repository) { "project-#{project.id}" }
let(:reference_counter) { double('ReferenceCounter') }
describe "GET /internal/check" do describe "GET /internal/check" do
it do it do
...@@ -672,9 +674,7 @@ describe API::Internal do ...@@ -672,9 +674,7 @@ describe API::Internal do
# end # end
describe 'POST /internal/post_receive' do describe 'POST /internal/post_receive' do
let(:gl_repository) { "project-#{project.id}" }
let(:identifier) { 'key-123' } let(:identifier) { 'key-123' }
let(:reference_counter) { double('ReferenceCounter') }
let(:valid_params) do let(:valid_params) do
{ {
...@@ -760,6 +760,22 @@ describe API::Internal do ...@@ -760,6 +760,22 @@ describe API::Internal do
end end
end end
describe 'POST /internal/pre_receive' do
let(:valid_params) do
{ gl_repository: gl_repository, secret_token: secret_token }
end
it 'decreases the reference counter and returns the result' do
expect(Gitlab::ReferenceCounter).to receive(:new).with(gl_repository)
.and_return(reference_counter)
expect(reference_counter).to receive(:increase).and_return(true)
post api("/internal/pre_receive"), valid_params
expect(json_response['reference_counter_increased']).to be(true)
end
end
def project_with_repo_path(path) def project_with_repo_path(path)
double().tap do |fake_project| double().tap do |fake_project|
allow(fake_project).to receive_message_chain('repository.path_to_repo' => path) allow(fake_project).to receive_message_chain('repository.path_to_repo' => path)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment