diff options
Diffstat (limited to 'spec/features/groups')
-rw-r--r-- | spec/features/groups/container_registry_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/groups/dependency_proxy_for_containers_spec.rb | 12 | ||||
-rw-r--r-- | spec/features/groups/dependency_proxy_spec.rb | 4 | ||||
-rw-r--r-- | spec/features/groups/group_page_with_external_authorization_service_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/groups/group_runners_spec.rb | 301 | ||||
-rw-r--r-- | spec/features/groups/labels/create_spec.rb | 6 | ||||
-rw-r--r-- | spec/features/groups/labels/edit_spec.rb | 14 | ||||
-rw-r--r-- | spec/features/groups/members/manage_members_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/groups/members/request_access_spec.rb | 4 | ||||
-rw-r--r-- | spec/features/groups/navbar_spec.rb | 5 | ||||
-rw-r--r-- | spec/features/groups/new_group_page_spec.rb | 4 | ||||
-rw-r--r-- | spec/features/groups/packages_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/groups/settings/packages_and_registries_spec.rb | 2 | ||||
-rw-r--r-- | spec/features/groups/user_sees_package_sidebar_spec.rb | 2 |
14 files changed, 218 insertions, 144 deletions
diff --git a/spec/features/groups/container_registry_spec.rb b/spec/features/groups/container_registry_spec.rb index d68b4ccf8f8..953a8e27547 100644 --- a/spec/features/groups/container_registry_spec.rb +++ b/spec/features/groups/container_registry_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'Container Registry', :js, feature_category: :container_registry do - let(:user) { create(:user) } + let(:user) { create(:user, :no_super_sidebar) } let(:group) { create(:group) } let(:project) { create(:project, namespace: group) } diff --git a/spec/features/groups/dependency_proxy_for_containers_spec.rb b/spec/features/groups/dependency_proxy_for_containers_spec.rb index c0456140291..1e15b97c5aa 100644 --- a/spec/features/groups/dependency_proxy_for_containers_spec.rb +++ b/spec/features/groups/dependency_proxy_for_containers_spec.rb @@ -6,6 +6,7 @@ RSpec.describe 'Group Dependency Proxy for containers', :js, feature_category: : include DependencyProxyHelpers include_context 'file upload requests helpers' + include_context 'with a server running the dependency proxy' let_it_be(:user) { create(:user) } let_it_be(:group) { create(:group) } @@ -21,17 +22,6 @@ RSpec.describe 'Group Dependency Proxy for containers', :js, feature_category: : HTTParty.get(url, headers: headers) end - def run_server(handler) - default_server = Capybara.server - - Capybara.server = Capybara.servers[:puma] - server = Capybara::Server.new(handler) - server.boot - server - ensure - Capybara.server = default_server - end - let_it_be(:external_server) do handler = lambda do |env| if env['REQUEST_PATH'] == '/token' diff --git a/spec/features/groups/dependency_proxy_spec.rb b/spec/features/groups/dependency_proxy_spec.rb index 60922f813df..2d4f6d4fbf2 100644 --- a/spec/features/groups/dependency_proxy_spec.rb +++ b/spec/features/groups/dependency_proxy_spec.rb @@ -3,8 +3,8 @@ require 'spec_helper' RSpec.describe 'Group Dependency Proxy', feature_category: :dependency_proxy do - let(:owner) { create(:user) } - let(:reporter) { create(:user) } + let(:owner) { create(:user, :no_super_sidebar) } + let(:reporter) { create(:user, :no_super_sidebar) } let(:group) { create(:group) } let(:path) { group_dependency_proxy_path(group) } let(:settings_path) { group_settings_packages_and_registries_path(group) } diff --git a/spec/features/groups/group_page_with_external_authorization_service_spec.rb b/spec/features/groups/group_page_with_external_authorization_service_spec.rb index 5b373aecce8..4cc0fe4171d 100644 --- a/spec/features/groups/group_page_with_external_authorization_service_spec.rb +++ b/spec/features/groups/group_page_with_external_authorization_service_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' RSpec.describe 'The group page', feature_category: :groups_and_projects do include ExternalAuthorizationServiceHelpers - let(:user) { create(:user) } + let(:user) { create(:user, :no_super_sidebar) } let(:group) { create(:group) } before do diff --git a/spec/features/groups/group_runners_spec.rb b/spec/features/groups/group_runners_spec.rb index e9d2d185e8a..4e5d7c6f8e8 100644 --- a/spec/features/groups/group_runners_spec.rb +++ b/spec/features/groups/group_runners_spec.rb @@ -7,182 +7,235 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do include Spec::Support::Helpers::ModalHelpers let_it_be(:group_owner) { create(:user) } + let_it_be(:group_maintainer) { create(:user) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } before do group.add_owner(group_owner) - sign_in(group_owner) + group.add_maintainer(group_maintainer) end describe "Group runners page", :js do - context "with no runners" do + context 'when logged in as group maintainer' do before do - visit group_runners_path(group) + sign_in(group_maintainer) end - it_behaves_like 'shows no runners registered' - - it 'shows tabs with total counts equal to 0' do - expect(page).to have_link('All 0') - expect(page).to have_link('Group 0') - expect(page).to have_link('Project 0') - end - end + context "with no runners" do + before do + visit group_runners_path(group) + end - context "with an online group runner" do - let!(:group_runner) do - create(:ci_runner, :group, groups: [group], description: 'runner-foo', contacted_at: Time.zone.now) - end + it_behaves_like 'shows no runners registered' - before do - visit group_runners_path(group) + it 'shows tabs with total counts equal to 0' do + expect(page).to have_link('All 0') + expect(page).to have_link('Group 0') + expect(page).to have_link('Project 0') + end end - it_behaves_like 'shows runner in list' do - let(:runner) { group_runner } - end + context "with an online group runner" do + let_it_be(:group_runner) do + create(:ci_runner, :group, groups: [group], description: 'runner-foo', contacted_at: Time.zone.now) + end - it_behaves_like 'pauses, resumes and deletes a runner' do - let(:runner) { group_runner } - end + before do + visit group_runners_path(group) + end - it 'shows an editable group badge' do - within_runner_row(group_runner.id) do - expect(find_link('Edit')[:href]).to end_with(edit_group_runner_path(group, group_runner)) + it_behaves_like 'shows runner in list' do + let(:runner) { group_runner } + end - expect(page).to have_selector '.badge', text: s_('Runners|Group') + it_behaves_like 'shows runner details from list' do + let(:runner) { group_runner } + let(:runner_page_path) { group_runner_path(group, group_runner) } end - end - context 'when description does not match' do - before do - input_filtered_search_keys('runner-baz') + it 'shows a group runner badge' do + within_runner_row(group_runner.id) do + expect(page).to have_selector '.badge', text: s_('Runners|Group') + end end - it_behaves_like 'shows no runners found' + context 'when description does not match' do + before do + input_filtered_search_keys('runner-baz') + end + + it_behaves_like 'shows no runners found' - it 'shows no runner' do - expect(page).not_to have_content 'runner-foo' + it 'shows no runner' do + expect(page).not_to have_content 'runner-foo' + end end end - end - context "with an online project runner" do - let!(:project_runner) do - create(:ci_runner, :project, projects: [project], description: 'runner-bar', contacted_at: Time.zone.now) - end + context "with an online project runner" do + let_it_be(:project_runner) do + create(:ci_runner, :project, projects: [project], description: 'runner-bar', contacted_at: Time.zone.now) + end - before do - visit group_runners_path(group) - end + before do + visit group_runners_path(group) + end - it_behaves_like 'shows runner in list' do - let(:runner) { project_runner } - end + it_behaves_like 'shows runner in list' do + let(:runner) { project_runner } + end - it_behaves_like 'pauses, resumes and deletes a runner' do - let(:runner) { project_runner } + it_behaves_like 'shows runner details from list' do + let(:runner) { project_runner } + let(:runner_page_path) { group_runner_path(group, project_runner) } + end + + it 'shows a project runner badge' do + within_runner_row(project_runner.id) do + expect(page).to have_selector '.badge', text: s_('Runners|Project') + end + end end - it 'shows an editable project runner' do - within_runner_row(project_runner.id) do - expect(find_link('Edit')[:href]).to end_with(edit_group_runner_path(group, project_runner)) + context "with an online instance runner" do + let_it_be(:instance_runner) do + create(:ci_runner, :instance, description: 'runner-baz', contacted_at: Time.zone.now) + end - expect(page).to have_selector '.badge', text: s_('Runners|Project') + before do + visit group_runners_path(group) end - end - end - context "with an online instance runner" do - let!(:instance_runner) do - create(:ci_runner, :instance, description: 'runner-baz', contacted_at: Time.zone.now) - end + context "when selecting 'Show only inherited'" do + before do + find("[data-testid='runner-membership-toggle'] button").click - before do - visit group_runners_path(group) - end + wait_for_requests + end - context "when selecting 'Show only inherited'" do - before do - find("[data-testid='runner-membership-toggle'] button").click + it_behaves_like 'shows runner in list' do + let(:runner) { instance_runner } + end - wait_for_requests + it_behaves_like 'shows runner details from list' do + let(:runner) { instance_runner } + let(:runner_page_path) { group_runner_path(group, instance_runner) } + end end + end - it_behaves_like 'shows runner in list' do - let(:runner) { instance_runner } + describe 'filtered search' do + before do + visit group_runners_path(group) end - it 'shows runner details page' do - click_link("##{instance_runner.id} (#{instance_runner.short_sha})") + it 'allows user to search by paused and status', :js do + focus_filtered_search - expect(current_url).to include(group_runner_path(group, instance_runner)) - expect(page).to have_content "#{s_('Runners|Description')} runner-baz" + page.within(search_bar_selector) do + expect(page).to have_link(s_('Runners|Paused')) + expect(page).to have_content('Status') + end end end - end - context 'with a multi-project runner' do - let(:project) { create(:project, group: group) } - let(:project_2) { create(:project, group: group) } - let!(:runner) { create(:ci_runner, :project, projects: [project, project_2], description: 'group-runner') } + describe 'filter by tag' do + let!(:rnr_1) { create(:ci_runner, :group, groups: [group], description: 'runner-blue', tag_list: ['blue']) } + let!(:rnr_2) { create(:ci_runner, :group, groups: [group], description: 'runner-red', tag_list: ['red']) } - it 'user cannot remove the project runner' do - visit group_runners_path(group) + before do + visit group_runners_path(group) + end - within_runner_row(runner.id) do - expect(page).not_to have_button 'Delete runner' + it_behaves_like 'filters by tag' do + let(:tag) { 'blue' } + let(:found_runner) { rnr_1.description } + let(:missing_runner) { rnr_2.description } end end end - context "with multiple runners" do + context 'when logged in as group owner' do before do - create(:ci_runner, :group, groups: [group], description: 'runner-foo') - create(:ci_runner, :group, groups: [group], description: 'runner-bar') - - visit group_runners_path(group) + sign_in(group_owner) end - it_behaves_like 'deletes runners in bulk' do - let(:runner_count) { '2' } - end - end + context "with an online group runner" do + let_it_be(:group_runner) do + create(:ci_runner, :group, groups: [group], description: 'runner-foo', contacted_at: Time.zone.now) + end - describe 'filtered search' do - before do - visit group_runners_path(group) + before do + visit group_runners_path(group) + end + + it_behaves_like 'pauses, resumes and deletes a runner' do + let(:runner) { group_runner } + end + + it 'shows an edit link' do + within_runner_row(group_runner.id) do + expect(find_link('Edit')[:href]).to end_with(edit_group_runner_path(group, group_runner)) + end + end end - it 'allows user to search by paused and status', :js do - focus_filtered_search + context "with an online project runner" do + let_it_be(:project_runner) do + create(:ci_runner, :project, projects: [project], description: 'runner-bar', contacted_at: Time.zone.now) + end + + before do + visit group_runners_path(group) + end - page.within(search_bar_selector) do - expect(page).to have_link(s_('Runners|Paused')) - expect(page).to have_content('Status') + it_behaves_like 'pauses, resumes and deletes a runner' do + let(:runner) { project_runner } + end + + it 'shows an editable project runner' do + within_runner_row(project_runner.id) do + expect(find_link('Edit')[:href]).to end_with(edit_group_runner_path(group, project_runner)) + end end end - end - describe 'filter by tag' do - let!(:runner_1) { create(:ci_runner, :group, groups: [group], description: 'runner-blue', tag_list: ['blue']) } - let!(:runner_2) { create(:ci_runner, :group, groups: [group], description: 'runner-red', tag_list: ['red']) } + context 'with a multi-project runner' do + let_it_be(:project) { create(:project, group: group) } + let_it_be(:project_2) { create(:project, group: group) } + let_it_be(:runner) do + create(:ci_runner, :project, projects: [project, project_2], description: 'group-runner') + end - before do - visit group_runners_path(group) + it 'owner cannot remove the project runner' do + visit group_runners_path(group) + + within_runner_row(runner.id) do + expect(page).not_to have_button 'Delete runner' + end + end end - it_behaves_like 'filters by tag' do - let(:tag) { 'blue' } - let(:found_runner) { runner_1.description } - let(:missing_runner) { runner_2.description } + context "with multiple runners" do + before do + create(:ci_runner, :group, groups: [group], description: 'runner-foo') + create(:ci_runner, :group, groups: [group], description: 'runner-bar') + + visit group_runners_path(group) + end + + it_behaves_like 'deletes runners in bulk' do + let(:runner_count) { '2' } + end end end end describe "Group runner create page", :js do before do + sign_in(group_owner) + visit new_group_runner_path(group) end @@ -196,23 +249,39 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do create(:ci_runner, :group, groups: [group], description: 'runner-foo') end - let_it_be(:group_runner_job) { create(:ci_build, runner: group_runner) } + let_it_be(:group_runner_job) { create(:ci_build, runner: group_runner, project: project) } - before do - visit group_runner_path(group, group_runner) - end + context 'when logged in as group maintainer' do + before do + sign_in(group_maintainer) - it 'user views runner details' do - expect(page).to have_content "#{s_('Runners|Description')} runner-foo" + visit group_runner_path(group, group_runner) + end + + it 'user views runner details' do + expect(page).to have_content "#{s_('Runners|Description')} runner-foo" + end end - it_behaves_like 'shows runner jobs tab' do - let(:job_count) { '1' } - let(:job) { group_runner_job } + context 'when logged in as group owner' do + before do + sign_in(group_owner) + + visit group_runner_path(group, group_runner) + end + + it_behaves_like 'shows runner jobs tab' do + let(:job_count) { '1' } + let(:job) { group_runner_job } + end end end describe "Group runner edit page", :js do + before do + sign_in(group_owner) + end + context 'when updating a group runner' do let_it_be(:group_runner) { create(:ci_runner, :group, groups: [group]) } @@ -239,6 +308,8 @@ RSpec.describe "Group Runners", feature_category: :runner_fleet do let(:runner) { project_runner } let(:runner_page_path) { group_runner_path(group, project_runner) } end + + it_behaves_like 'shows locked field' end end end diff --git a/spec/features/groups/labels/create_spec.rb b/spec/features/groups/labels/create_spec.rb index 5b57e670c1d..8242f422e6e 100644 --- a/spec/features/groups/labels/create_spec.rb +++ b/spec/features/groups/labels/create_spec.rb @@ -9,15 +9,17 @@ RSpec.describe 'Create a group label', feature_category: :team_planning do before do group.add_owner(user) sign_in(user) - visit group_labels_path(group) + + visit new_group_label_path(group) end it 'creates a new label' do - click_link 'New label' fill_in 'Title', with: 'test-label' click_button 'Create label' expect(page).to have_content 'test-label' expect(page).to have_current_path(group_labels_path(group), ignore_query: true) end + + it_behaves_like 'lock_on_merge when creating labels' end diff --git a/spec/features/groups/labels/edit_spec.rb b/spec/features/groups/labels/edit_spec.rb index 6e056d35435..70568d4baa2 100644 --- a/spec/features/groups/labels/edit_spec.rb +++ b/spec/features/groups/labels/edit_spec.rb @@ -12,6 +12,7 @@ RSpec.describe 'Edit group label', feature_category: :team_planning do before do group.add_owner(user) sign_in(user) + visit edit_group_label_path(group, label) end @@ -34,4 +35,17 @@ RSpec.describe 'Edit group label', feature_category: :team_planning do expect(page).to have_content("#{label.title} was removed").and have_no_content("#{label.title}</span>") end + + describe 'lock_on_merge' do + let(:label_unlocked) { create(:group_label, group: group, lock_on_merge: false) } + let(:label_locked) { create(:group_label, group: group, lock_on_merge: true) } + let(:edit_label_path_unlocked) { edit_group_label_path(group, label_unlocked) } + let(:edit_label_path_locked) { edit_group_label_path(group, label_locked) } + + before do + visit edit_label_path_unlocked + end + + it_behaves_like 'lock_on_merge when editing labels' + end end diff --git a/spec/features/groups/members/manage_members_spec.rb b/spec/features/groups/members/manage_members_spec.rb index 138031ffaac..dd64ddcede5 100644 --- a/spec/features/groups/members/manage_members_spec.rb +++ b/spec/features/groups/members/manage_members_spec.rb @@ -85,7 +85,7 @@ RSpec.describe 'Groups > Members > Manage members', feature_category: :groups_an end end - it_behaves_like 'inviting members', 'group-members-page' do + it_behaves_like 'inviting members', 'group_members_page' do let_it_be(:entity) { group } let_it_be(:members_page_path) { group_group_members_path(entity) } let_it_be(:subentity) { create(:group, parent: group) } diff --git a/spec/features/groups/members/request_access_spec.rb b/spec/features/groups/members/request_access_spec.rb index cd0c9bfe3eb..c04b84be90e 100644 --- a/spec/features/groups/members/request_access_spec.rb +++ b/spec/features/groups/members/request_access_spec.rb @@ -3,8 +3,8 @@ require 'spec_helper' RSpec.describe 'Groups > Members > Request access', feature_category: :groups_and_projects do - let(:user) { create(:user) } - let(:owner) { create(:user) } + let(:user) { create(:user, :no_super_sidebar) } + let(:owner) { create(:user, :no_super_sidebar) } let(:group) { create(:group, :public) } let!(:project) { create(:project, :private, namespace: group) } diff --git a/spec/features/groups/navbar_spec.rb b/spec/features/groups/navbar_spec.rb index a52e2d95fed..6a38f0c59a8 100644 --- a/spec/features/groups/navbar_spec.rb +++ b/spec/features/groups/navbar_spec.rb @@ -8,7 +8,7 @@ RSpec.describe 'Group navbar', :with_license, feature_category: :navigation do include_context 'group navbar structure' - let_it_be(:user) { create(:user) } + let_it_be(:user) { create(:user, :no_super_sidebar) } let(:group) { create(:group) } @@ -18,7 +18,6 @@ RSpec.describe 'Group navbar', :with_license, feature_category: :navigation do stub_config(dependency_proxy: { enabled: false }) stub_config(registry: { enabled: false }) - stub_feature_flags(harbor_registry_integration: false) stub_feature_flags(observability_group_tab: false) stub_group_wikis(false) group.add_maintainer(user) @@ -87,8 +86,6 @@ RSpec.describe 'Group navbar', :with_license, feature_category: :navigation do before do group.update!(harbor_integration: harbor_integration) - stub_feature_flags(harbor_registry_integration: true) - insert_harbor_registry_nav(_('Package Registry')) visit group_path(group) diff --git a/spec/features/groups/new_group_page_spec.rb b/spec/features/groups/new_group_page_spec.rb index c3731565ddf..e1034f2bb9d 100644 --- a/spec/features/groups/new_group_page_spec.rb +++ b/spec/features/groups/new_group_page_spec.rb @@ -39,14 +39,14 @@ RSpec.describe 'New group page', :js, feature_category: :groups_and_projects do context 'for a new top-level group' do it 'shows the "Your work" navigation' do visit new_group_path - expect(page).to have_selector(".super-sidebar .context-switcher-toggle", text: "Your work") + expect(page).to have_selector(".super-sidebar", text: "Your work") end end context 'for a new subgroup' do it 'shows the group navigation of the parent group' do visit new_group_path(parent_id: parent_group.id, anchor: 'create-group-pane') - expect(page).to have_selector(".super-sidebar .context-switcher-toggle", text: parent_group.name) + expect(page).to have_selector(".super-sidebar", text: parent_group.name) end end end diff --git a/spec/features/groups/packages_spec.rb b/spec/features/groups/packages_spec.rb index ec8215928e4..1d9269501be 100644 --- a/spec/features/groups/packages_spec.rb +++ b/spec/features/groups/packages_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'Group Packages', feature_category: :package_registry do - let_it_be(:user) { create(:user) } + let_it_be(:user) { create(:user, :no_super_sidebar) } let_it_be(:group) { create(:group) } let_it_be(:project) { create(:project, group: group) } diff --git a/spec/features/groups/settings/packages_and_registries_spec.rb b/spec/features/groups/settings/packages_and_registries_spec.rb index 8ea8dc9219a..fa310722860 100644 --- a/spec/features/groups/settings/packages_and_registries_spec.rb +++ b/spec/features/groups/settings/packages_and_registries_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' RSpec.describe 'Group Package and registry settings', feature_category: :package_registry do include WaitForRequests - let(:user) { create(:user) } + let(:user) { create(:user, :no_super_sidebar) } let(:group) { create(:group) } let(:sub_group) { create(:group, parent: group) } diff --git a/spec/features/groups/user_sees_package_sidebar_spec.rb b/spec/features/groups/user_sees_package_sidebar_spec.rb index 6a91dfb92bf..4efb9ff7608 100644 --- a/spec/features/groups/user_sees_package_sidebar_spec.rb +++ b/spec/features/groups/user_sees_package_sidebar_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe 'Groups > sidebar', feature_category: :groups_and_projects do - let(:user) { create(:user) } + let(:user) { create(:user, :no_super_sidebar) } let(:group) { create(:group) } before do |