Commit b7d38443 authored by James Fargher's avatar James Fargher

Add bare bones storage move API

Minimum required to add a new API
parent ed9e5f23
---
title: Read only storage move API
merge_request: 31285
author:
type: added
......@@ -180,6 +180,7 @@ module API
mount ::API::ProjectImport
mount ::API::ProjectHooks
mount ::API::ProjectMilestones
mount ::API::ProjectRepositoryStorageMoves
mount ::API::Projects
mount ::API::ProjectSnapshots
mount ::API::ProjectSnippets
......
# frozen_string_literal: true
module API
class ProjectRepositoryStorageMoves < Grape::API
include PaginationParams
before { authenticated_as_admin! }
resource :project_repository_storage_moves do
desc 'Get a list of all project repository storage moves' do
detail 'This feature was introduced in GitLab 13.0.'
success Entities::ProjectRepositoryStorageMove
end
params do
use :pagination
end
get do
storage_moves = ProjectRepositoryStorageMove.all
present paginate(storage_moves), with: Entities::ProjectRepositoryStorageMove, current_user: current_user
end
desc 'Get a project repository storage move' do
detail 'This feature was introduced in GitLab 13.0.'
success Entities::ProjectRepositoryStorageMove
end
get ':id' do
storage_move = ProjectRepositoryStorageMove.find(params[:id])
present storage_move, with: Entities::ProjectRepositoryStorageMove, current_user: current_user
end
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe API::ProjectRepositoryStorageMoves do
let(:user) { create(:admin) }
let!(:storage_move) { create(:project_repository_storage_move, :scheduled) }
describe 'GET /project_repository_storage_moves' do
def get_project_repository_storage_moves
get api('/project_repository_storage_moves', user)
end
it 'returns project repository storage moves' do
get_project_repository_storage_moves
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
expect(json_response.size).to eq(1)
expect(json_response.first['id']).to eq(storage_move.id)
expect(json_response.first['state']).to eq(storage_move.human_state_name)
end
it 'avoids N+1 queries', :request_store do
control = ActiveRecord::QueryRecorder.new { get_project_repository_storage_moves }
create(:project_repository_storage_move, :scheduled)
expect { get_project_repository_storage_moves }.not_to exceed_query_limit(control)
end
end
describe 'GET /project_repository_storage_moves/:id' do
it 'returns a project repository storage move' do
get api("/project_repository_storage_moves/#{storage_move.id}", user)
expect(response).to have_gitlab_http_status(:ok)
expect(json_response).to be_a Hash
expect(json_response['id']).to eq(storage_move.id)
expect(json_response['state']).to eq(storage_move.human_state_name)
end
end
end
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