diff options
author | Matija Čupić <matteeyah@gmail.com> | 2018-03-16 18:41:51 +0100 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2018-03-16 18:42:30 +0100 |
commit | e911a0f896c3699c69b27509b1b38d173f96c81a (patch) | |
tree | e9714749d68aa100befdcd896a79ddc5fe20947c | |
parent | 45b3bcc39631729ce573210ef6201c2cc59d7cdb (diff) | |
download | gitlab-ce-38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster.tar.gz |
Expose CloudPlatform::Client#projects_list as GcpController#list_projects38759-fetch-available-parameters-directly-from-gke-when-creating-a-cluster
-rw-r--r-- | app/controllers/projects/clusters/gcp_controller.rb | 9 | ||||
-rw-r--r-- | config/routes/project.rb | 1 | ||||
-rw-r--r-- | spec/controllers/projects/clusters/gcp_controller_spec.rb | 30 |
3 files changed, 39 insertions, 1 deletions
diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 6b0b22f8e73..7dfe819525f 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -1,6 +1,6 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_read_cluster! - before_action :authorize_google_api, except: [:login] + before_action :authorize_google_api, except: [:login, :list_projects] before_action :authorize_google_project_billing, only: [:new, :create] before_action :authorize_create_cluster!, only: [:new, :create] before_action :verify_billing, only: [:create] @@ -35,6 +35,13 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end + def list_projects + projects = GoogleApi::CloudPlatform::Client.new(token_in_session, nil).projects_list + respond_to do |format| + format.json { render status: :ok, json: { projects: projects } } + end + end + private def verify_billing diff --git a/config/routes/project.rb b/config/routes/project.rb index c803737d40b..4cd11fe76e8 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -200,6 +200,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do get '/gcp/new', to: 'clusters/gcp#new' get '/gcp/login', to: 'clusters/gcp#login' + get '/gcp/list_projects', to: 'clusters/gcp#list_projects' post '/gcp', to: 'clusters/gcp#create' end end diff --git a/spec/controllers/projects/clusters/gcp_controller_spec.rb b/spec/controllers/projects/clusters/gcp_controller_spec.rb index e14ba29fa70..98158e081f8 100644 --- a/spec/controllers/projects/clusters/gcp_controller_spec.rb +++ b/spec/controllers/projects/clusters/gcp_controller_spec.rb @@ -199,4 +199,34 @@ describe Projects::Clusters::GcpController do post :create, params.merge(namespace_id: project.namespace, project_id: project) end end + + describe 'GET list_projects' do + describe 'functionality' do + let(:user) { create(:user) } + let(:api_response) { [project_id: 'test-project-1234'] } + + before do + project.add_master(user) + sign_in(user) + + allow_any_instance_of(GoogleApi::CloudPlatform::Client).to receive(:projects_list).and_return(api_response) + end + + it 'calls the Google Cloud Platform projects_list' do + expect_any_instance_of(GoogleApi::CloudPlatform::Client).to receive(:projects_list) + + go + end + + it 'renders the response as json' do + go + + expect(response.body).to eq({ projects: api_response }.to_json) + end + end + + def go + get :list_projects, namespace_id: project.namespace, project_id: project, format: :json + end + end end |