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 'Container Registry', :js, feature_category: :container_registry do
let(:user) { create(:user, :no_super_sidebar) }
let(:group) { create(:group) }
let(:project) { create(:project, namespace: group) }
let(:container_repository) do
create(:container_repository, name: 'my/image')
end
before do
group.add_owner(user)
sign_in(user)
stub_container_registry_config(enabled: true)
stub_container_registry_tags(repository: :any, tags: [])
stub_container_registry_info
end
it 'has a page title set' do
visit_container_registry
expect(page).to have_title _('Container Registry')
end
it 'sidebar menu is open' do
visit_container_registry
sidebar = find('.nav-sidebar')
expect(sidebar).to have_link _('Container Registry')
end
context 'when there are no image repositories' do
it 'list page has no container title' do
visit_container_registry
expect(page).to have_content _('There are no container images available in this group')
end
end
context 'when there are image repositories' do
before do
stub_container_registry_tags(repository: %r{my/image}, tags: %w[latest], with_manifest: true)
project.container_repositories << container_repository
end
it 'list page has a list of images' do
visit_container_registry
expect(page).to have_content '1 Image repository'
expect(page).to have_content 'my/image'
end
it 'navigates to repo details' do
visit_container_registry_details('my/image')
expect(page).to have_content 'latest'
end
[ContainerRegistry::Path::InvalidRegistryPathError, Faraday::Error].each do |error_class|
context "when there is a #{error_class}" do
before do
expect(::ContainerRegistry::Client).to receive(:registry_info).and_raise(error_class, nil, nil)
end
it_behaves_like 'handling feature network errors with the container registry'
end
end
describe 'image repo details' do
before do
visit_container_registry_details 'my/image'
end
it 'shows the details breadcrumb' do
expect(find('.breadcrumbs')).to have_link 'my/image'
end
it 'shows the image title' do
expect(page).to have_content 'my/image'
end
it 'shows the image tags' do
expect(page).to have_content '1 tag'
first_tag = first('[data-testid="name"]')
expect(first_tag).to have_content 'latest'
end
it 'user removes a specific tag from container repository' do
service = double('service')
expect(service).to receive(:execute).with(container_repository) { { status: :success } }
expect(Projects::ContainerRepository::DeleteTagsService).to receive(:new).with(container_repository.project, user, tags: ['latest']) { service }
first('[data-testid="additional-actions"]').click
first('[data-testid="single-delete-button"]').click
expect(find('.modal .modal-title')).to have_content _('Remove tag')
stub_container_registry_tags(repository: %r{my/image}, tags: [], with_manifest: true)
find('.modal .modal-footer .btn-danger').click
expect(page).to have_content '0 tags'
expect(page).not_to have_content '1 tag'
end
end
end
context 'when an image has the same name as the subgroup' do
before do
stub_container_registry_tags(tags: %w[latest], with_manifest: true)
project.container_repositories << create(:container_repository, name: group.name)
visit_container_registry
end
it 'details page loads properly' do
find('a[data-testid="details-link"]').click
expect(page).to have_content 'latest'
end
end
def visit_container_registry
visit group_container_registries_path(group)
end
def visit_container_registry_details(name)
visit_container_registry
click_link(name)
end
end
|