diff options
author | Matija Čupić <matteeyah@gmail.com> | 2017-12-16 17:02:26 +0100 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2017-12-16 17:02:26 +0100 |
commit | 886fd13fceda053533a382d1652f9fcce475d0e1 (patch) | |
tree | 4d1e3dcf4264a0cebda9ed247c643cce11ab1f43 | |
parent | 63859419b284ff9c4eba0a1f0df6d8d72764fc50 (diff) | |
download | gitlab-ce-886fd13fceda053533a382d1652f9fcce475d0e1.tar.gz |
Add Worker rerun action to GcpController
-rw-r--r-- | app/controllers/projects/clusters/gcp_controller.rb | 11 | ||||
-rw-r--r-- | config/routes/project.rb | 1 | ||||
-rw-r--r-- | spec/controllers/projects/clusters/gcp_controller_spec.rb | 50 |
3 files changed, 61 insertions, 1 deletions
diff --git a/app/controllers/projects/clusters/gcp_controller.rb b/app/controllers/projects/clusters/gcp_controller.rb index 34d4fd7d7ca..c965a055fdd 100644 --- a/app/controllers/projects/clusters/gcp_controller.rb +++ b/app/controllers/projects/clusters/gcp_controller.rb @@ -1,7 +1,7 @@ class Projects::Clusters::GcpController < Projects::ApplicationController before_action :authorize_read_cluster! before_action :authorize_google_api, except: [:login] - before_action :authorize_google_project_billing, except: [:login, :check] + before_action :authorize_google_project_billing, except: [:login, :check, :run_check] before_action :authorize_create_cluster!, only: [:new, :create] STATUS_POLLING_INTERVAL = 1.minute.to_i @@ -32,6 +32,15 @@ class Projects::Clusters::GcpController < Projects::ApplicationController end end + def run_check + respond_to do |format| + format.json do + CheckGcpProjectBillingWorker.perform_async(token_in_session) + head :no_content + end + end + end + def new @cluster = ::Clusters::Cluster.new.tap do |cluster| cluster.build_provider_gcp diff --git a/config/routes/project.rb b/config/routes/project.rb index 9fbd0476bb8..d1e8c0ee267 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -192,6 +192,7 @@ constraints(ProjectUrlConstrainer.new) do get '/gcp/new', to: 'clusters/gcp#new' get '/gcp/login', to: 'clusters/gcp#login' get '/gcp/check', to: 'clusters/gcp#check' + post '/gcp/check', to: 'clusters/gcp#run_check' 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 852f3efe793..4fa798c5856 100644 --- a/spec/controllers/projects/clusters/gcp_controller_spec.rb +++ b/spec/controllers/projects/clusters/gcp_controller_spec.rb @@ -138,6 +138,56 @@ describe Projects::Clusters::GcpController do end end + describe 'POST check' do + let(:user) { create(:user) } + + before do + project.add_master(user) + sign_in(user) + end + + describe 'functionality' do + context 'when access token is valid' do + before do + stub_google_api_validate_token + end + + it 'calls check worker asynchronously' do + expect(CheckGcpProjectBillingWorker).to receive(:perform_async) + + expect(go).to have_http_status(:no_content) + end + end + + context 'when access token is expired' do + before do + stub_google_api_expired_token + end + + it { expect(go).to redirect_to(gcp_login_project_clusters_path(project)) } + end + + context 'when access token is not stored in session' do + it { expect(go).to redirect_to(gcp_login_project_clusters_path(project)) } + end + end + + describe 'security' do + it { expect { go }.to be_allowed_for(:admin) } + it { expect { go }.to be_allowed_for(:owner).of(project) } + it { expect { go }.to be_allowed_for(:master).of(project) } + it { expect { go }.to be_denied_for(:developer).of(project) } + it { expect { go }.to be_denied_for(:reporter).of(project) } + it { expect { go }.to be_denied_for(:guest).of(project) } + it { expect { go }.to be_denied_for(:user) } + it { expect { go }.to be_denied_for(:external) } + end + + def go + post :run_check, namespace_id: project.namespace, project_id: project, format: :json + end + end + describe 'GET new' do describe 'functionality' do let(:user) { create(:user) } |