From e58491d1553f0c481eb5d4ea9df29acd94fe7147 Mon Sep 17 00:00:00 2001 From: Ian Baum <ibaum@gitlab.com> Date: Mon, 1 Nov 2021 15:28:09 -0500 Subject: [PATCH 1/7] Match address of host when checking whether to login * Makes sure we are on the login page of the desired host before deciding whether we need to re-login. Currently only checks if we're on the login page. For Geo specs, we need to sign into different hosts Changelog: fixed MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/73492 EE: true --- qa/qa/flow/login.rb | 7 ++----- qa/qa/page/base.rb | 4 ++++ qa/qa/page/main/menu.rb | 17 +++++++++++++---- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/qa/qa/flow/login.rb b/qa/qa/flow/login.rb index 5f7e0227ac5c36..10468165f19058 100644 --- a/qa/qa/flow/login.rb +++ b/qa/qa/flow/login.rb @@ -6,7 +6,7 @@ module Login module_function def while_signed_in(as: nil, address: :gitlab, admin: false) - Page::Main::Menu.perform(&:sign_out_if_signed_in) + Page::Main::Menu.perform {|menu| menu.sign_out_if_signed_in(address) } sign_in(as: as, address: address, admin: admin) @@ -23,10 +23,7 @@ def while_signed_in_as_admin(address: :gitlab) end def sign_in(as: nil, address: :gitlab, skip_page_validation: false, admin: false) - unless Page::Main::Login.perform(&:on_login_page?) - Page::Main::Menu.perform(&:sign_out) if Page::Main::Menu.perform(&:signed_in?) - Runtime::Browser.visit(address, Page::Main::Login) - end + Runtime::Browser.visit(address, Page::Main::Login) Page::Main::Login.perform do |login| if admin diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 69f58dcb8a593e..c48d278600af04 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -386,6 +386,10 @@ def wait_if_retry_later end end + def current_url + page.current_url + end + def self.path raise NotImplementedError end diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index e3bb585955b266..2a22679306eaed 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -99,8 +99,17 @@ def go_to_admin_area end end - def signed_in? - return false if Page::Main::Login.perform(&:on_login_page?) + def signed_in?(address = nil) + current_host = URI(page.current_url).host + + return false if Page::Main::Login.perform(&:on_login_page?) && current_host.eql?(address) + + unless address.nil? + Page::Main::Login.perform do |login| + desired_host = URI(Runtime::Scenario.send("#{address}_address")).host + return false unless current_host == desired_host # rubocop:disable Cop/AvoidReturnFromBlocks + end + end has_personal_area?(wait: 0) end @@ -125,8 +134,8 @@ def sign_out end end - def sign_out_if_signed_in - sign_out if signed_in? + def sign_out_if_signed_in(address = nil) + sign_out if signed_in?(address) end def click_edit_profile_link -- GitLab From 5bc0bfa56bcd1234137b9b1ef848a65cb2fdd171 Mon Sep 17 00:00:00 2001 From: Ian Baum <ibaum@gitlab.com> Date: Mon, 20 Dec 2021 14:04:47 -0600 Subject: [PATCH 2/7] Restore sign_in flow * Make sign_in logout again. Remove signout from while_signed_in instead --- qa/qa/flow/login.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/qa/qa/flow/login.rb b/qa/qa/flow/login.rb index 10468165f19058..62a807a1139d24 100644 --- a/qa/qa/flow/login.rb +++ b/qa/qa/flow/login.rb @@ -6,8 +6,6 @@ module Login module_function def while_signed_in(as: nil, address: :gitlab, admin: false) - Page::Main::Menu.perform {|menu| menu.sign_out_if_signed_in(address) } - sign_in(as: as, address: address, admin: admin) result = yield @@ -23,7 +21,10 @@ def while_signed_in_as_admin(address: :gitlab) end def sign_in(as: nil, address: :gitlab, skip_page_validation: false, admin: false) - Runtime::Browser.visit(address, Page::Main::Login) + unless Page::Main::Login.perform(&:on_login_page?) + Page::Main::Menu.perform(&:sign_out) if Page::Main::Menu.perform(&:signed_in?) + Runtime::Browser.visit(address, Page::Main::Login) + end Page::Main::Login.perform do |login| if admin -- GitLab From 5ad0a63ccf4ffadc4ea52725b88db357cb383887 Mon Sep 17 00:00:00 2001 From: Ian Baum <ibaum@gitlab.com> Date: Mon, 20 Dec 2021 16:39:02 -0600 Subject: [PATCH 3/7] Make on_login_page check for the host as well --- qa/qa/page/base.rb | 4 ++++ qa/qa/page/main/login.rb | 8 +++++++- qa/qa/page/main/menu.rb | 5 ++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index c48d278600af04..671348f2dc48ca 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -390,6 +390,10 @@ def current_url page.current_url end + def current_host + URI(current_url).host + end + def self.path raise NotImplementedError end diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index 5cba9d4bce4924..a82e734966e7a7 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -45,7 +45,13 @@ def can_sign_in? has_element?(:sign_in_button) end - def on_login_page? + def on_login_page?(address = nil) + unless address.nil? + desired_host = URI(Runtime::Scenario.send("#{address}_address")).host + + return false if current_host != desired_host + end + has_element?(:login_page, wait: 0) end diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index 2a22679306eaed..8d1db6c367d5fa 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -100,12 +100,11 @@ def go_to_admin_area end def signed_in?(address = nil) - current_host = URI(page.current_url).host - - return false if Page::Main::Login.perform(&:on_login_page?) && current_host.eql?(address) + return false if Page::Main::Login.perform {|p| p.on_login_page?(address) } unless address.nil? Page::Main::Login.perform do |login| + current_host = URI(page.current_url).host desired_host = URI(Runtime::Scenario.send("#{address}_address")).host return false unless current_host == desired_host # rubocop:disable Cop/AvoidReturnFromBlocks end -- GitLab From 8adac2b347ef88ecbebb79fd7be462a76c0d83ea Mon Sep 17 00:00:00 2001 From: Ian Baum <ibaum@gitlab.com> Date: Wed, 22 Dec 2021 11:49:02 -0600 Subject: [PATCH 4/7] Add missing address arg for sign_in check --- qa/qa/flow/login.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/qa/flow/login.rb b/qa/qa/flow/login.rb index 62a807a1139d24..953ef27a188b78 100644 --- a/qa/qa/flow/login.rb +++ b/qa/qa/flow/login.rb @@ -21,7 +21,7 @@ def while_signed_in_as_admin(address: :gitlab) end def sign_in(as: nil, address: :gitlab, skip_page_validation: false, admin: false) - unless Page::Main::Login.perform(&:on_login_page?) + unless Page::Main::Login.perform {|p| p.on_login_page?(address) } Page::Main::Menu.perform(&:sign_out) if Page::Main::Menu.perform(&:signed_in?) Runtime::Browser.visit(address, Page::Main::Login) end -- GitLab From 164dd89a6b1081ddec36a2385ed961a0edb14925 Mon Sep 17 00:00:00 2001 From: Tiffany Rea <trea@gitlab.com> Date: Wed, 29 Dec 2021 16:27:43 +0000 Subject: [PATCH 5/7] Apply 2 suggestion(s) to 2 file(s) --- qa/qa/flow/login.rb | 2 +- qa/qa/page/main/menu.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qa/qa/flow/login.rb b/qa/qa/flow/login.rb index 953ef27a188b78..81ed5bd1cf1ce6 100644 --- a/qa/qa/flow/login.rb +++ b/qa/qa/flow/login.rb @@ -21,7 +21,7 @@ def while_signed_in_as_admin(address: :gitlab) end def sign_in(as: nil, address: :gitlab, skip_page_validation: false, admin: false) - unless Page::Main::Login.perform {|p| p.on_login_page?(address) } + unless Page::Main::Login.perform { |p| p.on_login_page?(address) } Page::Main::Menu.perform(&:sign_out) if Page::Main::Menu.perform(&:signed_in?) Runtime::Browser.visit(address, Page::Main::Login) end diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index 8d1db6c367d5fa..05fa123adca67e 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -100,7 +100,7 @@ def go_to_admin_area end def signed_in?(address = nil) - return false if Page::Main::Login.perform {|p| p.on_login_page?(address) } + return false if Page::Main::Login.perform { |p| p.on_login_page?(address) } unless address.nil? Page::Main::Login.perform do |login| -- GitLab From ce74baf43adafd624922bf48b84a31ef6b181ca4 Mon Sep 17 00:00:00 2001 From: Ian Baum <ibaum@gitlab.com> Date: Thu, 30 Dec 2021 13:58:31 -0600 Subject: [PATCH 6/7] Clean up redirect behavior * Add a method to redirect to the login page if necessary --- qa/qa/flow/login.rb | 5 +++-- qa/qa/page/base.rb | 6 +----- qa/qa/page/main/login.rb | 13 ++++++------- qa/qa/page/main/menu.rb | 16 ++++------------ 4 files changed, 14 insertions(+), 26 deletions(-) diff --git a/qa/qa/flow/login.rb b/qa/qa/flow/login.rb index 81ed5bd1cf1ce6..b60f74fe9bff1d 100644 --- a/qa/qa/flow/login.rb +++ b/qa/qa/flow/login.rb @@ -21,9 +21,10 @@ def while_signed_in_as_admin(address: :gitlab) end def sign_in(as: nil, address: :gitlab, skip_page_validation: false, admin: false) - unless Page::Main::Login.perform { |p| p.on_login_page?(address) } + Page::Main::Login.perform { |p| p.redirect_to_login_page(address) } + + unless Page::Main::Login.perform(&:on_login_page?) Page::Main::Menu.perform(&:sign_out) if Page::Main::Menu.perform(&:signed_in?) - Runtime::Browser.visit(address, Page::Main::Login) end Page::Main::Login.perform do |login| diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 671348f2dc48ca..526dd25ccc9283 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -386,12 +386,8 @@ def wait_if_retry_later end end - def current_url - page.current_url - end - def current_host - URI(current_url).host + URI(page.current_url).host end def self.path diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index a82e734966e7a7..1555f3e024169c 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -45,13 +45,7 @@ def can_sign_in? has_element?(:sign_in_button) end - def on_login_page?(address = nil) - unless address.nil? - desired_host = URI(Runtime::Scenario.send("#{address}_address")).host - - return false if current_host != desired_host - end - + def on_login_page? has_element?(:login_page, wait: 0) end @@ -162,6 +156,11 @@ def sign_out_and_sign_in_as(user:) sign_in_using_credentials(user: user) end + def redirect_to_login_page(address) + desired_host = URI(Runtime::Scenario.send("#{address}_Address")).host + Runtime::Browser.visit(address, Page::Main::Login) if desired_host != current_host + end + private def sign_in_using_gitlab_credentials(user:, skip_page_validation: false) diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index 05fa123adca67e..e3bb585955b266 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -99,16 +99,8 @@ def go_to_admin_area end end - def signed_in?(address = nil) - return false if Page::Main::Login.perform { |p| p.on_login_page?(address) } - - unless address.nil? - Page::Main::Login.perform do |login| - current_host = URI(page.current_url).host - desired_host = URI(Runtime::Scenario.send("#{address}_address")).host - return false unless current_host == desired_host # rubocop:disable Cop/AvoidReturnFromBlocks - end - end + def signed_in? + return false if Page::Main::Login.perform(&:on_login_page?) has_personal_area?(wait: 0) end @@ -133,8 +125,8 @@ def sign_out end end - def sign_out_if_signed_in(address = nil) - sign_out if signed_in?(address) + def sign_out_if_signed_in + sign_out if signed_in? end def click_edit_profile_link -- GitLab From 6f07681c99251068b354c9a8801c0a45ed7e875d Mon Sep 17 00:00:00 2001 From: Ian Baum <ibaum@gitlab.com> Date: Thu, 30 Dec 2021 15:16:31 -0600 Subject: [PATCH 7/7] Fix typo --- qa/qa/page/main/login.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index 1555f3e024169c..f004107d7bd01b 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -157,7 +157,7 @@ def sign_out_and_sign_in_as(user:) end def redirect_to_login_page(address) - desired_host = URI(Runtime::Scenario.send("#{address}_Address")).host + desired_host = URI(Runtime::Scenario.send("#{address}_address")).host Runtime::Browser.visit(address, Page::Main::Login) if desired_host != current_host end -- GitLab