summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Botelho <tiagonbotelho@hotmail.com>2018-03-27 16:33:29 +0100
committerTiago Botelho <tiagonbotelho@hotmail.com>2018-03-27 18:13:58 +0100
commit00d31b6e70e8dba31d78461f3fa3ebd918e7320e (patch)
tree7a9ad3f25d1cdb1bc4c1067ea6f2e86f1707a711
parentbf4a3af06ac4cb7f321267bf395022420e0c14a2 (diff)
downloadgitlab-ce-44392-resolve-projects-creation-silently-failing-on-after-create-error.tar.gz
When a Service templates are invalid newly created projects will have them inactive44392-resolve-projects-creation-silently-failing-on-after-create-error
-rw-r--r--app/models/service.rb1
-rw-r--r--app/services/projects/create_service.rb4
-rw-r--r--spec/models/service_spec.rb15
-rw-r--r--spec/services/projects/create_service_spec.rb15
4 files changed, 27 insertions, 8 deletions
diff --git a/app/models/service.rb b/app/models/service.rb
index 1dcb79157a2..7424cef0fc0 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -273,6 +273,7 @@ class Service < ActiveRecord::Base
def self.build_from_template(project_id, template)
service = template.dup
+ service.active = false unless service.valid?
service.template = false
service.project_id = project_id
service
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb
index ac0b5515d55..efbe3f1be43 100644
--- a/app/services/projects/create_service.rb
+++ b/app/services/projects/create_service.rb
@@ -133,8 +133,10 @@ module Projects
def fail(error:)
message = "Unable to save project. Error: #{error}"
+ log_message = message
- Rails.logger.error(message)
+ log_message << "Project ID: #{@project.id}" if @project&.id
+ Rails.logger.error(log_message)
if @project
@project.errors.add(:base, message)
diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb
index 79f25dc4360..83ed3b203e6 100644
--- a/spec/models/service_spec.rb
+++ b/spec/models/service_spec.rb
@@ -58,6 +58,21 @@ describe Service do
end
describe "Template" do
+ describe '.build_from_template' do
+ context 'when template is invalid' do
+ it 'sets service template to inactive when template is invalid' do
+ project = create(:project)
+ template = JiraService.new(template: true, active: true)
+ template.save(validate: false)
+
+ service = described_class.build_from_template(project.id, template)
+
+ expect(service).to be_valid
+ expect(service.active).to be false
+ end
+ end
+ end
+
describe "for pushover service" do
let!(:service_template) do
PushoverService.create(
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index fbaa4f7aebc..3a9e0ace517 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -71,14 +71,14 @@ describe Projects::CreateService, '#execute' do
expect(create_project(user, opts)).to eq(nil)
end
- it 'handles invalid service' do
+ it 'sets invalid service as inactive' do
create(:service, type: 'JiraService', project: nil, template: true, active: true)
project = create_project(user, opts)
+ service = project.services.first
- expect(project).not_to be_persisted
- expect(project.errors.full_messages_for(:base).first).to match(/Unable to save project. Error: Unable to save JiraService/)
- expect(project.services.count).to eq 0
+ expect(project).to be_persisted
+ expect(service.active).to be false
end
end
@@ -242,14 +242,15 @@ describe Projects::CreateService, '#execute' do
end
context 'when a bad service template is created' do
- it 'reports an error in the imported project' do
+ it 'sets service to be inactive' do
opts[:import_url] = 'http://www.gitlab.com/gitlab-org/gitlab-ce'
create(:service, type: 'DroneCiService', project: nil, template: true, active: true)
project = create_project(user, opts)
+ service = project.services.first
- expect(project.errors.full_messages_for(:base).first).to match(/Unable to save project. Error: Unable to save DroneCiService/)
- expect(project.services.count).to eq 0
+ expect(project).to be_persisted
+ expect(service.active).to be false
end
end