summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2017-12-16 17:02:26 +0100
committerMatija Čupić <matteeyah@gmail.com>2017-12-16 17:02:26 +0100
commit886fd13fceda053533a382d1652f9fcce475d0e1 (patch)
tree4d1e3dcf4264a0cebda9ed247c643cce11ab1f43
parent63859419b284ff9c4eba0a1f0df6d8d72764fc50 (diff)
downloadgitlab-ce-886fd13fceda053533a382d1652f9fcce475d0e1.tar.gz
Add Worker rerun action to GcpController
-rw-r--r--app/controllers/projects/clusters/gcp_controller.rb11
-rw-r--r--config/routes/project.rb1
-rw-r--r--spec/controllers/projects/clusters/gcp_controller_spec.rb50
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) }