Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/requests/projects/google_cloud/deployments_controller_spec.rb')
-rw-r--r--spec/requests/projects/google_cloud/deployments_controller_spec.rb58
1 files changed, 51 insertions, 7 deletions
diff --git a/spec/requests/projects/google_cloud/deployments_controller_spec.rb b/spec/requests/projects/google_cloud/deployments_controller_spec.rb
index a5eccc43147..fd356bc61c7 100644
--- a/spec/requests/projects/google_cloud/deployments_controller_spec.rb
+++ b/spec/requests/projects/google_cloud/deployments_controller_spec.rb
@@ -3,7 +3,8 @@
require 'spec_helper'
RSpec.describe Projects::GoogleCloud::DeploymentsController do
- let_it_be(:project) { create(:project, :public) }
+ let_it_be(:project) { create(:project, :public, :repository) }
+ let_it_be(:repository) { project.repository }
let_it_be(:user_guest) { create(:user) }
let_it_be(:user_developer) { create(:user) }
@@ -36,8 +37,6 @@ RSpec.describe Projects::GoogleCloud::DeploymentsController do
it 'returns not found on GET request' do
urls_list.each do |url|
unauthorized_members.each do |unauthorized_member|
- sign_in(unauthorized_member)
-
get url
expect(response).to have_gitlab_http_status(:not_found)
@@ -65,18 +64,63 @@ RSpec.describe Projects::GoogleCloud::DeploymentsController do
let_it_be(:url) { "#{project_google_cloud_deployments_cloud_run_path(project)}" }
before do
+ sign_in(user_maintainer)
+
allow_next_instance_of(GoogleApi::CloudPlatform::Client) do |client|
allow(client).to receive(:validate_token).and_return(true)
end
end
- it 'renders placeholder' do
- authorized_members.each do |authorized_member|
- sign_in(authorized_member)
+ it 'redirects to google_cloud home on enable service error' do
+ # since GPC_PROJECT_ID is not set, enable cloud run service should return an error
+
+ get url
+
+ expect(response).to redirect_to(project_google_cloud_index_path(project))
+ end
+
+ it 'tracks error and redirects to gcp_error' do
+ mock_google_error = Google::Apis::ClientError.new('some_error')
+
+ allow_next_instance_of(GoogleCloud::EnableCloudRunService) do |service|
+ allow(service).to receive(:execute).and_raise(mock_google_error)
+ end
+
+ expect(Gitlab::ErrorTracking).to receive(:track_exception).with(mock_google_error, { project_id: project.id })
+
+ get url
+
+ expect(response).to render_template(:gcp_error)
+ end
+
+ context 'GCP_PROJECT_IDs are defined' do
+ it 'redirects to google_cloud home on generate pipeline error' do
+ allow_next_instance_of(GoogleCloud::EnableCloudRunService) do |enable_cloud_run_service|
+ allow(enable_cloud_run_service).to receive(:execute).and_return({ status: :success })
+ end
+
+ allow_next_instance_of(GoogleCloud::GeneratePipelineService) do |generate_pipeline_service|
+ allow(generate_pipeline_service).to receive(:execute).and_return({ status: :error })
+ end
get url
- expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to redirect_to(project_google_cloud_index_path(project))
+ end
+
+ it 'redirects to create merge request form' do
+ allow_next_instance_of(GoogleCloud::EnableCloudRunService) do |service|
+ allow(service).to receive(:execute).and_return({ status: :success })
+ end
+
+ allow_next_instance_of(GoogleCloud::GeneratePipelineService) do |service|
+ allow(service).to receive(:execute).and_return({ status: :success })
+ end
+
+ get url
+
+ expect(response).to have_gitlab_http_status(:found)
+ expect(response.location).to include(project_new_merge_request_path(project))
end
end
end