summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanad Liaquat <sliaquat@gitlab.com>2019-09-11 19:03:19 +0500
committerSanad Liaquat <sliaquat@gitlab.com>2019-09-11 19:11:53 +0500
commitbe1dbcfd0bebf8460af238f1f692e9d9e0b06118 (patch)
tree3b6742bf36bb95b5def21ed2a445bc91cdcfcf36
parent0813d1543114883e8ec84cecb5495a3cd9c1f332 (diff)
downloadgitlab-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
-rw-r--r--app/assets/javascripts/pages/profiles/two_factor_auths/index.js2
-rw-r--r--app/helpers/groups/group_members_helper.rb2
-rw-r--r--app/views/groups/group_members/_new_group_member.html.haml2
-rw-r--r--app/views/groups/settings/_general.html.haml4
-rw-r--r--app/views/groups/settings/_lfs.html.haml2
-rw-r--r--app/views/groups/settings/_project_creation_level.html.haml2
-rw-r--r--app/views/groups/settings/_two_factor_auth.html.haml2
-rw-r--r--app/views/projects/project_members/_new_project_group.html.haml4
-rw-r--r--app/views/projects/project_members/index.html.haml2
-rw-r--r--app/views/shared/_allow_request_access.html.haml2
-rw-r--r--app/views/shared/_visibility_radios.html.haml2
-rw-r--r--app/views/shared/members/_group.html.haml4
-rw-r--r--app/views/shared/members/_member.html.haml8
-rw-r--r--qa/qa.rb7
-rw-r--r--qa/qa/page/group/menu.rb33
-rw-r--r--qa/qa/page/group/settings/general.rb85
-rw-r--r--qa/qa/page/group/sub_menus/common.rb38
-rw-r--r--qa/qa/page/group/sub_menus/members.rb48
-rw-r--r--qa/qa/page/profile/two_factor_auth.rb17
-rw-r--r--qa/qa/page/project/settings/members.rb35
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) }
diff --git a/qa/qa.rb b/qa/qa.rb
index 9bf28d396ba..e3955e70a15 100644
--- a/qa/qa.rb
+++ b/qa/qa.rb
@@ -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