Commit 3726dc4b by Grzegorz Bizon

Check if project exists before creating deployment

parent 4e934259
Pipeline #4604462 passed with stages
in 61 minutes 1 second
......@@ -2,6 +2,8 @@ require_relative 'base_service'
class CreateDeploymentService < BaseService
def execute(deployable = nil)
return unless executable?
ActiveRecord::Base.transaction do
@deployable = deployable
@environment = prepare_environment
......@@ -14,6 +16,10 @@ class CreateDeploymentService < BaseService
private
def executable?
project && name.present?
end
def deploy
project.deployments.create(
environment: @environment,
......
......@@ -4,8 +4,6 @@ class BuildSuccessWorker
def perform(build_id)
Ci::Build.find_by(id: build_id).try do |build|
return unless build.project
create_deployment(build)
end
end
......
......@@ -84,11 +84,22 @@ describe CreateDeploymentService, services: true do
expect(subject).to be_persisted
end
end
context 'when project was removed' do
let(:project) { nil }
it 'does not create deployment or environment' do
expect { subject }.not_to raise_error
expect(Environment.count).to be_zero
expect(Deployment.count).to be_zero
end
end
end
describe 'processing of builds' do
let(:environment) { nil }
shared_examples 'does not create environment and deployment' do
it 'does not create a new environment' do
expect { subject }.not_to change { Environment.count }
......@@ -133,12 +144,12 @@ describe CreateDeploymentService, services: true do
context 'without environment specified' do
let(:build) { create(:ci_build, project: project) }
it_behaves_like 'does not create environment and deployment' do
subject { build.success }
end
end
context 'when environment is specified' do
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, pipeline: pipeline, environment: 'production', options: options) }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment