File: infrastructure_registry_spec.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (130 lines) | stat: -rw-r--r-- 3,894 bytes parent folder | download
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Infrastructure Registry', feature_category: :package_registry do
  let_it_be(:user) { create(:user) }
  let_it_be(:group) { create(:group) }
  let_it_be(:project) { create(:project, :public, group: group) }

  context 'when user is not signed in' do
    before do
      visit_group_infrastructure_registry
    end

    it 'returns 200' do
      expect(status_code).to eq(200)
    end

    context 'when there are modules' do
      let_it_be(:terraform_module) do
        create(:terraform_module_package, project: project, created_at: 1.day.ago, version: '1.0.0')
      end

      it 'does not allow you to delete package', :js do
        expect(page).to have_button('Remove package', disabled: true)
      end
    end
  end

  context 'when user is signed in' do
    before do
      sign_in(user)
    end

    context 'when user is not a group member' do
      before do
        visit_group_infrastructure_registry
      end

      it 'returns 200' do
        expect(status_code).to eq(200)
      end

      context 'when there are modules' do
        let_it_be(:terraform_module) do
          create(:terraform_module_package, project: project, created_at: 1.day.ago, version: '1.0.0')
        end

        it 'does not allow you to delete package', :js do
          expect(page).to have_button('Remove package', disabled: true)
        end
      end
    end

    context 'when user is a group member' do
      before_all do
        group.add_maintainer(user)
      end

      context 'when packages registry is not enabled' do
        before do
          stub_config(packages: { enabled: false })
        end

        it 'returns 404' do
          visit_group_infrastructure_registry

          expect(status_code).to eq(404)
        end
      end

      context 'when packages registry is enabled', :js do
        before do
          visit_group_infrastructure_registry
        end

        context 'when there are modules' do
          let_it_be(:terraform_module) do
            create(:terraform_module_package, project: project, created_at: 1.day.ago, version: '1.0.0')
          end

          context 'and there is more than one' do
            let_it_be(:terraform_module2) do
              create(:terraform_module_package, project: project, created_at: 2.days.ago, version: '2.0.0')
            end

            let_it_be(:packages) { [terraform_module, terraform_module2] }

            it_behaves_like 'packages list'
          end

          describe 'details link' do
            it 'navigates to the correct url' do
              page.within(packages_table_selector) do
                click_link terraform_module.name
              end

              expect(page).to have_current_path(project_infrastructure_registry_path(terraform_module.project,
                terraform_module))

              expect(page).to have_css('.packages-app h1[data-testid="page-heading"]', text: terraform_module.name)

              expect(page).to have_content('Provision instructions')
              expect(page).to have_content('Registry setup')
            end
          end

          context 'when deleting a package' do
            it 'allows you to delete a module', :aggregate_failures do
              # this is still using the package copy in the UI too
              click_button('Remove package')
              click_button('Permanently delete')

              expect(page).to have_content 'Package deleted successfully'
              expect(page).not_to have_content(terraform_module.name)
            end
          end
        end

        it 'displays the empty message' do
          expect(page).to have_content('You have no Terraform modules in your group')
        end
      end
    end
  end

  def visit_group_infrastructure_registry
    visit group_infrastructure_registry_index_path(group)
  end
end