diff options
author | Sanad Liaquat <sliaquat@gitlab.com> | 2019-09-11 19:03:19 +0500 |
---|---|---|
committer | Sanad Liaquat <sliaquat@gitlab.com> | 2019-09-11 19:11:53 +0500 |
commit | be1dbcfd0bebf8460af238f1f692e9d9e0b06118 (patch) | |
tree | 3b6742bf36bb95b5def21ed2a445bc91cdcfcf36 | |
parent | 0813d1543114883e8ec84cecb5495a3cd9c1f332 (diff) | |
download | gitlab-ce-qa-testcases-195-group-audit-logs-ce.tar.gz |
CE backport of e2e tests for group audit logsqa-testcases-195-group-audit-logs-ce
Also adds the required qa-selectors
20 files changed, 282 insertions, 19 deletions
diff --git a/app/assets/javascripts/pages/profiles/two_factor_auths/index.js b/app/assets/javascripts/pages/profiles/two_factor_auths/index.js index 0d377eb9c68..95936c2d1db 100644 --- a/app/assets/javascripts/pages/profiles/two_factor_auths/index.js +++ b/app/assets/javascripts/pages/profiles/two_factor_auths/index.js @@ -7,7 +7,7 @@ document.addEventListener('DOMContentLoaded', () => { const skippable = parseBoolean(twoFactorNode.dataset.twoFactorSkippable); if (skippable) { - const button = `<a class="btn btn-sm btn-warning float-right" data-method="patch" href="${twoFactorNode.dataset.two_factor_skip_url}">Configure it later</a>`; + const button = `<a class="btn btn-sm btn-warning float-right" data-qa-selector="configure_it_later_button" data-method="patch" href="${twoFactorNode.dataset.two_factor_skip_url}">Configure it later</a>`; const flashAlert = document.querySelector('.flash-alert'); if (flashAlert) flashAlert.insertAdjacentHTML('beforeend', button); } diff --git a/app/helpers/groups/group_members_helper.rb b/app/helpers/groups/group_members_helper.rb index a5d2f76820f..86fd22bfe6e 100644 --- a/app/helpers/groups/group_members_helper.rb +++ b/app/helpers/groups/group_members_helper.rb @@ -2,6 +2,6 @@ module Groups::GroupMembersHelper def group_member_select_options - { multiple: true, class: 'input-clamp', scope: :all, email_user: true } + { multiple: true, class: 'input-clamp qa-member-select-field ', scope: :all, email_user: true } end end diff --git a/app/views/groups/group_members/_new_group_member.html.haml b/app/views/groups/group_members/_new_group_member.html.haml index 8b511f6866f..93dd8f48a60 100644 --- a/app/views/groups/group_members/_new_group_member.html.haml +++ b/app/views/groups/group_members/_new_group_member.html.haml @@ -19,4 +19,4 @@ On this date, the member(s) will automatically lose access to this group and all of its projects. .col-md-2 - = f.submit 'Add to group', class: "btn btn-success btn-block" + = f.submit 'Add to group', class: "btn btn-success btn-block", data: { qa_selector: 'add_to_group_button' } diff --git a/app/views/groups/settings/_general.html.haml b/app/views/groups/settings/_general.html.haml index db1849ebb45..73a0c8ff02b 100644 --- a/app/views/groups/settings/_general.html.haml +++ b/app/views/groups/settings/_general.html.haml @@ -6,7 +6,7 @@ .row .form-group.col-md-5 = f.label :name, _('Group name'), class: 'label-bold' - = f.text_field :name, class: 'form-control' + = f.text_field :name, class: 'form-control', data: { qa_selector: 'group_name_field' } .form-group.col-md-7 = f.label :id, _('Group ID'), class: 'label-bold' @@ -30,4 +30,4 @@ = render 'shared/visibility_level', f: f, visibility_level: @group.visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group - = f.submit _('Save changes'), class: 'btn btn-success mt-4 js-dirty-submit' + = f.submit _('Save changes'), class: 'btn btn-success mt-4 js-dirty-submit', data: { qa_selector: 'save_name_visibility_settings_button' } diff --git a/app/views/groups/settings/_lfs.html.haml b/app/views/groups/settings/_lfs.html.haml index 4674d561c12..66fdd1c11da 100644 --- a/app/views/groups/settings/_lfs.html.haml +++ b/app/views/groups/settings/_lfs.html.haml @@ -7,7 +7,7 @@ .form-group.append-bottom-default .form-check - = f.check_box :lfs_enabled, checked: @group.lfs_enabled?, class: 'form-check-input' + = f.check_box :lfs_enabled, checked: @group.lfs_enabled?, class: 'form-check-input', data: { qa_selector: 'lfs_checkbox' } = f.label :lfs_enabled, class: 'form-check-label' do %span = _('Allow projects within this group to use Git LFS') diff --git a/app/views/groups/settings/_project_creation_level.html.haml b/app/views/groups/settings/_project_creation_level.html.haml index 9f711e6aade..36b714535d2 100644 --- a/app/views/groups/settings/_project_creation_level.html.haml +++ b/app/views/groups/settings/_project_creation_level.html.haml @@ -1,3 +1,3 @@ .form-group = f.label s_('ProjectCreationLevel|Allowed to create projects'), class: 'label-bold' - = f.select :project_creation_level, options_for_select(::Gitlab::Access.project_creation_options, group.project_creation_level), {}, class: 'form-control' + = f.select :project_creation_level, options_for_select(::Gitlab::Access.project_creation_options, group.project_creation_level), {}, class: 'form-control', data: { qa_selector: 'project_creation_level_dropdown' } diff --git a/app/views/groups/settings/_two_factor_auth.html.haml b/app/views/groups/settings/_two_factor_auth.html.haml index 5d3f1cbb279..c49e61c8a31 100644 --- a/app/views/groups/settings/_two_factor_auth.html.haml +++ b/app/views/groups/settings/_two_factor_auth.html.haml @@ -7,7 +7,7 @@ .form-group .form-check - = f.check_box :require_two_factor_authentication, class: 'form-check-input' + = f.check_box :require_two_factor_authentication, class: 'form-check-input', data: { qa_selector: 'require_2fa_checkbox' } = f.label :require_two_factor_authentication, class: 'form-check-label' do %span= _('Require all users in this group to setup Two-factor authentication') .form-group diff --git a/app/views/projects/project_members/_new_project_group.html.haml b/app/views/projects/project_members/_new_project_group.html.haml index 079811e4e79..d413048ca10 100644 --- a/app/views/projects/project_members/_new_project_group.html.haml +++ b/app/views/projects/project_members/_new_project_group.html.haml @@ -3,7 +3,7 @@ = form_tag project_group_links_path(@project), class: 'js-requires-input', method: :post do .form-group = label_tag :link_group_id, _("Select a group to invite"), class: "label-bold" - = groups_select_tag(:link_group_id, data: { skip_groups: @skip_groups }, class: "input-clamp", required: true) + = groups_select_tag(:link_group_id, data: { skip_groups: @skip_groups }, class: "input-clamp qa-group-select-field", required: true) .form-group = label_tag :link_group_access, _("Max access level"), class: "label-bold" .select-wrapper @@ -18,4 +18,4 @@ .clearable-input = text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date-groups', placeholder: _('Expiration date'), id: 'expires_at_groups' %i.clear-icon.js-clear-input - = submit_tag _("Invite"), class: "btn btn-success" + = submit_tag _("Invite"), class: "btn btn-success", data: { qa_selector: 'invite_group_button' } diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index cc98ba64f08..24fe583a9b5 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -19,7 +19,7 @@ %li.nav-tab{ role: 'presentation' } %a.nav-link.active{ href: '#invite-member-pane', id: 'invite-member-tab', data: { toggle: 'tab' }, role: 'tab' }= _("Invite member") %li.nav-tab{ role: 'presentation', class: ('active' if membership_locked?) } - %a.nav-link{ href: '#invite-group-pane', id: 'invite-group-tab', data: { toggle: 'tab' }, role: 'tab' }= _("Invite group") + %a.nav-link{ href: '#invite-group-pane', id: 'invite-group-tab', data: { toggle: 'tab', qa_selector: 'invite_group_tab' }, role: 'tab' }= _("Invite group") .tab-content.gitlab-tab-content .tab-pane.active{ id: 'invite-member-pane', role: 'tabpanel' } diff --git a/app/views/shared/_allow_request_access.html.haml b/app/views/shared/_allow_request_access.html.haml index a50f1877d08..2b24bde9e59 100644 --- a/app/views/shared/_allow_request_access.html.haml +++ b/app/views/shared/_allow_request_access.html.haml @@ -1,7 +1,7 @@ - label_class = local_assigns.fetch(:bold_label, false) ? 'font-weight-bold' : '' .form-check - = form.check_box :request_access_enabled, class: 'form-check-input' + = form.check_box :request_access_enabled, class: 'form-check-input', data: { qa_selector: 'request_access_checkbox' } = form.label :request_access_enabled, class: 'form-check-label' do %span{ class: label_class }= _('Allow users to request access') %br diff --git a/app/views/shared/_visibility_radios.html.haml b/app/views/shared/_visibility_radios.html.haml index 82ffdc9cd13..80532c9187b 100644 --- a/app/views/shared/_visibility_radios.html.haml +++ b/app/views/shared/_visibility_radios.html.haml @@ -4,7 +4,7 @@ - next if disallowed || restricted .form-check - = form.radio_button model_method, level, checked: (selected_level == level), class: 'form-check-input', data: { track_label: "blank_project", track_event: "activate_form_input", track_property: "#{model_method}_#{level}", track_value: "" } + = form.radio_button model_method, level, checked: (selected_level == level), class: 'form-check-input', data: { track_label: "blank_project", track_event: "activate_form_input", track_property: "#{model_method}_#{level}", track_value: "", qa_selector: "#{visibility_level_label(level).downcase}_radio" } = form.label "#{model_method}_#{level}", class: 'form-check-label' do = visibility_level_icon(level) .option-title diff --git a/app/views/shared/members/_group.html.haml b/app/views/shared/members/_group.html.haml index 42a823e3a8d..18368ecc9ff 100644 --- a/app/views/shared/members/_group.html.haml +++ b/app/views/shared/members/_group.html.haml @@ -5,7 +5,7 @@ -# Note this is just for groups. For individual members please see shared/members/_member -%li.member.group_member.py-2.px-3.d-flex.flex-column.flex-md-row{ id: dom_id } +%li.member.group_member.py-2.px-3.d-flex.flex-column.flex-md-row{ id: dom_id, data: { qa_selector: 'group_row' } } %span.list-item-name.mb-2.m-md-0 = group_icon(group, class: "avatar s40 flex-shrink-0 flex-grow-0", alt: '') .user-info @@ -41,7 +41,7 @@ - if can_admin_member = link_to project_group_link_path(@project, group_link), method: :delete, - data: { confirm: _("Are you sure you want to remove %{group_name}?") % { group_name: group.name } }, + data: { confirm: _("Are you sure you want to remove %{group_name}?") % { group_name: group.name }, qa_selector: 'delete_group_access_link' }, class: 'btn btn-remove m-0 ml-sm-2 align-self-center' do %span.d-block.d-sm-none = _("Delete") diff --git a/app/views/shared/members/_member.html.haml b/app/views/shared/members/_member.html.haml index 6762f211a80..d5c1a1bee6d 100644 --- a/app/views/shared/members/_member.html.haml +++ b/app/views/shared/members/_member.html.haml @@ -8,7 +8,7 @@ -# Note this is just for individual members. For groups please see shared/members/_group -%li.member.py-2.px-3.d-flex.flex-column{ class: [dom_class(member), ("is-overridden" if override), ("flex-md-row" unless force_mobile_view)], id: dom_id(member) } +%li.member.py-2.px-3.d-flex.flex-column{ class: [dom_class(member), ("is-overridden" if override), ("flex-md-row" unless force_mobile_view)], id: dom_id(member), data: { qa_selector: 'member_row' } } %span.list-item-name.mb-2.m-md-0 - if user = image_tag avatar_icon_for_user(user, 40), class: "avatar s40 flex-shrink-0 flex-grow-0", alt: '' @@ -72,7 +72,7 @@ .member-form-control.dropdown{ class: [("mr-sm-2 d-sm-inline-block" unless force_mobile_view)] } %button.dropdown-menu-toggle.js-member-permissions-dropdown{ type: "button", disabled: member.can_override? && !override, - data: { toggle: "dropdown", field_name: "#{f.object_name}[access_level]" } } + data: { toggle: "dropdown", field_name: "#{f.object_name}[access_level]", qa_selector: "access_level_dropdown" } } %span.dropdown-toggle-text = member.human_access = icon("chevron-down") @@ -84,7 +84,7 @@ %li = link_to role, '#', class: ("is-active" if member.access_level == role_id), - data: { id: role_id, el_id: dom_id(member) } + data: { id: role_id, el_id: dom_id(member), qa_selector: "#{role.downcase}_access_level_link" } = render_if_exists 'shared/members/ee/revert_ldap_group_sync_option', group: @group, member: member, @@ -119,7 +119,7 @@ - else = link_to member, method: :delete, - data: { confirm: remove_member_message(member) }, + data: { confirm: remove_member_message(member), qa_selector: 'delete_member_button' }, class: "btn btn-remove align-self-center m-0 #{'ml-sm-2' unless force_mobile_view}", title: remove_member_title(member) do %span{ class: ('d-block d-sm-none' unless force_mobile_view) } @@ -162,6 +162,12 @@ module QA module Group autoload :New, 'qa/page/group/new' autoload :Show, 'qa/page/group/show' + autoload :Menu, 'qa/page/group/menu' + + module SubMenus + autoload :Common, 'qa/page/group/sub_menus/common' + autoload :Members, 'qa/page/group/sub_menus/members' + end module Settings autoload :General, 'qa/page/group/settings/general' @@ -278,6 +284,7 @@ module QA autoload :Menu, 'qa/page/profile/menu' autoload :PersonalAccessTokens, 'qa/page/profile/personal_access_tokens' autoload :SSHKeys, 'qa/page/profile/ssh_keys' + autoload :TwoFactorAuth, 'qa/page/profile/two_factor_auth' end module Issuable diff --git a/qa/qa/page/group/menu.rb b/qa/qa/page/group/menu.rb new file mode 100644 index 00000000000..6353895ffd4 --- /dev/null +++ b/qa/qa/page/group/menu.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module QA + module Page + module Group + class Menu < Page::Base + include SubMenus::Common + + view 'app/views/layouts/nav/sidebar/_group.html.haml' do + element :group_settings_item + element :group_members_item + element :general_settings_link + end + + def click_group_members_item + within_sidebar do + click_element(:group_members_item) + end + end + + def click_group_general_settings_item + hover_element(:group_settings_item) do + within_submenu(:group_sidebar_submenu) do + click_element(:general_settings_link) + end + end + end + end + end + end +end + +QA::Page::Group::Menu.prepend_if_ee('QA::EE::Page::Group::Menu') diff --git a/qa/qa/page/group/settings/general.rb b/qa/qa/page/group/settings/general.rb index 07b421f154a..efc8bbd7482 100644 --- a/qa/qa/page/group/settings/general.rb +++ b/qa/qa/page/group/settings/general.rb @@ -5,14 +5,99 @@ module QA module Group module Settings class General < QA::Page::Base + include ::QA::Page::Settings::Common + view 'app/views/groups/edit.html.haml' do element :permission_lfs_2fa_section end + view 'app/views/groups/settings/_permissions.html.haml' do element :save_permissions_changes_button end + + view 'app/views/groups/settings/_general.html.haml' do + element :group_name_field + element :save_name_visibility_settings_button + end + + view 'app/views/shared/_visibility_radios.html.haml' do + element :internal_radio, 'qa_selector: "#{visibility_level_label(level).downcase}_radio"' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck + end + + view 'app/views/groups/settings/_lfs.html.haml' do + element :lfs_checkbox + end + + view 'app/views/shared/_allow_request_access.html.haml' do + element :request_access_checkbox + end + + view 'app/views/groups/settings/_two_factor_auth.html.haml' do + element :require_2fa_checkbox + end + + view 'app/views/groups/settings/_project_creation_level.html.haml' do + element :project_creation_level_dropdown + end + + def set_group_name(name) + find_element(:group_name_field).send_keys([:command, 'a'], :backspace) + find_element(:group_name_field).set name + end + + def set_group_visibility(visibility) + find_element("#{visibility.downcase}_radio").click + end + + def click_save_name_visibility_settings_button + click_element(:save_name_visibility_settings_button) + end + + def set_lfs_enabled + expand_section :permission_lfs_2fa_section + check_element :lfs_checkbox + click_element :save_permissions_changes_button + end + + def set_lfs_disabled + expand_section :permission_lfs_2fa_section + uncheck_element :lfs_checkbox + click_element :save_permissions_changes_button + end + + def set_request_access_enabled + expand_section :permission_lfs_2fa_section + check_element :request_access_checkbox + click_element :save_permissions_changes_button + end + + def set_request_access_disabled + expand_section :permission_lfs_2fa_section + uncheck_element :request_access_checkbox + click_element :save_permissions_changes_button + end + + def set_require_2fa_enabled + expand_section :permission_lfs_2fa_section + check_element :require_2fa_checkbox + click_element :save_permissions_changes_button + end + + def set_require_2fa_disabled + expand_section :permission_lfs_2fa_section + uncheck_element :require_2fa_checkbox + click_element :save_permissions_changes_button + end + + def set_project_creation_level(value) + expand_section :permission_lfs_2fa_section + select_element(:project_creation_level_dropdown, value) + click_element :save_permissions_changes_button + end end end end end end + +QA::Page::Group::Settings::General.prepend_if_ee('QA::EE::Page::Group::Settings::General') diff --git a/qa/qa/page/group/sub_menus/common.rb b/qa/qa/page/group/sub_menus/common.rb new file mode 100644 index 00000000000..a378db80e4b --- /dev/null +++ b/qa/qa/page/group/sub_menus/common.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module QA + module Page + module Group + module SubMenus + module Common + def self.included(base) + base.class_eval do + view 'app/views/layouts/nav/sidebar/_group.html.haml' do + element :group_sidebar + end + end + end + + def hover_element(element) + within_sidebar do + find_element(element).hover + yield + end + end + + def within_sidebar + within_element(:group_sidebar) do + yield + end + end + + def within_submenu(element) + within_element(element) do + yield + end + end + end + end + end + end +end diff --git a/qa/qa/page/group/sub_menus/members.rb b/qa/qa/page/group/sub_menus/members.rb new file mode 100644 index 00000000000..c8b3f5bb422 --- /dev/null +++ b/qa/qa/page/group/sub_menus/members.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module QA + module Page + module Group + module SubMenus + class Members < Page::Base + include Page::Component::UsersSelect + + view 'app/views/groups/group_members/_new_group_member.html.haml' do + element :add_to_group_button + end + + view 'app/helpers/groups/group_members_helper.rb' do + element :member_select_field + end + + view 'app/views/shared/members/_member.html.haml' do + element :member_row + element :access_level_dropdown + element :delete_member_button + element :developer_access_level_link, 'qa_selector: "#{role.downcase}_access_level_link"' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck + end + + def add_member(username) + select_user :member_select_field, username + click_element :add_to_group_button + end + + def update_access_level(username, access_level) + within_element(:member_row, text: username) do + click_element :access_level_dropdown + click_element "#{access_level.downcase}_access_level_link" + end + end + + def remove_member(username) + page.accept_confirm do + within_element(:member_row, text: username) do + click_element :delete_member_button + end + end + end + end + end + end + end +end diff --git a/qa/qa/page/profile/two_factor_auth.rb b/qa/qa/page/profile/two_factor_auth.rb new file mode 100644 index 00000000000..a3ff5f603fa --- /dev/null +++ b/qa/qa/page/profile/two_factor_auth.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module QA + module Page + module Profile + class TwoFactorAuth < Page::Base + view 'app/assets/javascripts/pages/profiles/two_factor_auths/index.js' do + element :configure_it_later_button + end + + def click_configure_it_later_button + click_element :configure_it_later_button + end + end + end + end +end diff --git a/qa/qa/page/project/settings/members.rb b/qa/qa/page/project/settings/members.rb index 7fed93ca83f..2ef018fd983 100644 --- a/qa/qa/page/project/settings/members.rb +++ b/qa/qa/page/project/settings/members.rb @@ -6,6 +6,7 @@ module QA module Settings class Members < Page::Base include Page::Component::UsersSelect + include QA::Page::Component::Select2 view 'app/views/projects/project_members/_new_project_member.html.haml' do element :member_select_input @@ -16,10 +17,44 @@ module QA element :members_list end + view 'app/views/projects/project_members/index.html.haml' do + element :invite_group_tab + end + + view 'app/views/projects/project_members/_new_project_group.html.haml' do + element :group_select_field + element :invite_group_button + end + + view 'app/views/shared/members/_group.html.haml' do + element :group_row + element :delete_group_access_link + end + + def select_group(group_name) + click_element :group_select_field + search_and_select(group_name) + end + + def invite_group(group_name) + click_element :invite_group_tab + select_group(group_name) + click_element :invite_group_button + end + def add_member(username) select_user :member_select_input, username click_element :add_member_button end + + def remove_group(group_name) + click_element :invite_group_tab + page.accept_alert do + within_element(:group_row, text: group_name) do + click_element :delete_group_access_link + end + end + end end end end |