diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-30 18:09:46 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-30 18:09:46 +0000 |
commit | ace0df53d3ed38344b470727d430484d24eeb798 (patch) | |
tree | ec1fc71d793bf3d588df9fe97c4649c87e697e73 /spec/models/environment_spec.rb | |
parent | 56eafa995d0bbda39bc24cd07537286bf36a4dd9 (diff) | |
download | gitlab-ce-ace0df53d3ed38344b470727d430484d24eeb798.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/models/environment_spec.rb')
-rw-r--r-- | spec/models/environment_spec.rb | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb index 27c9e62712c..90884bfd0fb 100644 --- a/spec/models/environment_spec.rb +++ b/spec/models/environment_spec.rb @@ -1421,4 +1421,123 @@ RSpec.describe Environment, :use_clean_rails_memory_store_caching do end end end + + describe '#rollout_status' do + let!(:cluster) { create(:cluster, :project, :provided_by_user, projects: [project]) } + let!(:environment) { create(:environment, project: project) } + let!(:deployment) { create(:deployment, :success, environment: environment, project: project) } + + subject { environment.rollout_status } + + context 'environment does not have a deployment board available' do + before do + allow(environment).to receive(:has_terminals?).and_return(false) + end + + it { is_expected.to be_nil } + end + + context 'cached rollout status is present' do + let(:pods) { %w(pod1 pod2) } + let(:deployments) { %w(deployment1 deployment2) } + + before do + stub_reactive_cache(environment, pods: pods, deployments: deployments) + end + + it 'fetches the rollout status from the deployment platform' do + expect(environment.deployment_platform).to receive(:rollout_status) + .with(environment, pods: pods, deployments: deployments) + .and_return(:mock_rollout_status) + + is_expected.to eq(:mock_rollout_status) + end + end + + context 'cached rollout status is not present yet' do + before do + stub_reactive_cache(environment, nil) + end + + it 'falls back to a loading status' do + expect(::Gitlab::Kubernetes::RolloutStatus).to receive(:loading).and_return(:mock_loading_status) + + is_expected.to eq(:mock_loading_status) + end + end + end + + describe '#ingresses' do + subject { environment.ingresses } + + let(:deployment_platform) { double(:deployment_platform) } + let(:deployment_namespace) { 'production' } + + before do + allow(environment).to receive(:deployment_platform) { deployment_platform } + allow(environment).to receive(:deployment_namespace) { deployment_namespace } + end + + context 'when rollout status is available' do + before do + allow(environment).to receive(:rollout_status_available?) { true } + end + + it 'fetches ingresses from the deployment platform' do + expect(deployment_platform).to receive(:ingresses).with(deployment_namespace) + + subject + end + end + + context 'when rollout status is not available' do + before do + allow(environment).to receive(:rollout_status_available?) { false } + end + + it 'does nothing' do + expect(deployment_platform).not_to receive(:ingresses) + + subject + end + end + end + + describe '#patch_ingress' do + subject { environment.patch_ingress(ingress, data) } + + let(:ingress) { double(:ingress) } + let(:data) { double(:data) } + let(:deployment_platform) { double(:deployment_platform) } + let(:deployment_namespace) { 'production' } + + before do + allow(environment).to receive(:deployment_platform) { deployment_platform } + allow(environment).to receive(:deployment_namespace) { deployment_namespace } + end + + context 'when rollout status is available' do + before do + allow(environment).to receive(:rollout_status_available?) { true } + end + + it 'fetches ingresses from the deployment platform' do + expect(deployment_platform).to receive(:patch_ingress).with(deployment_namespace, ingress, data) + + subject + end + end + + context 'when rollout status is not available' do + before do + allow(environment).to receive(:rollout_status_available?) { false } + end + + it 'does nothing' do + expect(deployment_platform).not_to receive(:patch_ingress) + + subject + end + end + end end |