diff options
Diffstat (limited to 'qa/qa/page')
-rw-r--r-- | qa/qa/page/admin/settings/main.rb | 4 | ||||
-rw-r--r-- | qa/qa/page/base.rb | 4 | ||||
-rw-r--r-- | qa/qa/page/group/show.rb | 35 | ||||
-rw-r--r-- | qa/qa/page/main/login.rb | 83 | ||||
-rw-r--r-- | qa/qa/page/main/sign_up.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/menu/main.rb | 9 | ||||
-rw-r--r-- | qa/qa/page/menu/profile.rb | 7 | ||||
-rw-r--r-- | qa/qa/page/menu/side.rb | 3 | ||||
-rw-r--r-- | qa/qa/page/merge_request/show.rb | 22 | ||||
-rw-r--r-- | qa/qa/page/profile/ssh_keys.rb | 34 | ||||
-rw-r--r-- | qa/qa/page/project/activity.rb | 2 |
11 files changed, 143 insertions, 62 deletions
diff --git a/qa/qa/page/admin/settings/main.rb b/qa/qa/page/admin/settings/main.rb index db3387b4557..73034ffe0d8 100644 --- a/qa/qa/page/admin/settings/main.rb +++ b/qa/qa/page/admin/settings/main.rb @@ -6,11 +6,11 @@ module QA include QA::Page::Settings::Common view 'app/views/admin/application_settings/show.html.haml' do - element :repository_storage_settings + element :terms_settings end def expand_repository_storage(&block) - expand_section(:repository_storage_settings) do + expand_section(:terms_settings) do RepositoryStorage.perform(&block) end end diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 30e35bf7abb..a87536671c6 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -76,6 +76,10 @@ module QA find_element(name).set(content) end + def has_element?(name) + has_css?(element_selector_css(name)) + end + def within_element(name) page.within(element_selector_css(name)) do yield diff --git a/qa/qa/page/group/show.rb b/qa/qa/page/group/show.rb index 6747f7f10b6..74d20df76ba 100644 --- a/qa/qa/page/group/show.rb +++ b/qa/qa/page/group/show.rb @@ -5,14 +5,11 @@ module QA include Page::Component::GroupsFilter view 'app/views/groups/show.html.haml' do - element :new_project_or_subgroup_dropdown, '.new-project-subgroup' - element :new_project_or_subgroup_dropdown_toggle, '.dropdown-toggle' - element :new_project_option, /%li.*data:.*value: "new-project"/ - element :new_project_button, /%input.*data:.*action: "new-project"/ - element :new_subgroup_option, /%li.*data:.*value: "new-subgroup"/ - - # data-value and data-action get modified by JS for subgroup - element :new_subgroup_button, /%input.*\.js-new-group-child/ + element :new_project_or_subgroup_dropdown + element :new_project_or_subgroup_dropdown_toggle + element :new_project_option + element :new_subgroup_option + element :new_in_group_button end view 'app/assets/javascripts/groups/constants.js' do @@ -24,7 +21,7 @@ module QA end def has_new_project_or_subgroup_dropdown? - page.has_css?(element_selector_css(:new_project_or_subgroup_dropdown)) + has_element?(:new_project_or_subgroup_dropdown) end def has_subgroup?(name) @@ -36,31 +33,29 @@ module QA end def go_to_new_subgroup - click_new('subgroup') + select_kind :new_subgroup_option - find("input[data-action='new-subgroup']").click + click_element :new_in_group_button end def go_to_new_project - click_new('project') + select_kind :new_project_option - find("input[data-action='new-project']").click + click_element :new_in_group_button end private - def click_new(kind) - within '.new-project-subgroup' do - css = "li[data-value='new-#{kind}']" - + def select_kind(kind) + within_element(:new_project_or_subgroup_dropdown) do # May need to click again because it is possible to click the button quicker than the JS is bound wait(reload: false) do - find('.dropdown-toggle').click + click_element :new_project_or_subgroup_dropdown_toggle - page.has_css?(css) + has_element?(kind) end - find(css).click + click_element kind end end end diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index 08cf8da34fd..89542b49d0e 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -3,31 +3,32 @@ module QA module Main class Login < Page::Base view 'app/views/devise/passwords/edit.html.haml' do - element :password_field, 'password_field :password' - element :password_confirmation, 'password_field :password_confirmation' - element :change_password_button, 'submit "Change your password"' + element :password_field + element :password_confirmation + element :change_password_button end view 'app/views/devise/sessions/_new_base.html.haml' do - element :login_field, 'text_field :login' - element :password_field, 'password_field :password' - element :sign_in_button, 'submit "Sign in"' + element :login_field + element :password_field + element :sign_in_button end view 'app/views/devise/sessions/_new_ldap.html.haml' do - element :username_field, 'text_field_tag :username' - element :password_field, 'password_field_tag :password' - element :sign_in_button, 'submit_tag "Sign in"' + element :username_field + element :password_field + element :sign_in_button end view 'app/views/devise/shared/_tabs_ldap.html.haml' do - element :ldap_tab, "link_to server['label']" - element :standard_tab, "link_to 'Standard'" + element :ldap_tab + element :standard_tab + element :register_tab end view 'app/views/devise/shared/_tabs_normal.html.haml' do - element :sign_in_tab, /nav-link.*login-pane.*Sign in/ - element :register_tab, /nav-link.*register-pane.*Register/ + element :sign_in_tab + element :register_tab end def initialize @@ -35,7 +36,7 @@ module QA # we need to wait for the instance to start. That said, in some cases # we are already logged-in so we check both cases here. wait(max: 500) do - page.has_css?('.login-page') || + has_css?('.login-page') || Page::Menu::Main.act { has_personal_area?(wait: 0) } end end @@ -66,6 +67,8 @@ module QA end using_wait_time 0 do + set_initial_password_if_present + sign_in_using_gitlab_credentials(admin) end @@ -76,28 +79,44 @@ module QA '/users/sign_in' end + def has_sign_in_tab? + has_element?(:sign_in_tab) + end + + def has_ldap_tab? + has_element?(:ldap_tab) + end + + def has_standard_tab? + has_element?(:standard_tab) + end + def sign_in_tab? - page.has_button?('Sign in') + has_css?(".active", text: 'Sign in') end def ldap_tab? - page.has_link?('LDAP') + has_css?(".active", text: 'LDAP') + end + + def standard_tab? + has_css?(".active", text: 'Standard') end def switch_to_sign_in_tab - click_on 'Sign in' + click_element :sign_in_tab end def switch_to_register_tab - click_on 'Register' + click_element :register_tab end def switch_to_ldap_tab - click_on 'LDAP' + click_element :ldap_tab end def switch_to_standard_tab - click_on 'Standard' + click_element :standard_tab end private @@ -105,26 +124,26 @@ module QA def sign_in_using_ldap_credentials switch_to_ldap_tab - fill_in :username, with: Runtime::User.ldap_username - fill_in :password, with: Runtime::User.ldap_password - click_button 'Sign in' + fill_element :username_field, Runtime::User.ldap_username + fill_element :password_field, Runtime::User.ldap_password + click_element :sign_in_button end def sign_in_using_gitlab_credentials(user) - switch_to_sign_in_tab unless sign_in_tab? - switch_to_standard_tab if ldap_tab? + switch_to_sign_in_tab if has_sign_in_tab? + switch_to_standard_tab if has_standard_tab? - fill_in :user_login, with: user.username - fill_in :user_password, with: user.password - click_button 'Sign in' + fill_element :login_field, user.username + fill_element :password_field, user.password + click_element :sign_in_button end def set_initial_password_if_present - return unless page.has_content?('Change your password') + return unless has_content?('Change your password') - fill_in :user_password, with: Runtime::User.password - fill_in :user_password_confirmation, with: Runtime::User.password - click_button 'Change your password' + fill_element :password_field, Runtime::User.password + fill_element :password_confirmation, Runtime::User.password + click_element :change_password_button end end end diff --git a/qa/qa/page/main/sign_up.rb b/qa/qa/page/main/sign_up.rb index 33ab56236f4..64cd395de78 100644 --- a/qa/qa/page/main/sign_up.rb +++ b/qa/qa/page/main/sign_up.rb @@ -19,7 +19,7 @@ module QA fill_in :new_user_password, with: user.password click_button 'Register' - Page::Menu::Main.act { has_personal_area? } + Page::Menu::Main.act { assert_has_personal_area } end end end diff --git a/qa/qa/page/menu/main.rb b/qa/qa/page/menu/main.rb index 36e7285f7b7..2ae86bbc7dc 100644 --- a/qa/qa/page/menu/main.rb +++ b/qa/qa/page/menu/main.rb @@ -61,8 +61,13 @@ module QA end def has_personal_area?(wait: Capybara.default_max_wait_time) - # No need to wait, either we're logged-in, or not. - using_wait_time(wait) { page.has_selector?('.qa-user-avatar') } + using_wait_time(wait) do + page.has_selector?(element_selector_css(:user_avatar)) + end + end + + def assert_has_personal_area + raise "Failed to sign in" unless has_personal_area? end private diff --git a/qa/qa/page/menu/profile.rb b/qa/qa/page/menu/profile.rb index 95e88d863e4..7e24fa85c33 100644 --- a/qa/qa/page/menu/profile.rb +++ b/qa/qa/page/menu/profile.rb @@ -6,6 +6,7 @@ module QA element :access_token_link, 'link_to profile_personal_access_tokens_path' element :access_token_title, 'Access Tokens' element :top_level_items, '.sidebar-top-level-items' + element :ssh_keys, 'SSH Keys' end def click_access_tokens @@ -14,6 +15,12 @@ module QA end end + def click_ssh_keys + within_sidebar do + click_link('SSH Keys') + end + end + private def within_sidebar diff --git a/qa/qa/page/menu/side.rb b/qa/qa/page/menu/side.rb index 354ccec2a5a..a1eedfea42e 100644 --- a/qa/qa/page/menu/side.rb +++ b/qa/qa/page/menu/side.rb @@ -6,6 +6,7 @@ module QA element :settings_item element :settings_link, 'link_to edit_project_path' element :repository_link, "title: _('Repository')" + element :link_pipelines element :pipelines_settings_link, "title: _('CI / CD')" element :operations_kubernetes_link, "title: _('Kubernetes')" element :issues_link, /link_to.*shortcuts-issues/ @@ -49,7 +50,7 @@ module QA def click_ci_cd_pipelines within_sidebar do - click_link('CI / CD') + click_element :link_pipelines end end diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index c200f14f4fb..d9254d89541 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -5,6 +5,9 @@ module QA view 'app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue' do element :merge_button element :fast_forward_message, 'Fast-forward merge without a merge commit' + element :merge_moment_dropdown + element :merge_when_pipeline_succeeds_option + element :merge_immediately_option end view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue' do @@ -16,7 +19,7 @@ module QA element :no_fast_forward_message, 'Fast-forward merge is not possible' end - view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_squash_before_merge.vue' do + view 'app/assets/javascripts/vue_merge_request_widget/components/states/squash_before_merge.vue' do element :squash_checkbox end @@ -27,7 +30,20 @@ module QA def has_merge_button? refresh - has_selector?('.accept-merge-request') + has_css?(element_selector_css(:merge_button)) + end + + def has_merge_options? + has_css?(element_selector_css(:merge_moment_dropdown)) + end + + def merge_immediately + if has_merge_options? + click_element :merge_moment_dropdown + click_element :merge_immediately_option + else + click_element :merge_button + end end def rebase! @@ -59,7 +75,7 @@ module QA !first(element_selector_css(:merge_button)).disabled? end - click_element :merge_button + merge_immediately wait(reload: false) do has_text?('The changes were merged into') diff --git a/qa/qa/page/profile/ssh_keys.rb b/qa/qa/page/profile/ssh_keys.rb new file mode 100644 index 00000000000..ce1813b14d0 --- /dev/null +++ b/qa/qa/page/profile/ssh_keys.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module QA + module Page + module Profile + class SSHKeys < Page::Base + view 'app/views/profiles/keys/_form.html.haml' do + element :key_title_field + element :key_public_key_field + element :add_key_button + end + + view 'app/views/profiles/keys/_key_details.html.haml' do + element :delete_key_button + end + + def add_key(public_key, title) + fill_element :key_public_key_field, public_key + fill_element :key_title_field, title + + click_element :add_key_button + end + + def remove_key(title) + click_link(title) + + accept_alert do + click_element :delete_key_button + end + end + end + end + end +end diff --git a/qa/qa/page/project/activity.rb b/qa/qa/page/project/activity.rb index 0196922c889..a0500b4d31a 100644 --- a/qa/qa/page/project/activity.rb +++ b/qa/qa/page/project/activity.rb @@ -3,7 +3,7 @@ module QA module Project class Activity < Page::Base view 'app/views/shared/_event_filter.html.haml' do - element :push_events, "event_filter_link EventFilter.push, _('Push events')" + element :push_events, "event_filter_link EventFilter::PUSH, _('Push events')" end def go_to_push_events |