Commit d1948d0a authored by Andrejs Cunskis's avatar Andrejs Cunskis

Merge branch 'acunskis-fix-pat-creation' into 'master'

E2E: Do not assign nil value to token attribute when creating PAT

See merge request gitlab-org/gitlab!71170
parents f3401aac e1d060e3
...@@ -8,7 +8,7 @@ module QA ...@@ -8,7 +8,7 @@ module QA
attr_accessor :name attr_accessor :name
# The user for which the personal access token is to be created # The user for which the personal access token is to be created
# This *could* be different than the api_client.user or the api_user provided by the QA::Resource::ApiFabricator module # This *could* be different than the api_client.user or the api_user provided by the QA::Resource::ApiFabricator
attr_writer :user attr_writer :user
attribute :token attribute :token
...@@ -17,7 +17,9 @@ module QA ...@@ -17,7 +17,9 @@ module QA
# If Runtime::Env.admin_personal_access_token is provided, fabricate via the API, # If Runtime::Env.admin_personal_access_token is provided, fabricate via the API,
# else, fabricate via the browser. # else, fabricate via the browser.
def fabricate_via_api! def fabricate_via_api!
@token = QA::Resource::PersonalAccessTokenCache.get_token_for_username(user.username) QA::Resource::PersonalAccessTokenCache.get_token_for_username(user.username).tap do |cached_token|
@token = cached_token if cached_token
end
return if @token return if @token
resource = if Runtime::Env.admin_personal_access_token && !@user.nil? resource = if Runtime::Env.admin_personal_access_token && !@user.nil?
...@@ -28,7 +30,7 @@ module QA ...@@ -28,7 +30,7 @@ module QA
fabricate! fabricate!
end end
QA::Resource::PersonalAccessTokenCache.set_token_for_username(user.username, self.token) QA::Resource::PersonalAccessTokenCache.set_token_for_username(user.username, token)
resource resource
end end
......
...@@ -16,17 +16,21 @@ module QA ...@@ -16,17 +16,21 @@ module QA
enable_ip_limits if ip_limits enable_ip_limits if ip_limits
end end
def personal_access_token # Personal access token
@personal_access_token ||= begin #
# you can set the environment variable GITLAB_QA_ACCESS_TOKEN # It is possible to set the environment variable GITLAB_QA_ACCESS_TOKEN
# to use a specific access token rather than create one from the UI # to use a specific access token rather than create one from the UI
# unless a specific user has been passed # unless a specific user has been passed
@user.nil? ? Runtime::Env.personal_access_token ||= create_personal_access_token : create_personal_access_token #
# @return [String]
def personal_access_token
@personal_access_token ||= if user.nil?
Runtime::Env.personal_access_token ||= create_personal_access_token
else
create_personal_access_token
end end
if @user&.admin? Runtime::Env.admin_personal_access_token = @personal_access_token if user&.admin? # rubocop:disable Cop/UserAdmin
Runtime::Env.admin_personal_access_token = @personal_access_token
end
@personal_access_token @personal_access_token
end end
...@@ -82,7 +86,17 @@ module QA ...@@ -82,7 +86,17 @@ module QA
Page::Main::Menu.perform(&:sign_out) Page::Main::Menu.perform(&:sign_out)
end end
# Create PAT
#
# Use api if admin personal access token is present and skip any UI actions otherwise perform creation via UI
#
# @return [String]
def create_personal_access_token def create_personal_access_token
if Runtime::Env.admin_personal_access_token
Resource::PersonalAccessToken.fabricate_via_api! do |pat|
pat.user = user
end.token
else
signed_in_initially = Page::Main::Menu.perform(&:signed_in?) signed_in_initially = Page::Main::Menu.perform(&:signed_in?)
Page::Main::Menu.perform(&:sign_out) if @is_new_session && signed_in_initially Page::Main::Menu.perform(&:sign_out) if @is_new_session && signed_in_initially
...@@ -107,4 +121,5 @@ module QA ...@@ -107,4 +121,5 @@ module QA
end end
end end
end 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