summaryrefslogtreecommitdiff
path: root/qa/qa/specs/features/browser_ui/7_configure/auto_devops/group_cluster_with_auto_devops_spec.rb
blob: 5061c4e55c325e28aa97fd98b7f20323b892390e (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# frozen_string_literal: true

require 'pathname'

module QA
  context 'Configure', :orchestrated, :kubernetes do
    describe 'Group cluster' do
      after do
        @cluster&.remove!
      end

      [true, false].each do |rbac|
        context "when rbac is #{rbac ? 'enabled' : 'disabled'}" do
          it 'user creates a new project, new group cluster and runs auto devops' do
            Runtime::Browser.visit(:gitlab, Page::Main::Login)
            Page::Main::Login.act { sign_in_using_credentials }

            project = Resource::Project.fabricate! do |p|
              p.name = 'project-with-autodevops'
              p.description = 'Project with Auto Devops'
            end

            group = project.group

            # Disable code_quality check in Auto DevOps pipeline as it takes
            # too long and times out the test
            Resource::CiVariable.fabricate! do |resource|
              resource.project = project
              resource.key = 'CODE_QUALITY_DISABLED'
              resource.value = '1'
            end

            # Create Auto Devops compatible repo
            Resource::Repository::ProjectPush.fabricate! do |push|
              push.project = project
              push.directory = Pathname
                .new(__dir__)
                .join('../../../../../fixtures/auto_devops_rack')
              push.commit_message = 'Create Auto DevOps compatible rack application'
            end

            Page::Project::Show.act { wait_for_push }

            # Create and connect K8s cluster
            @cluster = Service::KubernetesCluster.new(rbac: rbac).create!
            kubernetes_cluster = Resource::GroupKubernetesCluster.fabricate! do |cluster|
              cluster.group = group
              cluster.cluster = @cluster
              cluster.install_helm_tiller = true
              cluster.install_ingress = true
            end
            kubernetes_cluster.populate(:ingress_ip)

            project.visit!
            Page::Project::Menu.act { click_ci_cd_settings }
            Page::Project::Settings::CICD.perform do |p|
              p.enable_auto_devops_with_domain(
                "#{kubernetes_cluster.ingress_ip}.nip.io")
            end

            project.visit!
            Page::Project::Menu.act { click_ci_cd_pipelines }
            Page::Project::Pipeline::Index.act { go_to_latest_pipeline }

            Page::Project::Pipeline::Show.perform do |pipeline|
              expect(pipeline).to have_build('build', status: :success, wait: 600)
              expect(pipeline).to have_build('test', status: :success, wait: 600)
              expect(pipeline).to have_build('production', status: :success, wait: 1200)
            end

            Page::Project::Menu.act { click_operations_environments }
            Page::Project::Operations::Environments::Index.perform do |index|
              index.go_to_environment('production')
            end
            Page::Project::Operations::Environments::Show.perform do |show|
              show.view_deployment do
                expect(page).to have_content('Hello World!')
              end
            end
          end
        end
      end
    end
  end
end