summaryrefslogtreecommitdiff
path: root/spec/features/projects/clusters/interchangeability_spec.rb
blob: b454839e8e210e18f7abdf5c7f2f1b088e218103 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
require 'spec_helper'

feature 'Interchangeability between KubernetesService and Platform::Kubernetes' do
  let!(:project) { create(:project, :repository) }

  EXCEPT_METHODS = %i[test title description help fields initialize_properties namespace namespace= api_url api_url=]
  EXCEPT_METHODS_GREP_V = %w[_touched? _changed? _was]

  it 'Clusters::Platform::Kubernetes covers core interfaces in KubernetesService' do
    expected_interfaces = KubernetesService.instance_methods(false)
    expected_interfaces = expected_interfaces - EXCEPT_METHODS
    EXCEPT_METHODS_GREP_V.each do |g|
      expected_interfaces = expected_interfaces.grep_v(/#{Regexp.escape(g)}\z/)
    end
    
    expect(expected_interfaces - Clusters::Platforms::Kubernetes.instance_methods).to be_empty
  end

  shared_examples 'selects kubernetes instance' do
    context 'when user configured kubernetes from Integration > Kubernetes' do
      let!(:kubernetes_service) { create(:kubernetes_service, project: project) }

      it { is_expected.to eq(kubernetes_service) }
    end

    context 'when user configured kubernetes from CI/CD > Clusters' do
      let!(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
      let(:platform_kubernetes) { cluster.platform_kubernetes }

      it { is_expected.to eq(platform_kubernetes) }
    end
  end

  describe 'Project#deployment_service' do
    subject { project.deployment_service }

    it_behaves_like 'selects kubernetes instance'
  end

  describe 'Project#kubernetes_service' do
    subject { project.kubernetes_service }

    it_behaves_like 'selects kubernetes instance'
  end
end