diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
commit | 85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch) | |
tree | 9160f299afd8c80c038f08e1545be119f5e3f1e1 /spec/support/shared_contexts | |
parent | 15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff) | |
download | gitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz |
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'spec/support/shared_contexts')
10 files changed, 247 insertions, 69 deletions
diff --git a/spec/support/shared_contexts/features/file_uploads_shared_context.rb b/spec/support/shared_contexts/features/file_uploads_shared_context.rb new file mode 100644 index 00000000000..972d25e81d2 --- /dev/null +++ b/spec/support/shared_contexts/features/file_uploads_shared_context.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +RSpec.shared_context 'file upload requests helpers' do + def capybara_url(path) + "http://#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}#{path}" + end +end diff --git a/spec/support/shared_contexts/finders/users_finder_shared_contexts.rb b/spec/support/shared_contexts/finders/users_finder_shared_contexts.rb index fc8f9d2f407..54022aeb494 100644 --- a/spec/support/shared_contexts/finders/users_finder_shared_contexts.rb +++ b/spec/support/shared_contexts/finders/users_finder_shared_contexts.rb @@ -5,4 +5,5 @@ RSpec.shared_context 'UsersFinder#execute filter by project context' do let_it_be(:blocked_user) { create(:user, :blocked, username: 'notsorandom') } let_it_be(:external_user) { create(:user, :external) } let_it_be(:omniauth_user) { create(:omniauth_user, provider: 'twitter', extern_uid: '123456') } + let_it_be(:internal_user) { User.alert_bot } end diff --git a/spec/support/shared_contexts/lib/gitlab/middleware/multipart_shared_contexts.rb b/spec/support/shared_contexts/lib/gitlab/middleware/multipart_shared_contexts.rb index f1554ea8e9f..ec5bea34e8b 100644 --- a/spec/support/shared_contexts/lib/gitlab/middleware/multipart_shared_contexts.rb +++ b/spec/support/shared_contexts/lib/gitlab/middleware/multipart_shared_contexts.rb @@ -1,42 +1,88 @@ # frozen_string_literal: true -RSpec.shared_context 'multipart middleware context' do - let(:app) { double(:app) } - let(:middleware) { described_class.new(app) } - let(:original_filename) { 'filename' } - - # Rails 5 doesn't combine the GET/POST parameters in - # ActionDispatch::HTTP::Parameters if action_dispatch.request.parameters is set: - # https://github.com/rails/rails/blob/aea6423f013ca48f7704c70deadf2cd6ac7d70a1/actionpack/lib/action_dispatch/http/parameters.rb#L41 - def get_params(env) - req = ActionDispatch::Request.new(env) - req.GET.merge(req.POST) +# This context provides one temporary file for the multipart spec +# +# Here are the available variables: +# - uploaded_file +# - uploaded_filepath +# - filename +# - remote_id +RSpec.shared_context 'with one temporary file for multipart' do |within_tmp_sub_dir: false| + let(:uploaded_filepath) { uploaded_file.path } + + around do |example| + Tempfile.open('uploaded_file2') do |tempfile| + @uploaded_file = tempfile + @filename = 'test_file.png' + @remote_id = 'remote_id' + + example.run + end end - def post_env(rewritten_fields, params, secret, issuer) - token = JWT.encode({ 'iss' => issuer, 'rewritten_fields' => rewritten_fields }, secret, 'HS256') - Rack::MockRequest.env_for( - '/', - method: 'post', - params: params, - described_class::RACK_ENV_KEY => token - ) + attr_reader :uploaded_file, :filename, :remote_id +end + +# This context provides two temporary files for the multipart spec +# +# Here are the available variables: +# - uploaded_file +# - uploaded_filepath +# - filename +# - remote_id +# - tmp_sub_dir (only when using within_tmp_sub_dir: true) +# - uploaded_file2 +# - uploaded_filepath2 +# - filename2 +# - remote_id2 +RSpec.shared_context 'with two temporary files for multipart' do + include_context 'with one temporary file for multipart' + + let(:uploaded_filepath2) { uploaded_file2.path } + + around do |example| + Tempfile.open('uploaded_file2') do |tempfile| + @uploaded_file2 = tempfile + @filename2 = 'test_file2.png' + @remote_id2 = 'remote_id2' + + example.run + end end - def with_tmp_dir(uploads_sub_dir, storage_path = '') - Dir.mktmpdir do |dir| - upload_dir = File.join(dir, storage_path, uploads_sub_dir) - FileUtils.mkdir_p(upload_dir) + attr_reader :uploaded_file2, :filename2, :remote_id2 +end + +# This context provides three temporary files for the multipart spec +# +# Here are the available variables: +# - uploaded_file +# - uploaded_filepath +# - filename +# - remote_id +# - tmp_sub_dir (only when using within_tmp_sub_dir: true) +# - uploaded_file2 +# - uploaded_filepath2 +# - filename2 +# - remote_id2 +# - uploaded_file3 +# - uploaded_filepath3 +# - filename3 +# - remote_id3 +RSpec.shared_context 'with three temporary files for multipart' do + include_context 'with two temporary files for multipart' - allow(Rails).to receive(:root).and_return(dir) - allow(Dir).to receive(:tmpdir).and_return(File.join(Dir.tmpdir, 'tmpsubdir')) - allow(GitlabUploader).to receive(:root).and_return(File.join(dir, storage_path)) + let(:uploaded_filepath3) { uploaded_file3.path } - Tempfile.open('top-level', upload_dir) do |tempfile| - env = post_env({ 'file' => tempfile.path }, { 'file.name' => original_filename, 'file.path' => tempfile.path }, Gitlab::Workhorse.secret, 'gitlab-workhorse') + around do |example| + Tempfile.open('uploaded_file3') do |tempfile| + @uploaded_file3 = tempfile + @filename3 = 'test_file3.png' + @remote_id3 = 'remote_id3' - yield dir, env - end + example.run end end + + attr_reader :uploaded_file3, :filename3, :remote_id3 end diff --git a/spec/support/shared_contexts/navbar_structure_context.rb b/spec/support/shared_contexts/navbar_structure_context.rb index e276a54224b..747358fc1e0 100644 --- a/spec/support/shared_contexts/navbar_structure_context.rb +++ b/spec/support/shared_contexts/navbar_structure_context.rb @@ -119,10 +119,10 @@ RSpec.shared_context 'group navbar structure' do nav_item: _('Settings'), nav_sub_items: [ _('General'), + _('Integrations'), _('Projects'), _('Repository'), _('CI / CD'), - _('Integrations'), _('Webhooks'), _('Audit Events') ] @@ -138,6 +138,13 @@ RSpec.shared_context 'group navbar structure' do } end + let(:push_rules_nav_item) do + { + nav_item: _('Push Rules'), + nav_sub_items: [] + } + end + let(:structure) do [ { @@ -160,6 +167,7 @@ RSpec.shared_context 'group navbar structure' do nav_item: _('Merge Requests'), nav_sub_items: [] }, + (push_rules_nav_item if Gitlab.ee?), { nav_item: _('Kubernetes'), nav_sub_items: [] diff --git a/spec/support/shared_contexts/policies/project_policy_shared_context.rb b/spec/support/shared_contexts/policies/project_policy_shared_context.rb index 5339fa003b9..3016494ac8d 100644 --- a/spec/support/shared_contexts/policies/project_policy_shared_context.rb +++ b/spec/support/shared_contexts/policies/project_policy_shared_context.rb @@ -1,30 +1,36 @@ # frozen_string_literal: true RSpec.shared_context 'ProjectPolicy context' do + let_it_be(:anonymous) { nil } let_it_be(:guest) { create(:user) } let_it_be(:reporter) { create(:user) } let_it_be(:developer) { create(:user) } let_it_be(:maintainer) { create(:user) } let_it_be(:owner) { create(:user) } let_it_be(:admin) { create(:admin) } - let(:project) { create(:project, :public, namespace: owner.namespace) } + let_it_be(:non_member) { create(:user) } + let_it_be_with_refind(:private_project) { create(:project, :private, namespace: owner.namespace) } + let_it_be_with_refind(:internal_project) { create(:project, :internal, namespace: owner.namespace) } + let_it_be_with_refind(:public_project) { create(:project, :public, namespace: owner.namespace) } let(:base_guest_permissions) do %i[ - read_project read_board read_list read_wiki read_issue - read_project_for_iids read_issue_iid read_label - read_milestone read_snippet read_project_member read_note - create_project create_issue create_note upload_file create_merge_request_in - award_emoji + award_emoji create_issue create_merge_request_in create_note + create_project read_board read_issue read_issue_iid read_issue_link + read_label read_list read_milestone read_note read_project + read_project_for_iids read_project_member read_release read_snippet + read_wiki upload_file ] end let(:base_reporter_permissions) do %i[ - download_code fork_project create_snippet update_issue - admin_issue admin_label admin_list read_commit_status read_build - read_container_image read_pipeline read_environment read_deployment - read_merge_request download_wiki_code read_sentry_issue read_prometheus + admin_issue admin_issue_link admin_label admin_list create_snippet + download_code download_wiki_code fork_project metrics_dashboard + read_build read_commit_status read_confidential_issues + read_container_image read_deployment read_environment read_merge_request + read_metrics_dashboard_annotation read_pipeline read_prometheus + read_sentry_issue update_issue ] end @@ -34,37 +40,42 @@ RSpec.shared_context 'ProjectPolicy context' do let(:developer_permissions) do %i[ - admin_milestone admin_merge_request update_merge_request create_commit_status - update_commit_status create_build update_build create_pipeline - update_pipeline create_merge_request_from create_wiki push_code - resolve_note create_container_image update_container_image - create_environment create_deployment update_deployment create_release update_release - update_environment daily_statistics + admin_merge_request admin_milestone admin_tag create_build + create_commit_status create_container_image create_deployment + create_environment create_merge_request_from + create_metrics_dashboard_annotation create_pipeline create_release + create_wiki daily_statistics delete_metrics_dashboard_annotation + destroy_container_image push_code read_pod_logs read_terraform_state + resolve_note update_build update_commit_status update_container_image + update_deployment update_environment update_merge_request + update_metrics_dashboard_annotation update_pipeline update_release ] end let(:base_maintainer_permissions) do %i[ - push_to_delete_protected_branch update_snippet - admin_snippet admin_project_member admin_note admin_wiki admin_project - admin_commit_status admin_build admin_container_image - admin_pipeline admin_environment admin_deployment destroy_release add_cluster + add_cluster admin_build admin_commit_status admin_container_image + admin_deployment admin_environment admin_note admin_pipeline + admin_project admin_project_member admin_snippet admin_terraform_state + admin_wiki create_deploy_token destroy_deploy_token destroy_release + push_to_delete_protected_branch read_deploy_token update_snippet ] end let(:public_permissions) do %i[ - download_code fork_project read_commit_status read_pipeline - read_container_image build_download_code build_read_container_image - download_wiki_code read_release + build_download_code build_read_container_image download_code + download_wiki_code fork_project read_commit_status read_container_image + read_pipeline read_release ] end let(:base_owner_permissions) do %i[ - change_namespace change_visibility_level rename_project remove_project - archive_project remove_fork_project destroy_merge_request destroy_issue - set_issue_iid set_issue_created_at set_issue_updated_at set_note_created_at + archive_project change_namespace change_visibility_level destroy_issue + destroy_merge_request remove_fork_project remove_project rename_project + set_issue_created_at set_issue_iid set_issue_updated_at + set_note_created_at ] end @@ -79,10 +90,12 @@ RSpec.shared_context 'ProjectPolicy context' do let(:maintainer_permissions) { base_maintainer_permissions + additional_maintainer_permissions } let(:owner_permissions) { base_owner_permissions + additional_owner_permissions } - before do - project.add_guest(guest) - project.add_maintainer(maintainer) - project.add_developer(developer) - project.add_reporter(reporter) + before_all do + [private_project, internal_project, public_project].each do |project| + project.add_guest(guest) + project.add_reporter(reporter) + project.add_developer(developer) + project.add_maintainer(maintainer) + end end end diff --git a/spec/support/shared_contexts/project_service_jira_context.rb b/spec/support/shared_contexts/project_service_jira_context.rb index 4ca5c99323a..8e01de70846 100644 --- a/spec/support/shared_contexts/project_service_jira_context.rb +++ b/spec/support/shared_contexts/project_service_jira_context.rb @@ -5,7 +5,7 @@ RSpec.shared_context 'project service Jira context' do let(:test_url) { 'http://jira.example.com/rest/api/2/serverInfo' } def fill_form(disable: false) - click_active_toggle if disable + click_active_checkbox if disable fill_in 'service_url', with: url fill_in 'service_username', with: 'username' diff --git a/spec/support/shared_contexts/project_service_shared_context.rb b/spec/support/shared_contexts/project_service_shared_context.rb index a72d4901b72..b4b9ab456e0 100644 --- a/spec/support/shared_contexts/project_service_shared_context.rb +++ b/spec/support/shared_contexts/project_service_shared_context.rb @@ -18,19 +18,27 @@ RSpec.shared_context 'project service activation' do click_link(name) end - def click_active_toggle - find('input[name="service[active]"] + button').click + def click_active_checkbox + find('input[name="service[active]"]').click + end + + def click_save_integration + click_button('Save changes') end def click_test_integration - click_button('Test settings and save changes') + click_link('Test settings') end - def click_test_then_save_integration + def click_test_then_save_integration(expect_test_to_fail: true) click_test_integration - expect(page).to have_content('Test failed.') + if expect_test_to_fail + expect(page).to have_content('Connection failed.') + else + expect(page).to have_content('Connection successful.') + end - click_link('Save anyway') + click_save_integration end end diff --git a/spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb b/spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb new file mode 100644 index 00000000000..580ebf00dcb --- /dev/null +++ b/spec/support/shared_contexts/requests/api/conan_packages_shared_context.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +RSpec.shared_context 'conan api setup' do + include PackagesManagerApiSpecHelpers + include HttpBasicAuthHelpers + + let(:package) { create(:conan_package) } + let_it_be(:personal_access_token) { create(:personal_access_token) } + let_it_be(:user) { personal_access_token.user } + let_it_be(:base_secret) { SecureRandom.base64(64) } + let_it_be(:job) { create(:ci_build, :running, user: user) } + let_it_be(:job_token) { job.token } + let_it_be(:deploy_token) { create(:deploy_token, read_package_registry: true, write_package_registry: true) } + + let(:project) { package.project } + let(:auth_token) { personal_access_token.token } + let(:project_deploy_token) { create(:project_deploy_token, deploy_token: deploy_token, project: project) } + + let(:headers) do + { 'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials('foo', auth_token) } + end + + let(:jwt_secret) do + OpenSSL::HMAC.hexdigest( + OpenSSL::Digest::SHA256.new, + base_secret, + Gitlab::ConanToken::HMAC_KEY + ) + end + + before do + project.add_developer(user) + allow(Settings).to receive(:attr_encrypted_db_key_base).and_return(base_secret) + end +end + +RSpec.shared_context 'conan recipe endpoints' do + include PackagesManagerApiSpecHelpers + include HttpBasicAuthHelpers + + let(:jwt) { build_jwt(personal_access_token) } + let(:headers) { build_token_auth_header(jwt.encoded) } + let(:conan_package_reference) { '123456789' } + let(:presenter) { double('::Packages::Conan::PackagePresenter') } + + before do + allow(::Packages::Conan::PackagePresenter).to receive(:new) + .with(package, user, package.project, any_args) + .and_return(presenter) + end +end + +RSpec.shared_context 'conan file download endpoints' do + include PackagesManagerApiSpecHelpers + include HttpBasicAuthHelpers + + let(:jwt) { build_jwt(personal_access_token) } + let(:headers) { build_token_auth_header(jwt.encoded) } + let(:recipe_path) { package.conan_recipe_path } + let(:package_file) { package.package_files.find_by(file_name: 'conaninfo.txt') } + let(:recipe_file) { package.package_files.find_by(file_name: 'conanfile.py') } + let(:metadata) { package_file.conan_file_metadatum } +end + +RSpec.shared_context 'conan file upload endpoints' do + include PackagesManagerApiSpecHelpers + include WorkhorseHelpers + include HttpBasicAuthHelpers + + let(:jwt) { build_jwt(personal_access_token) } + let(:workhorse_token) { JWT.encode({ 'iss' => 'gitlab-workhorse' }, Gitlab::Workhorse.secret, 'HS256') } + let(:workhorse_header) { { 'GitLab-Workhorse' => '1.0', Gitlab::Workhorse::INTERNAL_API_REQUEST_HEADER => workhorse_token } } + let(:headers_with_token) { build_token_auth_header(jwt.encoded).merge(workhorse_header) } + let(:recipe_path) { "foo/bar/#{project.full_path.tr('/', '+')}/baz"} +end diff --git a/spec/support/shared_contexts/serializers/group_group_link_shared_context.rb b/spec/support/shared_contexts/serializers/group_group_link_shared_context.rb new file mode 100644 index 00000000000..fce78957eba --- /dev/null +++ b/spec/support/shared_contexts/serializers/group_group_link_shared_context.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +RSpec.shared_context 'group_group_link' do + let(:shared_with_group) { create(:group) } + let(:shared_group) { create(:group) } + + let!(:group_group_link) do + create( + :group_group_link, + { + shared_group: shared_group, + shared_with_group: shared_with_group, + expires_at: '2020-05-12' + } + ) + end +end diff --git a/spec/support/shared_contexts/services_shared_context.rb b/spec/support/shared_contexts/services_shared_context.rb index 899b43ade01..2bd516a2339 100644 --- a/spec/support/shared_contexts/services_shared_context.rb +++ b/spec/support/shared_contexts/services_shared_context.rb @@ -2,6 +2,8 @@ Service.available_services_names.each do |service| RSpec.shared_context service do + include JiraServiceHelper if service == 'jira' + let(:dashed_service) { service.dasherize } let(:service_method) { "#{service}_service".to_sym } let(:service_klass) { "#{service}_service".classify.constantize } @@ -39,6 +41,7 @@ Service.available_services_names.each do |service| before do enable_license_for_service(service) + stub_jira_service_test if service == 'jira' end def initialize_service(service) |