Commit 26927c98 authored by Sanad Liaquat's avatar Sanad Liaquat Committed by Mark Lapierre

Add e2e test for transferring group

Also add the required qa selectors and page object methods
parent b8b97284
...@@ -29,7 +29,7 @@ module DropdownsHelper ...@@ -29,7 +29,7 @@ module DropdownsHelper
output << dropdown_filter(options[:placeholder]) output << dropdown_filter(options[:placeholder])
end end
output << content_tag(:div, class: "dropdown-content #{options[:content_class] if options.key?(:content_class)}") do output << content_tag(:div, data: { qa_selector: "dropdown_list_content" }, class: "dropdown-content #{options[:content_class] if options.key?(:content_class)}") do
capture(&block) if block && !options.key?(:footer_content) capture(&block) if block && !options.key?(:footer_content)
end end
...@@ -102,7 +102,7 @@ module DropdownsHelper ...@@ -102,7 +102,7 @@ module DropdownsHelper
def dropdown_filter(placeholder, search_id: nil) def dropdown_filter(placeholder, search_id: nil)
content_tag :div, class: "dropdown-input" do content_tag :div, class: "dropdown-input" do
filter_output = search_field_tag search_id, nil, class: "dropdown-input-field qa-dropdown-input-field", placeholder: placeholder, autocomplete: 'off' filter_output = search_field_tag search_id, nil, data: { qa_selector: "dropdown_input_field" }, class: "dropdown-input-field", placeholder: placeholder, autocomplete: 'off'
filter_output << sprite_icon('search', css_class: 'dropdown-input-search') filter_output << sprite_icon('search', css_class: 'dropdown-input-search')
filter_output << sprite_icon('close', size: 16, css_class: 'dropdown-input-clear js-dropdown-input-clear') filter_output << sprite_icon('close', size: 16, css_class: 'dropdown-input-clear js-dropdown-input-clear')
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
= render_if_exists 'groups/custom_project_templates_setting' = render_if_exists 'groups/custom_project_templates_setting'
= render_if_exists 'groups/templates_setting', expanded: expanded = render_if_exists 'groups/templates_setting', expanded: expanded
%section.settings.gs-advanced.no-animate#js-advanced-settings{ class: ('expanded' if expanded) } %section.settings.gs-advanced.no-animate#js-advanced-settings{ class: ('expanded' if expanded), data: { qa_selector: 'advanced_settings_content' } }
.settings-header .settings-header
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only{ role: 'button' } %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only{ role: 'button' }
= _('Advanced') = _('Advanced')
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
%h4.warning-title= s_('GroupSettings|Transfer group') %h4.warning-title= s_('GroupSettings|Transfer group')
= form_for @group, url: transfer_group_path(@group), method: :put, html: { class: 'js-group-transfer-form' } do |f| = form_for @group, url: transfer_group_path(@group), method: :put, html: { class: 'js-group-transfer-form' } do |f|
.form-group .form-group
= dropdown_tag('Select parent group', options: { toggle_class: 'js-groups-dropdown', title: 'Parent Group', filter: true, dropdown_class: 'dropdown-open-top dropdown-group-transfer', placeholder: 'Search groups', data: { data: parent_group_options(@group) } }) = dropdown_tag('Select parent group', options: { toggle_class: 'js-groups-dropdown', title: 'Parent Group', filter: true, dropdown_class: 'dropdown-open-top dropdown-group-transfer', placeholder: 'Search groups', data: { data: parent_group_options(@group), qa_selector: 'select_group_dropdown' } })
= hidden_field_tag 'new_parent_group_id' = hidden_field_tag 'new_parent_group_id'
%ul %ul
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
%li= s_('GroupSettings|You can only transfer the group to a group you manage.') %li= s_('GroupSettings|You can only transfer the group to a group you manage.')
%li= s_('GroupSettings|You will need to update your local repositories to point to the new location.') %li= s_('GroupSettings|You will need to update your local repositories to point to the new location.')
%li= s_("GroupSettings|If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.") %li= s_("GroupSettings|If the parent group's visibility is lower than the group current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility.")
= f.submit s_('GroupSettings|Transfer group'), class: 'btn gl-button btn-warning' = f.submit s_('GroupSettings|Transfer group'), class: 'btn gl-button btn-warning', data: { qa_selector: "transfer_group_button" }
= render 'groups/settings/remove', group: @group = render 'groups/settings/remove', group: @group
= render_if_exists 'groups/settings/restore', group: @group = render_if_exists 'groups/settings/restore', group: @group
...@@ -9,6 +9,7 @@ module QA ...@@ -9,6 +9,7 @@ module QA
view 'app/views/groups/edit.html.haml' do view 'app/views/groups/edit.html.haml' do
element :permission_lfs_2fa_content element :permission_lfs_2fa_content
element :advanced_settings_content
end end
view 'app/views/groups/settings/_permissions.html.haml' do view 'app/views/groups/settings/_permissions.html.haml' do
...@@ -40,6 +41,16 @@ module QA ...@@ -40,6 +41,16 @@ module QA
element :project_creation_level_dropdown element :project_creation_level_dropdown
end end
view 'app/views/groups/settings/_advanced.html.haml' do
element :select_group_dropdown
element :transfer_group_button
end
view 'app/helpers/dropdowns_helper.rb' do
element :dropdown_input_field
element :dropdown_list_content
end
def set_group_name(name) def set_group_name(name)
find_element(:group_name_field).send_keys([:command, 'a'], :backspace) find_element(:group_name_field).send_keys([:command, 'a'], :backspace)
find_element(:group_name_field).set name find_element(:group_name_field).set name
...@@ -106,6 +117,19 @@ module QA ...@@ -106,6 +117,19 @@ module QA
click_element(:save_permissions_changes_button) click_element(:save_permissions_changes_button)
end end
def transfer_group(target_group)
expand_content :advanced_settings_content
click_element :select_group_dropdown
fill_element(:dropdown_input_field, target_group)
within_element(:dropdown_list_content) do
click_on target_group
end
click_element :transfer_group_button
end
end end
end end
end end
......
# frozen_string_literal: true
module QA
RSpec.describe 'Manage' do
describe 'Subgroup transfer' do
let(:source_group) do
Resource::Group.fabricate_via_api! do |group|
group.path = "source-group-for-transfer_#{SecureRandom.hex(8)}"
end
end
let!(:target_group) do
Resource::Group.fabricate_via_api! do |group|
group.path = "target-group-for-transfer_#{SecureRandom.hex(8)}"
end
end
let(:sub_group_for_transfer) do
Resource::Group.fabricate_via_api! do |group|
group.path = "subgroup-for-transfer_#{SecureRandom.hex(8)}"
group.sandbox = source_group
end
end
before do
Flow::Login.sign_in
sub_group_for_transfer.visit!
end
it 'transfers a subgroup to another group',
testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1724' do
Page::Group::Menu.perform(&:click_group_general_settings_item)
Page::Group::Settings::General.perform do |general|
general.transfer_group(target_group.path)
end
expect(page).to have_text("Group '#{sub_group_for_transfer.path}' was successfully transferred.")
expect(page.driver.current_url).to include("#{target_group.path}/#{sub_group_for_transfer.path}")
end
after do
source_group&.remove_via_api!
target_group&.remove_via_api!
sub_group_for_transfer&.remove_via_api!
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment