diff options
Diffstat (limited to 'qa/qa')
-rw-r--r-- | qa/qa/factory/api_fabricator.rb | 8 | ||||
-rw-r--r-- | qa/qa/factory/resource/fork.rb | 43 | ||||
-rw-r--r-- | qa/qa/factory/resource/user.rb | 36 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb | 2 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb | 6 |
5 files changed, 53 insertions, 42 deletions
diff --git a/qa/qa/factory/api_fabricator.rb b/qa/qa/factory/api_fabricator.rb index b1cfb6c9783..887150cadf1 100644 --- a/qa/qa/factory/api_fabricator.rb +++ b/qa/qa/factory/api_fabricator.rb @@ -52,14 +52,18 @@ module QA end def api_get - url = Runtime::API::Request.new(api_client, api_get_path).url + process_api_response(parse_body(api_get_from(api_get_path))) + end + + def api_get_from(get_path) + url = Runtime::API::Request.new(api_client, get_path).url response = get(url) unless response.code == HTTP_STATUS_OK raise ResourceNotFoundError, "Resource at #{url} could not be found (#{response.code}): `#{response}`." end - process_api_response(parse_body(response)) + response end def api_post diff --git a/qa/qa/factory/resource/fork.rb b/qa/qa/factory/resource/fork.rb index b1e874af893..d9bc44c9eb6 100644 --- a/qa/qa/factory/resource/fork.rb +++ b/qa/qa/factory/resource/fork.rb @@ -15,44 +15,17 @@ module QA end end - def visit_project_with_retry - # The user intermittently fails to stay signed in after visiting the - # project page. The new user is registered and then signs in and a - # screenshot shows that signing in was successful. Then the project - # page is visited but a screenshot shows the user is no longer signed - # in. It's difficult to reproduce locally but GDK logs don't seem to - # show anything unexpected. This method attempts to work around the - # problem and capture data to help troubleshoot. - - Capybara::Screenshot.screenshot_and_save_page - - start = Time.now - - while Time.now - start < 20 - push.project.visit! - - puts "Visited project page" - Capybara::Screenshot.screenshot_and_save_page - - return if Page::Main::Menu.act { has_personal_area?(wait: 0) } - - puts "Not signed in. Attempting to sign in again." - Capybara::Screenshot.screenshot_and_save_page - - Runtime::Browser.visit(:gitlab, Page::Main::Login) - - Page::Main::Login.perform do |login| - login.sign_in_using_credentials(user) - end - end - - raise "Failed to load project page and stay logged in" - end - def fabricate! populate(:push, :user) - visit_project_with_retry + # Sign out as admin and sign is as the fork user + Page::Main::Menu.perform(&:sign_out) + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.perform do |login| + login.sign_in_using_credentials(user) + end + + push.project.visit! Page::Project::Show.perform(&:fork_project) diff --git a/qa/qa/factory/resource/user.rb b/qa/qa/factory/resource/user.rb index e361face1f0..68faadddd1c 100644 --- a/qa/qa/factory/resource/user.rb +++ b/qa/qa/factory/resource/user.rb @@ -50,6 +50,42 @@ module QA end end end + + def fabricate_via_api! + resource_web_url(api_get) + rescue ResourceNotFoundError + super + end + + def api_get_path + "/users/#{fetch_id(username)}" + end + + def api_post_path + '/users' + end + + def api_post_body + { + email: email, + password: password, + username: username, + name: name, + skip_confirmation: true + } + end + + private + + def fetch_id(username) + users = parse_body(api_get_from("/users?username=#{username}")) + + unless users.size == 1 && users.first[:username] == username + raise ResourceNotFoundError, "Expected one user with username #{username} but found: `#{users}`." + end + + users.first[:id] + end end end end diff --git a/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb index 44071ec3e45..4f960ee26a9 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/login/register_spec.rb @@ -5,7 +5,7 @@ module QA it 'user registers and logs in' do Runtime::Browser.visit(:gitlab, Page::Main::Login) - Factory::Resource::User.fabricate! + Factory::Resource::User.fabricate_via_browser_ui! # TODO, since `Signed in successfully` message was removed # this is the only way to tell if user is signed in correctly. diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb index 7bf26c22fa6..2cd5bf01c1f 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb @@ -5,18 +5,16 @@ module QA describe 'Add project member' do it 'user adds project member' do Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.perform(&:sign_in_using_credentials) user = Factory::Resource::User.fabricate! - Page::Main::Menu.perform { |main| main.sign_out } - Page::Main::Login.act { sign_in_using_credentials } - project = Factory::Resource::Project.fabricate! do |resource| resource.name = 'add-member-project' end project.visit! - Page::Project::Menu.act { click_members_settings } + Page::Project::Menu.perform(&:click_members_settings) Page::Project::Settings::Members.perform do |page| page.add_member(user.username) end |