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/services/deployments/create_for_build_service_spec.rb')
-rw-r--r--spec/services/deployments/create_for_build_service_spec.rb87
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