diff options
author | Tiago Botelho <tiagonbotelho@hotmail.com> | 2018-03-27 16:33:29 +0100 |
---|---|---|
committer | Tiago Botelho <tiagonbotelho@hotmail.com> | 2018-03-27 18:13:58 +0100 |
commit | 00d31b6e70e8dba31d78461f3fa3ebd918e7320e (patch) | |
tree | 7a9ad3f25d1cdb1bc4c1067ea6f2e86f1707a711 | |
parent | bf4a3af06ac4cb7f321267bf395022420e0c14a2 (diff) | |
download | gitlab-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.rb | 1 | ||||
-rw-r--r-- | app/services/projects/create_service.rb | 4 | ||||
-rw-r--r-- | spec/models/service_spec.rb | 15 | ||||
-rw-r--r-- | spec/services/projects/create_service_spec.rb | 15 |
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 |