From 8acbce179057663c57b0f7eace0956ed42ee2fd0 Mon Sep 17 00:00:00 2001
From: Valerie Burton <vburton@gitlab.com>
Date: Mon, 10 Jan 2022 04:07:13 +0000
Subject: [PATCH] Fix and Refactor invite_group Method and Update
 invite_group_to_project_spec

---
 qa/qa/page/component/invite_members_modal.rb  | 45 ++++++++++---------
 .../project/invite_group_to_project_spec.rb   | 13 +++---
 2 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/qa/qa/page/component/invite_members_modal.rb b/qa/qa/page/component/invite_members_modal.rb
index 138224cee9ed6..ca6862ccb0278 100644
--- a/qa/qa/page/component/invite_members_modal.rb
+++ b/qa/qa/page/component/invite_members_modal.rb
@@ -47,40 +47,43 @@ def add_member(username, access_level = 'Developer')
             fill_element :members_token_select_input, username
             Support::WaitForRequests.wait_for_requests
             click_button username
-
-            # Guest option is selected by default, skipping these steps if desired option is 'Guest'
-            unless access_level == 'Guest'
-              click_element :access_level_dropdown
-              click_button access_level
-            end
-
-            click_element :invite_button
+            set_access_level(access_level)
           end
 
-          Support::WaitForRequests.wait_for_requests
-
-          page.refresh
+          send_invite
         end
 
-        def invite_group(group_name, group_access = Resource::Members::AccessLevel::GUEST)
+        def invite_group(group_name, access_level = 'Guest')
           open_invite_group_modal
 
-          fill_element :access_level_dropdown, with: group_access
+          within_element(:invite_members_modal_content) do
+            click_button 'Select a group'
 
-          click_button 'Select a group'
+            # Helps stabilize race condition with concurrent group API calls while searching
+            # TODO: Replace with `fill_element :group_select_dropdown_search_field, group_name` when this bug is resolved: https://gitlab.com/gitlab-org/gitlab/-/issues/349379
+            send_keys_to_element(:group_select_dropdown_search_field, group_name)
 
-          # Helps stabilize race condition with concurrent group API calls while searching
-          # TODO: Replace with `fill_element :group_select_dropdown_search_field, group_name` when this bug is resolved: https://gitlab.com/gitlab-org/gitlab/-/issues/349379
-          send_keys_to_element(:group_select_dropdown_search_field, group_name)
+            Support::WaitForRequests.wait_for_requests
+            click_button group_name
+            set_access_level(access_level)
+          end
 
-          Support::WaitForRequests.wait_for_requests
+          send_invite
+        end
 
-          click_button group_name
+        private
 
-          click_element :invite_button
+        def set_access_level(access_level)
+          # Guest option is selected by default, skipping these steps if desired option is 'Guest'
+          unless access_level == 'Guest'
+            click_element :access_level_dropdown
+            click_button access_level
+          end
+        end
 
+        def send_invite
+          click_element :invite_button
           Support::WaitForRequests.wait_for_requests
-
           page.refresh
         end
       end
diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/invite_group_to_project_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/invite_group_to_project_spec.rb
index fd1e8fee2807f..6997447411a6d 100644
--- a/qa/qa/specs/features/browser_ui/1_manage/project/invite_group_to_project_spec.rb
+++ b/qa/qa/specs/features/browser_ui/1_manage/project/invite_group_to_project_spec.rb
@@ -5,10 +5,10 @@ module QA
   RSpec.describe 'Manage', :requires_admin, :transient, issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/349379' do
     describe 'Invite group' do
       shared_examples 'invites group to project' do
-        it 'verifies group is added and members can access project' do
+        it 'verifies group is added and members can access project with correct access level' do
           Page::Project::Menu.perform(&:click_members)
           Page::Project::Members.perform do |project_members|
-            project_members.invite_group(group.path)
+            project_members.invite_group(group.path, 'Developer')
 
             expect(project_members).to have_group(group.path)
           end
@@ -16,7 +16,7 @@ module QA
           Flow::Login.sign_in(as: @user)
 
           Page::Dashboard::Projects.perform do |projects|
-            expect(projects).to have_project_with_access_role(project.name, 'Guest')
+            expect(projects).to have_project_with_access_role(project.name, 'Developer')
           end
 
           project.visit!
@@ -28,13 +28,13 @@ module QA
       end
 
       before(:context) do
+        Runtime::Feature.enable(:invite_members_group_modal)
         @user = Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1)
       end
 
       before do
-        Runtime::Feature.enable(:invite_members_group_modal)
         Flow::Login.sign_in
-        group.add_member(@user, Resource::Members::AccessLevel::GUEST)
+        group.add_member(@user, Resource::Members::AccessLevel::MAINTAINER)
         project.visit!
       end
 
@@ -78,6 +78,9 @@ module QA
       after do
         project&.remove_via_api!
         group&.remove_via_api!
+      end
+
+      after(:context) do
         Runtime::Feature.disable(:invite_members_group_modal)
       end
     end
-- 
GitLab