Commit a0802dd8 authored by Shinya Maeda's avatar Shinya Maeda

Add EE spec for KubernetesService and Platform::Kubernetes compatibility

parent 582e4014
...@@ -34,7 +34,7 @@ describe Projects::EnvironmentsController do ...@@ -34,7 +34,7 @@ describe Projects::EnvironmentsController do
context 'when requesting JSON response for folders' do context 'when requesting JSON response for folders' do
before do before do
allow_any_instance_of(Environment).to receive(:deployment_service_ready?).and_return(true) allow_any_instance_of(Environment).to receive(:has_terminals?).and_return(true)
allow_any_instance_of(Environment).to receive(:rollout_status).and_return(kube_deployment_rollout_status) allow_any_instance_of(Environment).to receive(:rollout_status).and_return(kube_deployment_rollout_status)
create(:environment, project: project, create(:environment, project: project,
......
...@@ -4,51 +4,65 @@ describe KubernetesService, models: true, use_clean_rails_memory_store_caching: ...@@ -4,51 +4,65 @@ describe KubernetesService, models: true, use_clean_rails_memory_store_caching:
include KubernetesHelpers include KubernetesHelpers
include ReactiveCachingHelpers include ReactiveCachingHelpers
let(:project) { build_stubbed(:kubernetes_project) } shared_examples 'same behavior between KubernetesService and Platform::Kubernetes' do
let(:service) { project.kubernetes_service } let(:service) { project.deployment_platform }
describe '#rollout_status' do describe '#rollout_status' do
let(:environment) { build(:environment, project: project, name: "env", slug: "env-000000") } let(:environment) { build(:environment, project: project, name: "env", slug: "env-000000") }
subject(:rollout_status) { service.rollout_status(environment) } subject(:rollout_status) { service.rollout_status(environment) }
context 'with valid deployments' do context 'with valid deployments' do
before do before do
stub_reactive_cache( stub_reactive_cache(
service, service,
deployments: [kube_deployment(app: environment.slug), kube_deployment] deployments: [kube_deployment(app: environment.slug), kube_deployment]
) )
end end
it 'creates a matching RolloutStatus' do it 'creates a matching RolloutStatus' do
expect(rollout_status).to be_kind_of(::Gitlab::Kubernetes::RolloutStatus) expect(rollout_status).to be_kind_of(::Gitlab::Kubernetes::RolloutStatus)
expect(rollout_status.deployments.map(&:labels)).to eq([{ 'app' => 'env-000000' }]) expect(rollout_status.deployments.map(&:labels)).to eq([{ 'app' => 'env-000000' }])
end
end end
end
context 'with empty list of deployments' do context 'with empty list of deployments' do
before do before do
stub_reactive_cache( stub_reactive_cache(
service, service,
deployments: [] deployments: []
) )
end end
it 'creates a matching RolloutStatus' do it 'creates a matching RolloutStatus' do
expect(rollout_status).to be_kind_of(::Gitlab::Kubernetes::RolloutStatus) expect(rollout_status).to be_kind_of(::Gitlab::Kubernetes::RolloutStatus)
expect(rollout_status).to be_not_found expect(rollout_status).to be_not_found
end
end end
end
context 'not yet loaded deployments' do context 'not yet loaded deployments' do
before do before do
stub_reactive_cache stub_reactive_cache
end end
it 'creates a matching RolloutStatus' do it 'creates a matching RolloutStatus' do
expect(rollout_status).to be_kind_of(::Gitlab::Kubernetes::RolloutStatus) expect(rollout_status).to be_kind_of(::Gitlab::Kubernetes::RolloutStatus)
expect(rollout_status).to be_loading expect(rollout_status).to be_loading
end
end end
end end
end end
context 'when user configured kubernetes from Integration > Kubernetes' do
let(:project) { create(:kubernetes_project) }
it_behaves_like 'same behavior between KubernetesService and Platform::Kubernetes'
end
context 'when user configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
it_behaves_like 'same behavior between KubernetesService and Platform::Kubernetes'
end
end end
...@@ -322,8 +322,8 @@ describe Environment do ...@@ -322,8 +322,8 @@ describe Environment do
end end
end end
describe '#deployment_service_ready?' do describe '#has_terminals?' do
subject { environment.deployment_service_ready? } subject { environment.has_terminals? }
context 'when the enviroment is available' do context 'when the enviroment is available' do
context 'with a deployment service' do context 'with a deployment service' do
...@@ -373,7 +373,7 @@ describe Environment do ...@@ -373,7 +373,7 @@ describe Environment do
context 'when the environment has terminals' do context 'when the environment has terminals' do
before do before do
allow(environment).to receive(:deployment_service_ready?).and_return(true) allow(environment).to receive(:has_terminals?).and_return(true)
end end
shared_examples 'same behavior between KubernetesService and Platform::Kubernetes' do shared_examples 'same behavior between KubernetesService and Platform::Kubernetes' do
...@@ -402,7 +402,7 @@ describe Environment do ...@@ -402,7 +402,7 @@ describe Environment do
context 'when the environment does not have terminals' do context 'when the environment does not have terminals' do
before do before do
allow(environment).to receive(:deployment_service_ready?).and_return(false) allow(environment).to receive(:has_terminals?).and_return(false)
end end
it { is_expected.to be_nil } it { is_expected.to be_nil }
...@@ -410,30 +410,43 @@ describe Environment do ...@@ -410,30 +410,43 @@ describe Environment do
end end
describe '#rollout_status' do describe '#rollout_status' do
let(:project) { create(:kubernetes_project) } shared_examples 'same behavior between KubernetesService and Platform::Kubernetes' do
subject { environment.rollout_status }
subject { environment.rollout_status } context 'when the environment has rollout status' do
before do
allow(environment).to receive(:has_terminals?).and_return(true)
end
context 'when the environment has rollout status' do it 'returns the rollout status from the deployment service' do
before do expect(project.deployment_platform)
allow(environment).to receive(:deployment_service_ready?).and_return(true) .to receive(:rollout_status).with(environment)
.and_return(:fake_rollout_status)
is_expected.to eq(:fake_rollout_status)
end
end end
it 'returns the rollout status from the deployment service' do context 'when the environment does not have rollout status' do
expect(project.deployment_service) before do
.to receive(:rollout_status).with(environment) allow(environment).to receive(:has_terminals?).and_return(false)
.and_return(:fake_rollout_status) end
is_expected.to eq(:fake_rollout_status) it { is_expected.to eq(nil) }
end end
end end
context 'when the environment does not have rollout status' do context 'when user configured kubernetes from Integration > Kubernetes' do
before do let(:project) { create(:kubernetes_project) }
allow(environment).to receive(:deployment_service_ready?).and_return(false)
end it_behaves_like 'same behavior between KubernetesService and Platform::Kubernetes'
end
context 'when user configured kubernetes from CI/CD > Clusters' do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
it { is_expected.to eq(nil) } it_behaves_like 'same behavior between KubernetesService and Platform::Kubernetes'
end end
end end
......
...@@ -51,7 +51,7 @@ describe EnvironmentEntity do ...@@ -51,7 +51,7 @@ describe EnvironmentEntity do
context 'with deployment service ready' do context 'with deployment service ready' do
before do before do
stub_licensed_features(deploy_board: true) stub_licensed_features(deploy_board: true)
allow(environment).to receive(:deployment_service_ready?).and_return(true) allow(environment).to receive(:has_terminals?).and_return(true)
allow(environment).to receive(:rollout_status).and_return(kube_deployment_rollout_status) allow(environment).to receive(:rollout_status).and_return(kube_deployment_rollout_status)
end end
...@@ -63,7 +63,7 @@ describe EnvironmentEntity do ...@@ -63,7 +63,7 @@ describe EnvironmentEntity do
context 'when license does not has the GitLab_DeployBoard add-on' do context 'when license does not has the GitLab_DeployBoard add-on' do
before do before do
stub_licensed_features(deploy_board: false) stub_licensed_features(deploy_board: false)
allow(environment).to receive(:deployment_service_ready?).and_return(true) allow(environment).to receive(:has_terminals?).and_return(true)
end end
it 'does not expose rollout_status' do it 'does not expose rollout_status' do
......
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