diff options
Diffstat (limited to 'spec/services/deployments/create_for_build_service_spec.rb')
-rw-r--r-- | spec/services/deployments/create_for_build_service_spec.rb | 87 |
1 files changed, 86 insertions, 1 deletions
diff --git a/spec/services/deployments/create_for_build_service_spec.rb b/spec/services/deployments/create_for_build_service_spec.rb index a2e1acadcc1..3748df87d99 100644 --- a/spec/services/deployments/create_for_build_service_spec.rb +++ b/spec/services/deployments/create_for_build_service_spec.rb @@ -30,7 +30,9 @@ RSpec.describe Deployments::CreateForBuildService do context 'when creation failure occures' do before do - allow(build).to receive(:create_deployment!) { raise ActiveRecord::RecordInvalid } + allow_next_instance_of(Deployment) do |deployment| + allow(deployment).to receive(:save!) { raise ActiveRecord::RecordInvalid } + end end it 'trackes the exception' do @@ -79,5 +81,88 @@ RSpec.describe Deployments::CreateForBuildService do expect { subject }.not_to change { Deployment.count } end end + + context 'when build has environment attribute' do + let!(:build) do + create(:ci_build, environment: 'production', project: project, + options: { environment: { name: 'production', **kubernetes_options } }) + end + + let!(:environment) { create(:environment, project: project, name: build.expanded_environment_name) } + + let(:kubernetes_options) { {} } + + it 'returns a deployment object with environment' do + expect(subject).to be_a(Deployment) + expect(subject.iid).to be_present + expect(subject.environment.name).to eq('production') + expect(subject.cluster).to be_nil + expect(subject.deployment_cluster).to be_nil + end + + context 'when environment has deployment platform' do + let!(:cluster) { create(:cluster, :provided_by_gcp, projects: [project], managed: managed_cluster) } + let(:managed_cluster) { true } + + it 'sets the cluster and deployment_cluster' do + expect(subject.cluster).to eq(cluster) # until we stop double writing in 12.9: https://gitlab.com/gitlab-org/gitlab/issues/202628 + expect(subject.deployment_cluster.cluster).to eq(cluster) + end + + context 'when a custom namespace is given' do + let(:kubernetes_options) { { kubernetes: { namespace: 'the-custom-namespace' } } } + + context 'when cluster is managed' do + it 'does not set the custom namespace' do + expect(subject.deployment_cluster.kubernetes_namespace).not_to eq('the-custom-namespace') + end + end + + context 'when cluster is not managed' do + let(:managed_cluster) { false } + + it 'sets the custom namespace' do + expect(subject.deployment_cluster.kubernetes_namespace).to eq('the-custom-namespace') + end + end + end + end + + context 'when build already has deployment' do + let!(:build) { create(:ci_build, :with_deployment, project: project, environment: 'production') } + let!(:environment) {} + + it 'returns the persisted deployment' do + expect { subject }.not_to change { Deployment.count } + + is_expected.to eq(build.deployment) + end + end + end + + context 'when build does not start environment' do + where(:action) do + %w[stop prepare verify access] + end + + with_them do + let!(:build) do + create(:ci_build, environment: 'production', project: project, + options: { environment: { name: 'production', action: action } }) + end + + it 'returns nothing' do + is_expected.to be_nil + end + end + end + + context 'when build does not have environment attribute' do + let!(:build) { create(:ci_build, project: project) } + + it 'returns nothing' do + is_expected.to be_nil + end + end end end |