diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-18 14:14:39 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-09-18 14:14:39 +0000 |
commit | 1eb82b65c554f21d83447f895a6208905fabe112 (patch) | |
tree | ab12f01b3dc46f11c02afea1e470a78f06ca70c2 /qa | |
parent | 4ab54c2233e91f60a80e5b6fa2181e6899fdcc3e (diff) | |
download | gitlab-ce-stable-branch-foss-test.tar.gz |
Add latest changes from gitlab-org/gitlab@12-3-auto-deploy-20190916stable-branch-foss-test
Diffstat (limited to 'qa')
-rw-r--r-- | qa/qa.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/admin/settings/general.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/main/login.rb | 9 | ||||
-rw-r--r-- | qa/qa/page/main/menu.rb | 6 | ||||
-rw-r--r-- | qa/qa/page/project/settings/mirroring_repositories.rb | 10 | ||||
-rw-r--r-- | qa/qa/page/project/settings/protected_branches.rb | 37 | ||||
-rw-r--r-- | qa/qa/page/project/wiki/git_access.rb | 13 | ||||
-rw-r--r-- | qa/qa/resource/group.rb | 11 | ||||
-rw-r--r-- | qa/qa/resource/members.rb | 28 | ||||
-rw-r--r-- | qa/qa/resource/project.rb | 10 | ||||
-rw-r--r-- | qa/qa/resource/protected_branch.rb | 35 | ||||
-rw-r--r-- | qa/qa/resource/repository/project_push.rb | 4 | ||||
-rw-r--r-- | qa/qa/resource/repository/wiki_push.rb | 9 | ||||
-rw-r--r-- | qa/qa/resource/wiki.rb | 9 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb | 20 |
15 files changed, 89 insertions, 116 deletions
@@ -61,7 +61,6 @@ module QA autoload :KubernetesCluster, 'qa/resource/kubernetes_cluster' autoload :User, 'qa/resource/user' autoload :ProjectMilestone, 'qa/resource/project_milestone' - autoload :Members, 'qa/resource/members' autoload :Wiki, 'qa/resource/wiki' autoload :File, 'qa/resource/file' autoload :Fork, 'qa/resource/fork' @@ -275,7 +274,6 @@ module QA autoload :Edit, 'qa/page/project/wiki/edit' autoload :New, 'qa/page/project/wiki/new' autoload :Show, 'qa/page/project/wiki/show' - autoload :GitAccess, 'qa/page/project/wiki/git_access' end module WebIDE diff --git a/qa/qa/page/admin/settings/general.rb b/qa/qa/page/admin/settings/general.rb index 150775f57d2..93b290f7e03 100644 --- a/qa/qa/page/admin/settings/general.rb +++ b/qa/qa/page/admin/settings/general.rb @@ -7,7 +7,7 @@ module QA class General < Page::Base include QA::Page::Settings::Common - view 'app/views/admin/application_settings/general.html.haml' do + view 'app/views/admin/application_settings/show.html.haml' do element :account_and_limit_settings end diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index ca93663dba2..65d83926f38 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -44,7 +44,7 @@ module QA def sign_in_using_credentials(user = nil) # Don't try to log-in if we're already logged-in - return if Page::Main::Menu.perform(&:signed_in?) + return if Page::Main::Menu.perform { |menu| menu.has_personal_area?(wait: 0) } using_wait_time 0 do set_initial_password_if_present @@ -75,7 +75,10 @@ module QA end def sign_in_using_ldap_credentials(user) - Page::Main::Menu.perform(&:sign_out_if_signed_in) + # Log out if already logged in + Page::Main::Menu.perform do |menu| + menu.sign_out if menu.has_personal_area?(wait: 0) + end using_wait_time 0 do set_initial_password_if_present @@ -146,7 +149,7 @@ module QA end def sign_out_and_sign_in_as(user:) - Menu.perform(&:sign_out_if_signed_in) + Menu.perform(&:sign_out) has_sign_in_tab? sign_in_using_credentials(user) end diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index 751b67d7695..4676dc8d077 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -55,10 +55,6 @@ module QA within_top_menu { click_element :admin_area_link } end - def signed_in? - has_personal_area?(wait: 0) - end - def sign_out within_user_menu do click_element :sign_out_link @@ -66,7 +62,7 @@ module QA end def sign_out_if_signed_in - sign_out if signed_in? + sign_out if has_personal_area?(wait: 0) end def click_settings_link diff --git a/qa/qa/page/project/settings/mirroring_repositories.rb b/qa/qa/page/project/settings/mirroring_repositories.rb index 441235afca8..e3afaceda80 100644 --- a/qa/qa/page/project/settings/mirroring_repositories.rb +++ b/qa/qa/page/project/settings/mirroring_repositories.rb @@ -13,8 +13,8 @@ module QA view 'app/views/projects/mirrors/_mirror_repos.html.haml' do element :mirror_repository_url_input element :mirror_repository_button - element :mirror_repository_url_cell - element :mirror_last_update_at_cell + element :mirror_repository_url + element :mirror_last_update_at element :mirrored_repository_row end @@ -64,21 +64,21 @@ module QA wait(interval: 1) do within_element_by_index(:mirrored_repository_row, row_index) do - last_update = find_element(:mirror_last_update_at_cell, wait: 0) + last_update = find_element(:mirror_last_update_at, wait: 0) last_update.has_text?('just now') || last_update.has_text?('seconds') end end # Fail early if the page still shows that there has been no update within_element_by_index(:mirrored_repository_row, row_index) do - find_element(:mirror_last_update_at_cell, wait: 0).assert_no_text('Never') + find_element(:mirror_last_update_at, wait: 0).assert_no_text('Never') end end private def find_repository_row_index(target_url) - all_elements(:mirror_repository_url_cell).index do |url| + all_elements(:mirror_repository_url).index do |url| # The url might be a sanitized url but the target_url won't be so # we compare just the paths instead of the full url URI.parse(url.text).path == target_url.path diff --git a/qa/qa/page/project/settings/protected_branches.rb b/qa/qa/page/project/settings/protected_branches.rb index d1d2f302013..1e707f1d315 100644 --- a/qa/qa/page/project/settings/protected_branches.rb +++ b/qa/qa/page/project/settings/protected_branches.rb @@ -25,10 +25,6 @@ module QA element :protected_branches_list end - view 'app/views/projects/protected_branches/shared/_create_protected_branch.html.haml' do - element :protect_button - end - def select_branch(branch_name) click_element :protected_branch_select @@ -37,31 +33,40 @@ module QA end end - def select_allowed_to_merge(allowed) - select_allowed(:merge, allowed) + def allow_no_one_to_push + go_to_allow(:push, 'No one') + end + + def allow_devs_and_maintainers_to_push + go_to_allow(:push, 'Developers + Maintainers') end - def select_allowed_to_push(allowed) - select_allowed(:push, allowed) + # @deprecated + alias_method :allow_devs_and_masters_to_push, :allow_devs_and_maintainers_to_push + + def allow_no_one_to_merge + go_to_allow(:merge, 'No one') end + def allow_devs_and_maintainers_to_merge + go_to_allow(:merge, 'Developers + Maintainers') + end + + # @deprecated + alias_method :allow_devs_and_masters_to_merge, :allow_devs_and_maintainers_to_merge + def protect_branch - click_element :protect_button + click_on 'Protect' end private - def select_allowed(action, allowed) + def go_to_allow(action, text) click_element :"allowed_to_#{action}_select" - allowed[:roles] = Resource::ProtectedBranch::Roles::NO_ONE unless allowed.key?(:roles) - within_element(:"allowed_to_#{action}_dropdown") do - click_on allowed[:roles] + click_on text end - - # Click the select element again to close the dropdown - click_element :protected_branch_select end end end diff --git a/qa/qa/page/project/wiki/git_access.rb b/qa/qa/page/project/wiki/git_access.rb deleted file mode 100644 index 28cb21be4e3..00000000000 --- a/qa/qa/page/project/wiki/git_access.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module QA - module Page - module Project - module Wiki - class GitAccess < Page::Base - include Page::Component::LegacyClonePanel - end - end - end - end -end diff --git a/qa/qa/resource/group.rb b/qa/qa/resource/group.rb index e11bd5728fb..b5beba64c61 100644 --- a/qa/qa/resource/group.rb +++ b/qa/qa/resource/group.rb @@ -3,8 +3,6 @@ module QA module Resource class Group < Base - include Members - attr_accessor :path, :description attribute :sandbox do @@ -50,10 +48,19 @@ module QA super end + def add_member(user, access_level = '30') + # 30 = developer access + post Runtime::API::Request.new(api_client, api_members_path).url, { user_id: user.id, access_level: access_level } + end + def api_get_path "/groups/#{CGI.escape("#{sandbox.path}/#{path}")}" end + def api_members_path + "#{api_get_path}/members" + end + def api_post_path '/groups' end diff --git a/qa/qa/resource/members.rb b/qa/qa/resource/members.rb deleted file mode 100644 index d70a2907523..00000000000 --- a/qa/qa/resource/members.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -module QA - module Resource - # - # Included in Resource::Project and Resource::Group to allow changes to - # project/group membership - # - module Members - def add_member(user, access_level = AccessLevel::DEVELOPER) - post Runtime::API::Request.new(api_client, api_members_path).url, { user_id: user.id, access_level: access_level } - end - - def api_members_path - "#{api_get_path}/members" - end - - class AccessLevel - NO_ACCESS = 0 - GUEST = 10 - REPORTER = 20 - DEVELOPER = 30 - MAINTAINER = 40 - OWNER = 50 - end - end - end -end diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb index a0389390c83..2e49f69bd55 100644 --- a/qa/qa/resource/project.rb +++ b/qa/qa/resource/project.rb @@ -6,7 +6,6 @@ module QA module Resource class Project < Base include Events::Project - include Members attr_writer :initialize_with_readme attr_writer :visibility @@ -76,6 +75,11 @@ module QA super end + def add_member(user, access_level = '30') + # 30 = developer access + post Runtime::API::Request.new(api_client, api_members_path).url, { user_id: user.id, access_level: access_level } + end + def api_get_path "/projects/#{CGI.escape(path_with_namespace)}" end @@ -108,10 +112,6 @@ module QA post_body end - def share_with_group(invitee, access_level = Resource::Members::AccessLevel::DEVELOPER) - post Runtime::API::Request.new(api_client, "/projects/#{id}/share").url, { group_id: invitee.id, group_access: access_level } - end - private def transform_api_resource(api_resource) diff --git a/qa/qa/resource/protected_branch.rb b/qa/qa/resource/protected_branch.rb index f0cef624e0b..c27647cf3ce 100644 --- a/qa/qa/resource/protected_branch.rb +++ b/qa/qa/resource/protected_branch.rb @@ -3,7 +3,7 @@ module QA module Resource class ProtectedBranch < Base - attr_accessor :branch_name, :allowed_to_push, :allowed_to_merge, :protected + attr_accessor :branch_name, :allow_to_push, :allow_to_merge, :protected attribute :project do Project.fabricate_via_api! do |resource| @@ -25,12 +25,8 @@ module QA def initialize @branch_name = 'test/branch' - @allowed_to_push = { - roles: Resource::ProtectedBranch::Roles::DEVS_AND_MAINTAINERS - } - @allowed_to_merge = { - roles: Resource::ProtectedBranch::Roles::DEVS_AND_MAINTAINERS - } + @allow_to_push = true + @allow_to_merge = true @protected = false end @@ -39,14 +35,29 @@ module QA project.wait_for_push_new_branch @branch_name + # The upcoming process will make it access the Protected Branches page, + # select the already created branch and protect it according + # to `allow_to_push` variable. + return branch unless @protected + project.visit! Page::Project::Menu.perform(&:go_to_repository_settings) Page::Project::Settings::Repository.perform do |setting| setting.expand_protected_branches do |page| page.select_branch(branch_name) - page.select_allowed_to_merge(allowed_to_merge) - page.select_allowed_to_push(allowed_to_push) + + if allow_to_push + page.allow_devs_and_maintainers_to_push + else + page.allow_no_one_to_push + end + + if allow_to_merge + page.allow_devs_and_maintainers_to_merge + else + page.allow_no_one_to_merge + end page.wait(reload: false) do !page.first('.btn-success').disabled? @@ -68,12 +79,6 @@ module QA def api_delete_path "/projects/#{@project.api_resource[:id]}/protected_branches/#{@branch_name}" end - - class Roles - NO_ONE = 'No one' - DEVS_AND_MAINTAINERS = 'Developers + Maintainers' - MAINTAINERS = 'Maintainers' - end end end end diff --git a/qa/qa/resource/repository/project_push.rb b/qa/qa/resource/repository/project_push.rb index f79bb035c46..c84ade3a140 100644 --- a/qa/qa/resource/repository/project_push.rb +++ b/qa/qa/resource/repository/project_push.rb @@ -4,12 +4,11 @@ module QA module Resource module Repository class ProjectPush < Repository::Push - attr_accessor :project_name attr_writer :wait_for_push attribute :project do Project.fabricate! do |resource| - resource.name = project_name + resource.name = 'project-with-code' resource.description = 'Project with repository' end end @@ -20,7 +19,6 @@ module QA @commit_message = "This is a test commit" @branch_name = 'master' @new_branch = true - @project_name = 'project-with-code' @wait_for_push = true end diff --git a/qa/qa/resource/repository/wiki_push.rb b/qa/qa/resource/repository/wiki_push.rb index 8edaff70ac6..06cca85cbb2 100644 --- a/qa/qa/resource/repository/wiki_push.rb +++ b/qa/qa/resource/repository/wiki_push.rb @@ -21,7 +21,14 @@ module QA end def repository_http_uri - @repository_http_uri ||= wiki.repository_http_location.uri + @repository_http_uri ||= begin + wiki.visit! + Page::Project::Wiki::Show.act do + click_clone_repository + choose_repository_clone_http + repository_location.uri + end + end end def repository_ssh_uri diff --git a/qa/qa/resource/wiki.rb b/qa/qa/resource/wiki.rb index 6e3648dba0b..0a776f22e25 100644 --- a/qa/qa/resource/wiki.rb +++ b/qa/qa/resource/wiki.rb @@ -12,15 +12,6 @@ module QA end end - attribute :repository_http_location do - Page::Project::Wiki::Show.perform(&:click_clone_repository) - - Page::Project::Wiki::GitAccess.perform do |git_access| - git_access.choose_repository_clone_http - git_access.repository_location - end - end - def fabricate! project.visit! diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb index 5d0f4b215f4..dd80905d184 100644 --- a/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb @@ -17,11 +17,16 @@ module QA Page::Main::Login.perform(&:sign_in_using_credentials) end + after do + # We need to clear localStorage because we're using it for the dropdown, + # and capybara doesn't do this for us. + # https://github.com/teamcapybara/capybara/issues/1702 + Capybara.execute_script 'localStorage.clear()' + end + context 'when developers and maintainers are allowed to push to a protected branch' do it 'user with push rights successfully pushes to the protected branch' do - create_protected_branch(allowed_to_push: { - roles: Resource::ProtectedBranch::Roles::DEVS_AND_MAINTAINERS - }) + create_protected_branch(allow_to_push: true) push = push_new_file(branch_name) @@ -31,19 +36,18 @@ module QA context 'when developers and maintainers are not allowed to push to a protected branch' do it 'user without push rights fails to push to the protected branch' do - create_protected_branch(allowed_to_push: { - roles: Resource::ProtectedBranch::Roles::NO_ONE - }) + create_protected_branch(allow_to_push: false) expect { push_new_file(branch_name) }.to raise_error(QA::Git::Repository::RepositoryCommandError, /remote: GitLab: You are not allowed to push code to protected branches on this project\.([\s\S]+)\[remote rejected\] #{branch_name} -> #{branch_name} \(pre-receive hook declined\)/) end end - def create_protected_branch(allowed_to_push:) + def create_protected_branch(allow_to_push:) Resource::ProtectedBranch.fabricate! do |resource| resource.branch_name = branch_name resource.project = project - resource.allowed_to_push = allowed_to_push + resource.allow_to_push = allow_to_push + resource.protected = true end end |