rspec integration pg12 5/8
Passed Started
by
@mikolaj_wawrzyniak

Mikołaj Wawrzyniak
1Running with gitlab-runner 14.1.0-rc1 (e9489c8a)2 on docker-auto-scale-com d5ae8d253 feature flags: FF_USE_FASTZIP:true6Using Docker executor with image registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 ...7Starting service postgres:12 ...8Pulling docker image postgres:12 ...9Using docker image sha256:14566088fc000f09db0a67b267f7de82a1a1a0d45d6a0a023ab580b084be62a8 for postgres:12 with digest postgres@sha256:1cb8f7fc2e6745ef577640de1c9fde04ff9498a7e0d067f1b8e6890ad4ba5073 ...10Starting service redis:5.0-alpine ...11Pulling docker image redis:5.0-alpine ...12Using docker image sha256:add8cf2f542a4bb4070fad4dd7bb73933a804a0ff57dd611f7be76ffeb4a8ae2 for redis:5.0-alpine with digest redis@sha256:5dbc2c85e636c0aea692972a2eac934ba4f04e9bb6578bc47aa35d28482b2f60 ...13Waiting for services to be up and running...14Authenticating with credentials from job payload (GitLab Registry)15Pulling docker image registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 ...16Using docker image sha256:f3af4045688c7d321821552b2274c91037e2b5727ac63ee5f72ad30f5962c48e for registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 with digest registry.gitlab.com/gitlab-org/gitlab-build-images@sha256:72fa33b8058851ded8b72376ab249c48f98d1a176ad4bc8d517ca4ab62f0f7a0 ...18Running on runner-d5ae8d25-project-278964-concurrent-0 via runner-d5ae8d25-gsrm-1629282373-21507715...20$ eval "$CI_PRE_CLONE_SCRIPT"21Downloading archived master...22Connecting to storage.googleapis.com (172.217.193.128:443)23saving to '/tmp/gitlab.tar.gz'24gitlab.tar.gz 22% |******* | 78.5M 0:00:03 ETA25gitlab.tar.gz 100% |********************************| 347M 0:00:00 ETA26'/tmp/gitlab.tar.gz' saved27Extracting tarball into /builds/gitlab-org/gitlab...28Fetching changes with git depth set to 20...29Reinitialized existing Git repository in /builds/gitlab-org/gitlab/.git/30Created fresh repository.31remote: Enumerating objects: 193, done. 32remote: Counting objects: 100% (141/141), done. 33remote: Compressing objects: 100% (55/55), done. 34remote: Total 91 (delta 78), reused 47 (delta 36), pack-reused 0 36 * [new ref] 87ccd58290a6f21a5fb92623e3970840943714e8 -> refs/pipelines/35508967237 * [new branch] master -> origin/master38Checking out 87ccd582 as master...39Skipping Git submodules setup41Checking cache for ruby-gems-v1-4...42Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/278964/ruby-gems-v1-4 43Successfully extracted cache44Checking cache for gitaly-ruby-gems-v1-4...45Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/278964/gitaly-ruby-gems-v1-4 46Successfully extracted cache48Downloading artifacts for compile-test-assets (1512821856)...49Downloading artifacts from coordinator... ok id=1512821856 responseStatus=200 OK token=yv2CxeL350Downloading artifacts for retrieve-tests-metadata (1512821865)...51Downloading artifacts from coordinator... ok id=1512821865 responseStatus=200 OK token=UxJ4xnY952Downloading artifacts for setup-test-env (1512821862)...53Downloading artifacts from coordinator... ok id=1512821862 responseStatus=200 OK token=r5iGa7Zz55Using docker image sha256:f3af4045688c7d321821552b2274c91037e2b5727ac63ee5f72ad30f5962c48e for registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2.patched-golang-1.16-git-2.31-lfs-2.9-chrome-89-node-14.15-yarn-1.22-postgresql-12-graphicsmagick-1.3.36 with digest registry.gitlab.com/gitlab-org/gitlab-build-images@sha256:72fa33b8058851ded8b72376ab249c48f98d1a176ad4bc8d517ca4ab62f0f7a0 ...56$ [ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb57$ export GOPATH=$CI_PROJECT_DIR/.go58$ mkdir -p $GOPATH59$ source scripts/utils.sh60$ source scripts/prepare_build.sh61Bundler version 2.1.462production:development63Settings are listed in order of priority. The top value will be used.64path65Set for the current user (/root/.bundle/config): "vendor"66clean67Set for the current user (/root/.bundle/config): "true"68without69Set via BUNDLE_WITHOUT: [:production, :development]70install_flags71Set via BUNDLE_INSTALL_FLAGS: "--jobs=$(nproc) --retry=3 --quiet"72$ bundle install --jobs=$(nproc) --retry=3 --quiet && bundle check73The Gemfile's dependencies are satisfied74==> 'bundle install --jobs=$(nproc) --retry=3 --quiet && bundle check' succeeded in 1 seconds.75$ bundle pristine pg76Installing pg 1.2.3 with native extensions77==> 'bundle pristine pg' succeeded in 10 seconds.78$ setup_db_user_only79CREATE ROLE80GRANT81==> 'setup_db_user_only' succeeded in 0 seconds.82$ bundle exec rake db:drop db:create db:structure:load db:migrate gitlab:db:setup_ee83Dropped database 'gitlabhq_test'84Created database 'gitlabhq_test'85DEPRECATION WARNING: Using `bin/rails db:structure:load` is deprecated and will be removed in Rails 6.2. Configure the format using `config.active_record.schema_format = :sql` to use `structure.sql` and run `bin/rails db:schema:load` instead. (called from load at /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/bin/rake:23)86Dropped database 'gitlabhq_geo_test'87Created database 'gitlabhq_geo_test'88==> 'bundle exec rake db:drop db:create db:structure:load db:migrate gitlab:db:setup_ee' succeeded in 30 seconds.89$ run_timed_command "gem install knapsack --no-document"90$ gem install knapsack --no-document91Successfully installed knapsack-4.0.0921 gem installed93==> 'gem install knapsack --no-document' succeeded in 1 seconds.94$ run_timed_command "scripts/gitaly-test-spawn"95$ scripts/gitaly-test-spawn96Settings are listed in order of priority. The top value will be used.97jobs98Set for your local app (/builds/gitlab-org/gitlab/tmp/tests/gitaly/ruby/.bundle/config): 499retry100Set for your local app (/builds/gitlab-org/gitlab/tmp/tests/gitaly/ruby/.bundle/config): 3101path102Set for your local app (/builds/gitlab-org/gitlab/tmp/tests/gitaly/ruby/.bundle/config): "/builds/gitlab-org/gitlab/vendor/gitaly-ruby"103deployment104Set for your local app (/builds/gitlab-org/gitlab/tmp/tests/gitaly/ruby/.bundle/config): true105without106Set for your local app (/builds/gitlab-org/gitlab/tmp/tests/gitaly/ruby/.bundle/config): [:production, :development]107Set via BUNDLE_WITHOUT: [:production, :development]108app_config109Set via BUNDLE_APP_CONFIG: "/builds/gitlab-org/gitlab/tmp/tests/gitaly/ruby/.bundle"110gemfile111Set via BUNDLE_GEMFILE: "/builds/gitlab-org/gitlab/tmp/tests/gitaly/ruby/Gemfile"112Don't run Bundler as root. Bundler can ask for sudo if it is needed, and113installing your bundle as root will break this application for all non-root114users on this machine.115Using abstract_type 0.0.7116Using concurrent-ruby 1.1.9117Using i18n 1.8.10118Using minitest 5.14.4119Using tzinfo 2.0.4120Using zeitwerk 2.4.2121Using activesupport 6.1.3.2122Using builder 3.2.4123Using erubi 1.10.0124Using mini_portile2 2.5.1125Using racc 1.5.2126Using nokogiri 1.11.5 (x86_64-linux)127Using rails-dom-testing 2.0.3128Using crass 1.0.6129Using loofah 2.10.0130Using rails-html-sanitizer 1.3.0131Using actionview 6.1.3.2132Using rack 2.2.3133Using rack-test 1.1.0134Using actionpack 6.1.3.2135Using ice_nine 0.11.2136Using thread_safe 0.3.6137Using memoizable 0.4.2138Using adamantium 0.2.0139Using public_suffix 4.0.6140Using addressable 2.7.0141Using ast 2.4.1142Using binding_ninja 0.2.3143Using bundler 2.1.4144Using charlock_holmes 0.7.7145Using coderay 1.1.2146Using equalizer 0.0.11147Using concord 0.1.5148Using diff-lcs 1.3149Using dotenv 2.7.6150Using escape_utils 1.2.1151Using factory_bot 5.0.2152Using multipart-post 2.1.1153Using faraday 1.0.1154Using ffi 1.15.3155Using json 2.5.1156Using gemojione 3.3.0157Using mini_mime 1.0.2158Using rugged 1.1.0159Using github-linguist 7.12.1160Using github-markup 1.7.0161Using mime-types-data 3.2020.1104162Using mime-types 3.3.1163Using gitlab-gollum-rugged_adapter 0.4.4.4.gitlab.1164Using rouge 3.26.0165Using nokogumbo 1.5.0166Using sanitize 4.6.6167Using stringex 2.8.5168Using gitlab-gollum-lib 4.2.7.10.gitlab.1169Using google-protobuf 3.17.3 (x86_64-linux)170Using googleapis-common-protos-types 1.1.0171Using grpc 1.38.0 (x86_64-linux)172Using opentracing 0.5.0173Using thrift 0.14.1174Using jaeger-client 1.1.0175Using pg_query 2.1.0176Using redis 4.2.5177Using gitlab-labkit 0.20.0178Using gitlab-markup 1.7.1179Using grpc-tools 1.38.0180Using sawyer 0.8.2181Using octokit 4.20.0182Using reverse_markdown 1.4.0183Using thor 1.1.0184Using licensee 9.14.1185Using method_source 0.9.2186Using msgpack 1.3.3187Using optimist 3.0.1188Using parallel 1.19.2189Using parser 2.7.2.0190Using procto 0.0.3191Using unparser 0.4.7192Using proc_to_ast 0.1.0193Using pry 0.12.2194Using rainbow 3.0.0195Using rbtrace 0.4.14196Using rdoc 6.3.2197Using regexp_parser 1.8.1198Using rexml 3.2.4199Using rspec-support 3.8.0200Using rspec-core 3.8.0201Using rspec-expectations 3.8.3202Using rspec-mocks 3.8.0203Using rspec 3.8.0204Using rspec-parameterized 0.4.2205Using rubocop-ast 0.2.0206Using ruby-progressbar 1.10.1207Using unicode-display_width 1.7.0208Using rubocop 0.86.0209Using sentry-raven 3.0.4210Using timecop 0.9.1211Bundle complete! 21 Gemfile dependencies, 96 gems now installed.212Gems in the groups production and development were not installed.213Bundled gems are installed into `/builds/gitlab-org/gitlab/vendor/gitaly-ruby`214Checking gitaly-ruby Gemfile...215Checking gitaly-ruby bundle...216The Gemfile's dependencies are satisfied217Trying to connect to gitaly: ........ OK218Trying to connect to gitaly2: .............. OK219Trying to connect to praefect: ..... OK220==> 'scripts/gitaly-test-spawn' succeeded in 4 seconds.221$ source ./scripts/rspec_helpers.sh222$ rspec_paralellized_job "--tag ~quarantine --tag ~geo --tag ~level:migration"223KNAPSACK_TEST_FILE_PATTERN: spec/{controllers,mailers,requests}{,/**/}*_spec.rb224Knapsack node specs:225spec/mailers/notify_spec.rb226spec/requests/api/users_spec.rb227spec/requests/api/notes_spec.rb228spec/requests/api/conan_instance_packages_spec.rb229spec/requests/api/terraform/modules/v1/packages_spec.rb230spec/requests/api/debian_project_packages_spec.rb231spec/requests/api/project_snippets_spec.rb232spec/requests/api/group_packages_spec.rb233spec/controllers/groups/milestones_controller_spec.rb234spec/requests/api/tags_spec.rb235spec/controllers/application_controller_spec.rb236spec/controllers/autocomplete_controller_spec.rb237spec/requests/groups/email_campaigns_controller_spec.rb238spec/controllers/boards/lists_controller_spec.rb239spec/controllers/projects/blob_controller_spec.rb240spec/controllers/sessions_controller_spec.rb241spec/requests/projects/merge_requests_discussions_spec.rb242spec/requests/api/protected_branches_spec.rb243spec/requests/api/group_milestones_spec.rb244spec/controllers/projects/discussions_controller_spec.rb245spec/requests/api/unleash_spec.rb246spec/requests/api/graphql/project/releases_spec.rb247spec/requests/api/graphql/project/packages_spec.rb248spec/requests/api/usage_data_queries_spec.rb249spec/controllers/oauth/applications_controller_spec.rb250spec/controllers/projects/artifacts_controller_spec.rb251spec/controllers/projects/mirrors_controller_spec.rb252spec/controllers/groups/uploads_controller_spec.rb253spec/controllers/invites_controller_spec.rb254spec/requests/api/graphql/metrics/dashboard_query_spec.rb255spec/requests/api/protected_tags_spec.rb256spec/requests/api/graphql/mutations/notes/update/note_spec.rb257spec/requests/api/graphql_spec.rb258spec/requests/projects/clusters/integrations_controller_spec.rb259spec/requests/projects/merge_requests/diffs_spec.rb260spec/controllers/projects/imports_controller_spec.rb261spec/requests/api/graphql/mutations/container_repository/destroy_spec.rb262spec/controllers/groups/settings/ci_cd_controller_spec.rb263spec/requests/api/group_variables_spec.rb264spec/controllers/admin/ci/variables_controller_spec.rb265spec/requests/api/api_spec.rb266spec/controllers/projects/tags/releases_controller_spec.rb267spec/mailers/emails/pipelines_spec.rb268spec/requests/api/submodules_spec.rb269spec/requests/api/graphql/mutations/merge_requests/set_locked_spec.rb270spec/requests/api/graphql/mutations/merge_requests/set_wip_spec.rb271spec/controllers/groups/settings/applications_controller_spec.rb272spec/requests/api/graphql/packages/composer_spec.rb273spec/controllers/projects/error_tracking/stack_traces_controller_spec.rb274spec/requests/api/graphql/current_user_todos_spec.rb275spec/requests/api/graphql/packages/pypi_spec.rb276spec/requests/api/graphql/mutations/ci/ci_cd_settings_update_spec.rb277spec/requests/api/import_bitbucket_server_spec.rb278spec/requests/api/graphql/project/project_statistics_spec.rb279spec/controllers/metrics_controller_spec.rb280spec/controllers/projects/blame_controller_spec.rb281spec/requests/api/graphql/milestone_spec.rb282spec/requests/api/graphql/mutations/labels/create_spec.rb283spec/controllers/abuse_reports_controller_spec.rb284spec/controllers/projects/pipelines/stages_controller_spec.rb285spec/requests/api/graphql/mutations/boards/lists/create_spec.rb286spec/requests/api/graphql/project/alert_management/alert/metrics_dashboard_url_spec.rb287spec/controllers/groups/dependency_proxy_auth_controller_spec.rb288spec/requests/api/appearance_spec.rb289spec/requests/api/bulk_imports_spec.rb290spec/requests/api/statistics_spec.rb291spec/requests/api/graphql/ci/config_spec.rb292spec/controllers/concerns/checks_collaboration_spec.rb293spec/requests/api/graphql/snippets_spec.rb294spec/requests/api/graphql/mutations/todos/restore_many_spec.rb295spec/controllers/profiles/gpg_keys_controller_spec.rb296spec/requests/api/graphql/issue_status_counts_spec.rb297spec/requests/api/graphql/project/error_tracking/sentry_detailed_error_request_spec.rb298spec/requests/product_analytics/collector_app_attack_spec.rb299spec/controllers/projects/environments/sample_metrics_controller_spec.rb300spec/controllers/admin/requests_profiles_controller_spec.rb301spec/requests/api/graphql/project/alert_management/alert/issue_spec.rb302spec/requests/api/graphql/mutations/ci/job_retry_spec.rb303spec/requests/api/graphql/mutations/issues/set_locked_spec.rb304spec/controllers/profiles/keys_controller_spec.rb305spec/requests/api/graphql/mutations/ci/pipeline_destroy_spec.rb306spec/requests/api/graphql/mutations/todos/create_spec.rb307spec/requests/projects/uploads_spec.rb308spec/controllers/admin/plan_limits_controller_spec.rb309spec/requests/api/geo_spec.rb310spec/requests/runner_setup_controller_spec.rb311spec/controllers/admin/health_check_controller_spec.rb312Filter specs:313Running specs:314Running all node tests without filter315spec/mailers/notify_spec.rb316spec/requests/api/users_spec.rb317spec/requests/api/notes_spec.rb318spec/requests/api/conan_instance_packages_spec.rb319spec/requests/api/terraform/modules/v1/packages_spec.rb320spec/requests/api/debian_project_packages_spec.rb321spec/requests/api/project_snippets_spec.rb322spec/requests/api/group_packages_spec.rb323spec/controllers/groups/milestones_controller_spec.rb324spec/requests/api/tags_spec.rb325spec/controllers/application_controller_spec.rb326spec/controllers/autocomplete_controller_spec.rb327spec/requests/groups/email_campaigns_controller_spec.rb328spec/controllers/boards/lists_controller_spec.rb329spec/controllers/projects/blob_controller_spec.rb330spec/controllers/sessions_controller_spec.rb331spec/requests/projects/merge_requests_discussions_spec.rb332spec/requests/api/protected_branches_spec.rb333spec/requests/api/group_milestones_spec.rb334spec/controllers/projects/discussions_controller_spec.rb335spec/requests/api/unleash_spec.rb336spec/requests/api/graphql/project/releases_spec.rb337spec/requests/api/graphql/project/packages_spec.rb338spec/requests/api/usage_data_queries_spec.rb339spec/controllers/oauth/applications_controller_spec.rb340spec/controllers/projects/artifacts_controller_spec.rb341spec/controllers/projects/mirrors_controller_spec.rb342spec/controllers/groups/uploads_controller_spec.rb343spec/controllers/invites_controller_spec.rb344spec/requests/api/graphql/metrics/dashboard_query_spec.rb345spec/requests/api/protected_tags_spec.rb346spec/requests/api/graphql/mutations/notes/update/note_spec.rb347spec/requests/api/graphql_spec.rb348spec/requests/projects/clusters/integrations_controller_spec.rb349spec/requests/projects/merge_requests/diffs_spec.rb350spec/controllers/projects/imports_controller_spec.rb351spec/requests/api/graphql/mutations/container_repository/destroy_spec.rb352spec/controllers/groups/settings/ci_cd_controller_spec.rb353spec/requests/api/group_variables_spec.rb354spec/controllers/admin/ci/variables_controller_spec.rb355spec/requests/api/api_spec.rb356spec/controllers/projects/tags/releases_controller_spec.rb357spec/mailers/emails/pipelines_spec.rb358spec/requests/api/submodules_spec.rb359spec/requests/api/graphql/mutations/merge_requests/set_locked_spec.rb360spec/requests/api/graphql/mutations/merge_requests/set_wip_spec.rb361spec/controllers/groups/settings/applications_controller_spec.rb362spec/requests/api/graphql/packages/composer_spec.rb363spec/controllers/projects/error_tracking/stack_traces_controller_spec.rb364spec/requests/api/graphql/current_user_todos_spec.rb365spec/requests/api/graphql/packages/pypi_spec.rb366spec/requests/api/graphql/mutations/ci/ci_cd_settings_update_spec.rb367spec/requests/api/import_bitbucket_server_spec.rb368spec/requests/api/graphql/project/project_statistics_spec.rb369spec/controllers/metrics_controller_spec.rb370spec/controllers/projects/blame_controller_spec.rb371spec/requests/api/graphql/milestone_spec.rb372spec/requests/api/graphql/mutations/labels/create_spec.rb373spec/controllers/abuse_reports_controller_spec.rb374spec/controllers/projects/pipelines/stages_controller_spec.rb375spec/requests/api/graphql/mutations/boards/lists/create_spec.rb376spec/requests/api/graphql/project/alert_management/alert/metrics_dashboard_url_spec.rb377spec/controllers/groups/dependency_proxy_auth_controller_spec.rb378spec/requests/api/appearance_spec.rb379spec/requests/api/bulk_imports_spec.rb380spec/requests/api/statistics_spec.rb381spec/requests/api/graphql/ci/config_spec.rb382spec/controllers/concerns/checks_collaboration_spec.rb383spec/requests/api/graphql/snippets_spec.rb384spec/requests/api/graphql/mutations/todos/restore_many_spec.rb385spec/controllers/profiles/gpg_keys_controller_spec.rbKnapsack report generator started!386WARNING: Shared example group 'creates terraform module package files' has been previously defined at:387 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165388...and you are now defining it at:389 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165390The new definition will overwrite the original one.391WARNING: Shared example group 'creates terraform module package files' has been previously defined at:392 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165393...and you are now defining it at:394 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165395The new definition will overwrite the original one.396WARNING: Shared example group 'creates terraform module package files' has been previously defined at:397 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165398...and you are now defining it at:399 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165400The new definition will overwrite the original one.401WARNING: Shared example group 'creates terraform module package files' has been previously defined at:402 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165403...and you are now defining it at:404 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165405The new definition will overwrite the original one.406WARNING: Shared example group 'creates terraform module package files' has been previously defined at:407 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165408...and you are now defining it at:409 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/terraform/modules/v1/packages_shared_examples.rb:165410The new definition will overwrite the original one.411Run options: exclude {:quarantine=>true, :geo=>true, :level=>"migration"}412==> /builds/gitlab-org/gitlab/tmp/tests/gitlab-test_bare set up in 0.069303129 seconds...413Test environment set up in 1.88260094 seconds414Notify415 with HTML-encoded entities416 retains 7bit encoding417 for a project418 for issues419 that are new420 has the correct subject and body421 contains the description422 does not add a reason header423 contains a link to issue author424 contains a link to the issue425 behaves like an assignee email426 is sent to the assignee as the author427 behaves like an email sent to a user428 is sent to user's global notification email address429 with group notification email430 is sent to user's group notification email431 behaves like an email starting a new thread with reply-by-email enabled432 has X-GitLab-Project headers433 has X-GitLab-*-ID header434 has X-GitLab-*-IID header if model has iid defined435 has the characteristics of a threaded email436 includes "Reply to this email directly or <View it on GitLab>"437 when reply-by-email is enabled with incoming address with %{key}438 has a Reply-To header439 when reply-by-email is enabled with incoming address without %{key}440 has the characteristics of a threaded email441 has a Reply-To header442 behaves like it should show Gmail Actions View Issue link443 is expected to have body including "View Issue"444 behaves like it should have Gmail Actions links445 is expected to have body including "ViewAction"446 behaves like an unsubscribeable thread447 has a List-Unsubscribe header in the correct format, and a body link448 behaves like an unsubscribeable thread with incoming address without %{key}449 has a List-Unsubscribe header in the correct format, and a body link450 behaves like appearance header and footer enabled451 contains header and footer452 behaves like appearance header and footer not enabled453 does not contain header and footer454 when sent with a reason455 includes the reason in a header456 behaves like appearance header and footer enabled457 contains header and footer458 behaves like appearance header and footer not enabled459 does not contain header and footer460 that are reassigned461 is sent as the author462 has the correct subject and body463 behaves like a multiple recipients email464 is sent to the given recipient465 behaves like an answer to an existing thread with reply-by-email enabled466 has X-GitLab-Project headers467 has X-GitLab-*-ID header468 has X-GitLab-*-IID header if model has iid defined469 has X-GitLab-Project headers470 has X-GitLab-*-ID header471 has X-GitLab-*-IID header if model has iid defined472 has the characteristics of a threaded reply473 when reply-by-email is enabled with incoming address with %{key}474 has a Reply-To header475 when reply-by-email is enabled with incoming address without %{key}476 has X-GitLab-Project headers477 has X-GitLab-*-ID header478 has X-GitLab-*-IID header if model has iid defined479 has the characteristics of a threaded reply480 has a Reply-To header481 behaves like it should show Gmail Actions View Issue link482 is expected to have body including "View Issue"483 behaves like it should have Gmail Actions links484 is expected to have body including "ViewAction"485 behaves like an unsubscribeable thread486 has a List-Unsubscribe header in the correct format, and a body link487 behaves like an unsubscribeable thread with incoming address without %{key}488 has a List-Unsubscribe header in the correct format, and a body link489 behaves like appearance header and footer enabled490 contains header and footer491 behaves like appearance header and footer not enabled492 does not contain header and footer493 when sent with a reason494 includes the reason in a header495 behaves like appearance header and footer enabled496 contains header and footer497 behaves like appearance header and footer not enabled498 does not contain header and footer499 that have been relabeled500 is sent as the author501 has the correct subject and body502 behaves like a multiple recipients email503 is sent to the given recipient504 behaves like an answer to an existing thread with reply-by-email enabled505 has X-GitLab-Project headers506 has X-GitLab-*-ID header507 has X-GitLab-*-IID header if model has iid defined508 has X-GitLab-Project headers509 has X-GitLab-*-ID header510 has X-GitLab-*-IID header if model has iid defined511 has the characteristics of a threaded reply512 when reply-by-email is enabled with incoming address with %{key}513 has a Reply-To header514 when reply-by-email is enabled with incoming address without %{key}515 has X-GitLab-Project headers516 has X-GitLab-*-ID header517 has X-GitLab-*-IID header if model has iid defined518 has the characteristics of a threaded reply519 has a Reply-To header520 behaves like it should show Gmail Actions View Issue link521 is expected to have body including "View Issue"522 behaves like it should have Gmail Actions links523 is expected to have body including "ViewAction"524 behaves like a user cannot unsubscribe through footer link525 does not have a List-Unsubscribe header or a body link526 behaves like an email with a labels subscriptions link in its footer527 is expected to have body including "label subscriptions"528 behaves like appearance header and footer enabled529 contains header and footer530 behaves like appearance header and footer not enabled531 does not contain header and footer532 with a preferred language533 always generates the email using the default language534 that are due soon535 contains a link to the issue536 behaves like an answer to an existing thread with reply-by-email enabled537 has X-GitLab-Project headers538 has X-GitLab-*-ID header539 has X-GitLab-*-IID header if model has iid defined540 has X-GitLab-Project headers541 has X-GitLab-*-ID header542 has X-GitLab-*-IID header if model has iid defined543 has the characteristics of a threaded reply544 when reply-by-email is enabled with incoming address with %{key}545 has a Reply-To header546 when reply-by-email is enabled with incoming address without %{key}547 has X-GitLab-Project headers548 has X-GitLab-*-ID header549 has X-GitLab-*-IID header if model has iid defined550 has the characteristics of a threaded reply551 has a Reply-To header552 behaves like it should show Gmail Actions View Issue link553 is expected to have body including "View Issue"554 behaves like it should have Gmail Actions links555 is expected to have body including "ViewAction"556 behaves like an unsubscribeable thread557 has a List-Unsubscribe header in the correct format, and a body link558 behaves like an unsubscribeable thread with incoming address without %{key}559 has a List-Unsubscribe header in the correct format, and a body link560 behaves like appearance header and footer enabled561 contains header and footer562 behaves like appearance header and footer not enabled563 does not contain header and footer564 status changed565 is sent as the author566 has the correct subject and body567 behaves like an answer to an existing thread with reply-by-email enabled568 has X-GitLab-Project headers569 has X-GitLab-*-ID header570 has X-GitLab-*-IID header if model has iid defined571 has X-GitLab-Project headers572 has X-GitLab-*-ID header573 has X-GitLab-*-IID header if model has iid defined574 has the characteristics of a threaded reply575 when reply-by-email is enabled with incoming address with %{key}576 has a Reply-To header577 when reply-by-email is enabled with incoming address without %{key}578 has X-GitLab-Project headers579 has X-GitLab-*-ID header580 has X-GitLab-*-IID header if model has iid defined581 has the characteristics of a threaded reply582 has a Reply-To header583 behaves like it should show Gmail Actions View Issue link584 is expected to have body including "View Issue"585 behaves like it should have Gmail Actions links586 is expected to have body including "ViewAction"587 behaves like an unsubscribeable thread588 has a List-Unsubscribe header in the correct format, and a body link589 behaves like an unsubscribeable thread with incoming address without %{key}590 has a List-Unsubscribe header in the correct format, and a body link591 behaves like appearance header and footer enabled592 contains header and footer593 behaves like appearance header and footer not enabled594 does not contain header and footer595 moved to another project596 when a user has permissions to access the new issue597 contains description about action taken598 has the correct subject and body599 contains the issue title600 behaves like an answer to an existing thread with reply-by-email enabled601 has X-GitLab-Project headers602 has X-GitLab-*-ID header603 has X-GitLab-*-IID header if model has iid defined604 has X-GitLab-Project headers605 has X-GitLab-*-ID header606 has X-GitLab-*-IID header if model has iid defined607 has the characteristics of a threaded reply608 when reply-by-email is enabled with incoming address with %{key}609 has a Reply-To header610 when reply-by-email is enabled with incoming address without %{key}611 has X-GitLab-Project headers612 has X-GitLab-*-ID header613 has X-GitLab-*-IID header if model has iid defined614 has the characteristics of a threaded reply615 has a Reply-To header616 behaves like it should show Gmail Actions View Issue link617 is expected to have body including "View Issue"618 behaves like it should have Gmail Actions links619 is expected to have body including "ViewAction"620 behaves like an unsubscribeable thread621 has a List-Unsubscribe header in the correct format, and a body link622 behaves like an unsubscribeable thread with incoming address without %{key}623 has a List-Unsubscribe header in the correct format, and a body link624 when a user does not permissions to access the new issue625 has the correct subject and body626 does not contain the issue title627 contains information about missing permissions628 for merge requests629 that are new630 has the correct subject and body631 contains the description632 contains a link to merge request author633 contains a link to the merge request url634 behaves like an assignee email635 is sent to the assignee as the author636 behaves like an email sent to a user637 is sent to user's global notification email address638 with group notification email639 is sent to user's group notification email640 behaves like an email starting a new thread with reply-by-email enabled641 has X-GitLab-Project headers642 has X-GitLab-*-ID header643 has X-GitLab-*-IID header if model has iid defined644 has the characteristics of a threaded email645 includes "Reply to this email directly or <View it on GitLab>"646 when reply-by-email is enabled with incoming address with %{key}647 has a Reply-To header648 when reply-by-email is enabled with incoming address without %{key}649 has the characteristics of a threaded email650 has a Reply-To header651 behaves like it should show Gmail Actions View Merge request link652 is expected to have body including "View Merge request"653 behaves like it should have Gmail Actions links654 is expected to have body including "ViewAction"655 behaves like an unsubscribeable thread656 has a List-Unsubscribe header in the correct format, and a body link657 behaves like an unsubscribeable thread with incoming address without %{key}658 has a List-Unsubscribe header in the correct format, and a body link659 behaves like appearance header and footer enabled660 contains header and footer661 behaves like appearance header and footer not enabled662 does not contain header and footer663 when sent with a reason664 includes the reason in a header665 behaves like appearance header and footer enabled666 contains header and footer667 behaves like appearance header and footer not enabled668 does not contain header and footer669 that are reassigned670 is sent as the author671 has the correct subject and body672 behaves like a multiple recipients email673 is sent to the given recipient674 behaves like an answer to an existing thread with reply-by-email enabled675 has X-GitLab-Project headers676 has X-GitLab-*-ID header677 has X-GitLab-*-IID header if model has iid defined678 has X-GitLab-Project headers679 has X-GitLab-*-ID header680 has X-GitLab-*-IID header if model has iid defined681 has the characteristics of a threaded reply682 when reply-by-email is enabled with incoming address with %{key}683 has a Reply-To header684 when reply-by-email is enabled with incoming address without %{key}685 has X-GitLab-Project headers686 has X-GitLab-*-ID header687 has X-GitLab-*-IID header if model has iid defined688 has the characteristics of a threaded reply689 has a Reply-To header690 behaves like it should show Gmail Actions View Merge request link691 is expected to have body including "View Merge request"692 behaves like it should have Gmail Actions links693 is expected to have body including "ViewAction"694 behaves like an unsubscribeable thread695 has a List-Unsubscribe header in the correct format, and a body link696 behaves like an unsubscribeable thread with incoming address without %{key}697 has a List-Unsubscribe header in the correct format, and a body link698 behaves like appearance header and footer enabled699 contains header and footer700 behaves like appearance header and footer not enabled701 does not contain header and footer702 when sent with a reason703 includes the reason in a header704 includes the reason in the footer705 behaves like appearance header and footer enabled706 contains header and footer707 behaves like appearance header and footer not enabled708 does not contain header and footer709 that are new with a description710 contains the description711 behaves like it should show Gmail Actions View Merge request link712 is expected to have body including "View Merge request"713 behaves like it should have Gmail Actions links714 is expected to have body including "ViewAction"715 behaves like an unsubscribeable thread716 has a List-Unsubscribe header in the correct format, and a body link717 behaves like an unsubscribeable thread with incoming address without %{key}718 has a List-Unsubscribe header in the correct format, and a body link719 behaves like appearance header and footer enabled720 contains header and footer721 behaves like appearance header and footer not enabled722 does not contain header and footer723 that have been relabeled724 is sent as the author725 has the correct subject and body726 behaves like a multiple recipients email727 is sent to the given recipient728 behaves like an answer to an existing thread with reply-by-email enabled729 has X-GitLab-Project headers730 has X-GitLab-*-ID header731 has X-GitLab-*-IID header if model has iid defined732 has X-GitLab-Project headers733 has X-GitLab-*-ID header734 has X-GitLab-*-IID header if model has iid defined735 has the characteristics of a threaded reply736 when reply-by-email is enabled with incoming address with %{key}737 has a Reply-To header738 when reply-by-email is enabled with incoming address without %{key}739 has X-GitLab-Project headers740 has X-GitLab-*-ID header741 has X-GitLab-*-IID header if model has iid defined742 has the characteristics of a threaded reply743 has a Reply-To header744 behaves like it should show Gmail Actions View Merge request link745 is expected to have body including "View Merge request"746 behaves like it should have Gmail Actions links747 is expected to have body including "ViewAction"748 behaves like a user cannot unsubscribe through footer link749 does not have a List-Unsubscribe header or a body link750 behaves like an email with a labels subscriptions link in its footer751 is expected to have body including "label subscriptions"752 behaves like appearance header and footer enabled753 contains header and footer754 behaves like appearance header and footer not enabled755 does not contain header and footer756 that have new commits757 behaves like a push to an existing merge request758 is sent as the push user759 has the correct subject and body760 behaves like a multiple recipients email761 is sent to the given recipient762 behaves like an answer to an existing thread with reply-by-email enabled763 has X-GitLab-Project headers764 has X-GitLab-*-ID header765 has X-GitLab-*-IID header if model has iid defined766 has X-GitLab-Project headers767 has X-GitLab-*-ID header768 has X-GitLab-*-IID header if model has iid defined769 has the characteristics of a threaded reply770 when reply-by-email is enabled with incoming address with %{key}771 has a Reply-To header772 when reply-by-email is enabled with incoming address without %{key}773 has X-GitLab-Project headers774 has X-GitLab-*-ID header775 has X-GitLab-*-IID header if model has iid defined776 has the characteristics of a threaded reply777 has a Reply-To header778 behaves like it should show Gmail Actions View Merge request link779 is expected to have body including "View Merge request"780 behaves like it should have Gmail Actions links781 is expected to have body including "ViewAction"782 behaves like an unsubscribeable thread783 has a List-Unsubscribe header in the correct format, and a body link784 behaves like an unsubscribeable thread with incoming address without %{key}785 has a List-Unsubscribe header in the correct format, and a body link786 behaves like appearance header and footer enabled787 contains header and footer788 behaves like appearance header and footer not enabled789 does not contain header and footer790 that have new commits on top of an existing one791 behaves like a push to an existing merge request792 is sent as the push user793 has the correct subject and body794 behaves like a multiple recipients email795 is sent to the given recipient796 behaves like an answer to an existing thread with reply-by-email enabled797 has X-GitLab-Project headers798 has X-GitLab-*-ID header799 has X-GitLab-*-IID header if model has iid defined800 has X-GitLab-Project headers801 has X-GitLab-*-ID header802 has X-GitLab-*-IID header if model has iid defined803 has the characteristics of a threaded reply804 when reply-by-email is enabled with incoming address with %{key}805 has a Reply-To header806 when reply-by-email is enabled with incoming address without %{key}807 has X-GitLab-Project headers808 has X-GitLab-*-ID header809 has X-GitLab-*-IID header if model has iid defined810 has the characteristics of a threaded reply811 has a Reply-To header812 behaves like it should show Gmail Actions View Merge request link813 is expected to have body including "View Merge request"814 behaves like it should have Gmail Actions links815 is expected to have body including "ViewAction"816 behaves like an unsubscribeable thread817 has a List-Unsubscribe header in the correct format, and a body link818 behaves like an unsubscribeable thread with incoming address without %{key}819 has a List-Unsubscribe header in the correct format, and a body link820 behaves like appearance header and footer enabled821 contains header and footer822 behaves like appearance header and footer not enabled823 does not contain header and footer824 #mail_thread825 the model has no namespace826 has X-GitLab-Namespaced-Thing-ID header827 the model has a namespace828 has X-GitLab-Namespaced-Thing-ID header829 for issue notes830 in discussion831 has In-Reply-To header pointing to previous note in discussion832 has References header including the notes and issue of the discussion833 has X-GitLab-Discussion-ID header834 behaves like an email sent to a user835 is sent to user's global notification email address836 with group notification email837 is sent to user's group notification email838 behaves like appearance header and footer enabled839 contains header and footer840 behaves like appearance header and footer not enabled841 does not contain header and footer842 individual issue comments843 has In-Reply-To header pointing to the issue844 has References header including the notes and issue of the discussion845 behaves like an email sent to a user846 is sent to user's global notification email address847 with group notification email848 is sent to user's group notification email849 behaves like appearance header and footer enabled850 contains header and footer851 behaves like appearance header and footer not enabled852 does not contain header and footer853 for snippet notes854 has the correct subject855 has the correct body856 links to the project snippet857 behaves like appearance header and footer enabled858 contains header and footer859 behaves like appearance header and footer not enabled860 does not contain header and footer861 behaves like an answer to an existing thread with reply-by-email enabled862 has X-GitLab-Project headers863 has X-GitLab-*-ID header864 has X-GitLab-*-IID header if model has iid defined865 has X-GitLab-Project headers866 has X-GitLab-*-ID header867 has X-GitLab-*-IID header if model has iid defined868 has the characteristics of a threaded reply869 when reply-by-email is enabled with incoming address with %{key}870 has a Reply-To header871 when reply-by-email is enabled with incoming address without %{key}872 has X-GitLab-Project headers873 has X-GitLab-*-ID header874 has X-GitLab-*-IID header if model has iid defined875 has the characteristics of a threaded reply876 has a Reply-To header877 behaves like a user cannot unsubscribe through footer link878 does not have a List-Unsubscribe header or a body link879 for design notes880 is expected to have header X-Gitlab-DesignManagement-Design-ID: 1881 is expected to have body including "homescreen-1.jpg"882 is expected to have attributes {:subject => (a string including "homescreen-1.jpg")}883 project was moved884 has the correct subject and body885 behaves like an email sent to a user886 is sent to user's global notification email address887 with group notification email888 is sent to user's group notification email889 behaves like an email sent from GitLab890 has the characteristics of an email sent from GitLab891 behaves like it should not have Gmail Actions links892 is expected not to have body including "ViewAction"893 behaves like a user cannot unsubscribe through footer link894 does not have a List-Unsubscribe header or a body link895 behaves like appearance header and footer enabled896 contains header and footer897 behaves like appearance header and footer not enabled898 does not contain header and footer899 project access requested900 contains all the useful information901 behaves like an email sent from GitLab902 has the characteristics of an email sent from GitLab903 behaves like it should not have Gmail Actions links904 is expected not to have body including "ViewAction"905 behaves like a user cannot unsubscribe through footer link906 does not have a List-Unsubscribe header or a body link907 behaves like appearance header and footer enabled908 contains header and footer909 behaves like appearance header and footer not enabled910 does not contain header and footer911 project access denied912 contains all the useful information913 behaves like an email sent from GitLab914 has the characteristics of an email sent from GitLab915 behaves like it should not have Gmail Actions links916 is expected not to have body including "ViewAction"917 behaves like a user cannot unsubscribe through footer link918 does not have a List-Unsubscribe header or a body link919 behaves like appearance header and footer enabled920 contains header and footer921 behaves like appearance header and footer not enabled922 does not contain header and footer923 project access changed924 contains all the useful information925 behaves like an email sent from GitLab926 has the characteristics of an email sent from GitLab927 behaves like it should not have Gmail Actions links928 is expected not to have body including "ViewAction"929 behaves like a user cannot unsubscribe through footer link930 does not have a List-Unsubscribe header or a body link931 behaves like appearance header and footer enabled932 contains header and footer933 behaves like appearance header and footer not enabled934 does not contain header and footer935 project invitation936 behaves like an email sent from GitLab937 has the characteristics of an email sent from GitLab938 behaves like it should not have Gmail Actions links939 is expected not to have body including "ViewAction"940 behaves like a user cannot unsubscribe through footer link941 does not have a List-Unsubscribe header or a body link942 behaves like appearance header and footer enabled943 contains header and footer944 behaves like appearance header and footer not enabled945 does not contain header and footer946 behaves like does not render a manage notifications link947 is expected not to have body including "http://localhost/-/profile/notifications"948 when there is an inviter949 contains all the useful information950 when there is no inviter951 contains all the useful information952 when invite email sent is tracked953 tracks the sent invite954 when on gitlab.com955 has custom headers956 project invitation accepted957 contains all the useful information958 behaves like an email sent from GitLab959 has the characteristics of an email sent from GitLab960 behaves like an email sent to a user961 is sent to user's global notification email address962 with group notification email963 is sent to user's group notification email964 behaves like it should not have Gmail Actions links965 is expected not to have body including "ViewAction"966 behaves like a user cannot unsubscribe through footer link967 does not have a List-Unsubscribe header or a body link968 behaves like appearance header and footer enabled969 contains header and footer970 behaves like appearance header and footer not enabled971 does not contain header and footer972 project invitation declined973 contains all the useful information974 behaves like an email sent from GitLab975 has the characteristics of an email sent from GitLab976 behaves like an email sent to a user977 is sent to user's global notification email address978 with group notification email979 is sent to user's group notification email980 behaves like it should not have Gmail Actions links981 is expected not to have body including "ViewAction"982 behaves like a user cannot unsubscribe through footer link983 does not have a List-Unsubscribe header or a body link984 behaves like appearance header and footer enabled985 contains header and footer986 behaves like appearance header and footer not enabled987 does not contain header and footer988 items that are noteable, the email for a note989 on a commit990 has the correct subject and body991 behaves like a note email992 is sent to the given recipient as the author993 contains the message from the note994 contains a link to note author995 behaves like it should have Gmail Actions links996 is expected to have body including "ViewAction"997 behaves like an answer to an existing thread with reply-by-email enabled998 has X-GitLab-Project headers999 has X-GitLab-*-ID header1000 has X-GitLab-*-IID header if model has iid defined1001 has X-GitLab-Project headers1002 has X-GitLab-*-ID header1003 has X-GitLab-*-IID header if model has iid defined1004 has the characteristics of a threaded reply1005 when reply-by-email is enabled with incoming address with %{key}1006 has a Reply-To header1007 when reply-by-email is enabled with incoming address without %{key}1008 has X-GitLab-Project headers1009 has X-GitLab-*-ID header1010 has X-GitLab-*-IID header if model has iid defined1011 has the characteristics of a threaded reply1012 has a Reply-To header1013 behaves like it should show Gmail Actions View Commit link1014 is expected to have body including "View Commit"1015 behaves like it should have Gmail Actions links1016 is expected to have body including "ViewAction"1017 behaves like a user cannot unsubscribe through footer link1018 does not have a List-Unsubscribe header or a body link1019 behaves like appearance header and footer enabled1020 contains header and footer1021 behaves like appearance header and footer not enabled1022 does not contain header and footer1023 on a merge request1024 has the correct subject and body1025 behaves like a note email1026 is sent to the given recipient as the author1027 contains the message from the note1028 contains a link to note author1029 behaves like it should have Gmail Actions links1030 is expected to have body including "ViewAction"1031 behaves like an answer to an existing thread with reply-by-email enabled1032 has X-GitLab-Project headers1033 has X-GitLab-*-ID header1034 has X-GitLab-*-IID header if model has iid defined1035 has X-GitLab-Project headers1036 has X-GitLab-*-ID header1037 has X-GitLab-*-IID header if model has iid defined1038 has the characteristics of a threaded reply1039 when reply-by-email is enabled with incoming address with %{key}1040 has a Reply-To header1041 when reply-by-email is enabled with incoming address without %{key}1042 has X-GitLab-Project headers1043 has X-GitLab-*-ID header1044 has X-GitLab-*-IID header if model has iid defined1045 has the characteristics of a threaded reply1046 has a Reply-To header1047 behaves like it should show Gmail Actions View Merge request link1048 is expected to have body including "View Merge request"1049 behaves like it should have Gmail Actions links1050 is expected to have body including "ViewAction"1051 behaves like an unsubscribeable thread1052 has a List-Unsubscribe header in the correct format, and a body link1053 behaves like an unsubscribeable thread with incoming address without %{key}1054 has a List-Unsubscribe header in the correct format, and a body link1055 behaves like appearance header and footer enabled1056 contains header and footer1057 behaves like appearance header and footer not enabled1058 does not contain header and footer1059 on an issue1060 has the correct subject and body1061 behaves like a note email1062 is sent to the given recipient as the author1063 contains the message from the note1064 contains a link to note author1065 behaves like it should have Gmail Actions links1066 is expected to have body including "ViewAction"1067 behaves like an answer to an existing thread with reply-by-email enabled1068 has X-GitLab-Project headers1069 has X-GitLab-*-ID header1070 has X-GitLab-*-IID header if model has iid defined1071 has X-GitLab-Project headers1072 has X-GitLab-*-ID header1073 has X-GitLab-*-IID header if model has iid defined1074 has the characteristics of a threaded reply1075 when reply-by-email is enabled with incoming address with %{key}1076 has a Reply-To header1077 when reply-by-email is enabled with incoming address without %{key}1078 has X-GitLab-Project headers1079 has X-GitLab-*-ID header1080 has X-GitLab-*-IID header if model has iid defined1081 has the characteristics of a threaded reply1082 has a Reply-To header1083 behaves like it should show Gmail Actions View Issue link1084 is expected to have body including "View Issue"1085 behaves like it should have Gmail Actions links1086 is expected to have body including "ViewAction"1087 behaves like an unsubscribeable thread1088 has a List-Unsubscribe header in the correct format, and a body link1089 behaves like an unsubscribeable thread with incoming address without %{key}1090 has a List-Unsubscribe header in the correct format, and a body link1091 behaves like appearance header and footer enabled1092 contains header and footer1093 behaves like appearance header and footer not enabled1094 does not contain header and footer1095 items that are noteable, the email for a discussion note1096 on a commit1097 has the correct subject1098 contains a link to the commit1099 behaves like a discussion note email1100 is sent to the given recipient as the author1101 contains the message from the note1102 contains an introduction1103 behaves like it should have Gmail Actions links1104 is expected to have body including "ViewAction"1105 when a comment on an existing discussion1106 contains an introduction1107 behaves like an answer to an existing thread with reply-by-email enabled1108 has X-GitLab-Project headers1109 has X-GitLab-*-ID header1110 has X-GitLab-*-IID header if model has iid defined1111 has X-GitLab-Project headers1112 has X-GitLab-*-ID header1113 has X-GitLab-*-IID header if model has iid defined1114 has the characteristics of a threaded reply1115 when reply-by-email is enabled with incoming address with %{key}1116 has a Reply-To header1117 when reply-by-email is enabled with incoming address without %{key}1118 has X-GitLab-Project headers1119 has X-GitLab-*-ID header1120 has X-GitLab-*-IID header if model has iid defined1121 has the characteristics of a threaded reply1122 has a Reply-To header1123 behaves like it should show Gmail Actions View Commit link1124 is expected to have body including "View Commit"1125 behaves like it should have Gmail Actions links1126 is expected to have body including "ViewAction"1127 behaves like a user cannot unsubscribe through footer link1128 does not have a List-Unsubscribe header or a body link1129 behaves like appearance header and footer enabled1130 contains header and footer1131 behaves like appearance header and footer not enabled1132 does not contain header and footer1133 on a merge request1134 has the correct subject1135 contains a link to the merge request note1136 behaves like a discussion note email1137 is sent to the given recipient as the author1138 contains the message from the note1139 contains an introduction1140 behaves like it should have Gmail Actions links1141 is expected to have body including "ViewAction"1142 when a comment on an existing discussion1143 contains an introduction1144 behaves like an answer to an existing thread with reply-by-email enabled1145 has X-GitLab-Project headers1146 has X-GitLab-*-ID header1147 has X-GitLab-*-IID header if model has iid defined1148 has X-GitLab-Project headers1149 has X-GitLab-*-ID header1150 has X-GitLab-*-IID header if model has iid defined1151 has the characteristics of a threaded reply1152 when reply-by-email is enabled with incoming address with %{key}1153 has a Reply-To header1154 when reply-by-email is enabled with incoming address without %{key}1155 has X-GitLab-Project headers1156 has X-GitLab-*-ID header1157 has X-GitLab-*-IID header if model has iid defined1158 has the characteristics of a threaded reply1159 has a Reply-To header1160 behaves like it should show Gmail Actions View Merge request link1161 is expected to have body including "View Merge request"1162 behaves like it should have Gmail Actions links1163 is expected to have body including "ViewAction"1164 behaves like an unsubscribeable thread1165 has a List-Unsubscribe header in the correct format, and a body link1166 behaves like an unsubscribeable thread with incoming address without %{key}1167 has a List-Unsubscribe header in the correct format, and a body link1168 behaves like appearance header and footer enabled1169 contains header and footer1170 behaves like appearance header and footer not enabled1171 does not contain header and footer1172 on an issue1173 has the correct subject1174 contains a link to the issue note1175 behaves like a discussion note email1176 is sent to the given recipient as the author1177 contains the message from the note1178 contains an introduction1179 behaves like it should have Gmail Actions links1180 is expected to have body including "ViewAction"1181 when a comment on an existing discussion1182 contains an introduction1183 behaves like an answer to an existing thread with reply-by-email enabled1184 has X-GitLab-Project headers1185 has X-GitLab-*-ID header1186 has X-GitLab-*-IID header if model has iid defined1187 has X-GitLab-Project headers1188 has X-GitLab-*-ID header1189 has X-GitLab-*-IID header if model has iid defined1190 has the characteristics of a threaded reply1191 when reply-by-email is enabled with incoming address with %{key}1192 has a Reply-To header1193 when reply-by-email is enabled with incoming address without %{key}1194 has X-GitLab-Project headers1195 has X-GitLab-*-ID header1196 has X-GitLab-*-IID header if model has iid defined1197 has the characteristics of a threaded reply1198 has a Reply-To header1199 behaves like it should show Gmail Actions View Issue link1200 is expected to have body including "View Issue"1201 behaves like it should have Gmail Actions links1202 is expected to have body including "ViewAction"1203 behaves like an unsubscribeable thread1204 has a List-Unsubscribe header in the correct format, and a body link1205 behaves like an unsubscribeable thread with incoming address without %{key}1206 has a List-Unsubscribe header in the correct format, and a body link1207 behaves like appearance header and footer enabled1208 contains header and footer1209 behaves like appearance header and footer not enabled1210 does not contain header and footer1211 items that are noteable, the email for a diff discussion note1212 on a commit1213 behaves like an email for a note on a diff discussion1214 includes diffs with character-level highlighting1215 contains a link to the diff file1216 is sent to the given recipient as the author1217 contains the message from the note1218 contains an introduction1219 when note is not on text1220 does not include diffs with character-level highlighting1221 behaves like it should have Gmail Actions links1222 is expected to have body including "ViewAction"1223 when a comment on an existing discussion1224 contains an introduction1225 behaves like it should show Gmail Actions View Commit link1226 is expected to have body including "View Commit"1227 behaves like it should have Gmail Actions links1228 is expected to have body including "ViewAction"1229 behaves like a user cannot unsubscribe through footer link1230 does not have a List-Unsubscribe header or a body link1231 behaves like appearance header and footer enabled1232 contains header and footer1233 behaves like appearance header and footer not enabled1234 does not contain header and footer1235 on a merge request1236 behaves like an email for a note on a diff discussion1237 includes diffs with character-level highlighting1238 contains a link to the diff file1239 is sent to the given recipient as the author1240 contains the message from the note1241 contains an introduction1242 when note is not on text1243 does not include diffs with character-level highlighting1244 behaves like it should have Gmail Actions links1245 is expected to have body including "ViewAction"1246 when a comment on an existing discussion1247 contains an introduction1248 behaves like it should show Gmail Actions View Merge request link1249 is expected to have body including "View Merge request"1250 behaves like it should have Gmail Actions links1251 is expected to have body including "ViewAction"1252 behaves like an unsubscribeable thread1253 has a List-Unsubscribe header in the correct format, and a body link1254 behaves like an unsubscribeable thread with incoming address without %{key}1255 has a List-Unsubscribe header in the correct format, and a body link1256 behaves like appearance header and footer enabled1257 contains header and footer1258 behaves like appearance header and footer not enabled1259 does not contain header and footer1260 for service desk issues1261 thank you email1262 has the correct recipient1263 has the correct subject and body1264 uses service bot name by default1265 behaves like an unsubscribeable thread1266 has a List-Unsubscribe header in the correct format, and a body link1267 behaves like an unsubscribeable thread with incoming address without %{key}1268 has a List-Unsubscribe header in the correct format, and a body link1269 when custom outgoing name is set1270 uses custom name in "from" header1271 when custom outgoing name is empty1272 uses service bot name1273 new note email1274 has the correct recipient1275 uses author's name in "from" header1276 has the correct subject and body1277 behaves like an unsubscribeable thread1278 has a List-Unsubscribe header in the correct format, and a body link1279 behaves like an unsubscribeable thread with incoming address without %{key}1280 has a List-Unsubscribe header in the correct format, and a body link1281 for a group1282 group access requested1283 contains all the useful information1284 behaves like an email sent from GitLab1285 has the characteristics of an email sent from GitLab1286 behaves like an email sent to a user1287 is sent to user's global notification email address1288 with group notification email1289 is sent to user's group notification email1290 behaves like it should not have Gmail Actions links1291 is expected not to have body including "ViewAction"1292 behaves like a user cannot unsubscribe through footer link1293 does not have a List-Unsubscribe header or a body link1294 behaves like appearance header and footer enabled1295 contains header and footer1296 behaves like appearance header and footer not enabled1297 does not contain header and footer1298 group access denied1299 contains all the useful information1300 behaves like an email sent from GitLab1301 has the characteristics of an email sent from GitLab1302 behaves like an email sent to a user1303 is sent to user's global notification email address1304 with group notification email1305 is sent to user's group notification email1306 behaves like it should not have Gmail Actions links1307 is expected not to have body including "ViewAction"1308 behaves like a user cannot unsubscribe through footer link1309 does not have a List-Unsubscribe header or a body link1310 behaves like appearance header and footer enabled1311 contains header and footer1312 behaves like appearance header and footer not enabled1313 does not contain header and footer1314 group access changed1315 contains all the useful information1316 behaves like an email sent from GitLab1317 has the characteristics of an email sent from GitLab1318 behaves like an email sent to a user1319 is sent to user's global notification email address1320 with group notification email1321 is sent to user's group notification email1322 behaves like it should not have Gmail Actions links1323 is expected not to have body including "ViewAction"1324 behaves like a user cannot unsubscribe through footer link1325 does not have a List-Unsubscribe header or a body link1326 behaves like appearance header and footer enabled1327 contains header and footer1328 behaves like appearance header and footer not enabled1329 does not contain header and footer1330 behaves like it requires a group1331 when given an deleted group1332 returns NullMail type message1333 invitations1334 behaves like an email sent from GitLab1335 has the characteristics of an email sent from GitLab1336 behaves like it should not have Gmail Actions links1337 is expected not to have body including "ViewAction"1338 behaves like a user cannot unsubscribe through footer link1339 does not have a List-Unsubscribe header or a body link1340 behaves like appearance header and footer enabled1341 contains header and footer1342 behaves like appearance header and footer not enabled1343 does not contain header and footer1344 behaves like it requires a group1345 when given an deleted group1346 returns NullMail type message1347 behaves like does not render a manage notifications link1348 is expected not to have body including "http://localhost/-/profile/notifications"1349 when there is an inviter1350 contains all the useful information1351 when there is no inviter1352 contains all the useful information1353 group invitation reminders1354 not sending a reminder1355 member does not exist1356 behaves like no email is sent1357 does not send an email1358 member is not created by a user1359 behaves like no email is sent1360 does not send an email1361 member is a known user1362 behaves like no email is sent1363 does not send an email1364 the first reminder1365 contains all the useful information1366 behaves like an email sent from GitLab1367 has the characteristics of an email sent from GitLab1368 behaves like it should not have Gmail Actions links1369 is expected not to have body including "ViewAction"1370 behaves like a user cannot unsubscribe through footer link1371 does not have a List-Unsubscribe header or a body link1372 the second reminder1373 contains all the useful information1374 behaves like an email sent from GitLab1375 has the characteristics of an email sent from GitLab1376 behaves like it should not have Gmail Actions links1377 is expected not to have body including "ViewAction"1378 behaves like a user cannot unsubscribe through footer link1379 does not have a List-Unsubscribe header or a body link1380 the third reminder1381 contains all the useful information1382 behaves like an email sent from GitLab1383 has the characteristics of an email sent from GitLab1384 behaves like it should not have Gmail Actions links1385 is expected not to have body including "ViewAction"1386 behaves like a user cannot unsubscribe through footer link1387 does not have a List-Unsubscribe header or a body link1388 group invitation accepted1389 contains all the useful information1390 behaves like an email sent from GitLab1391 has the characteristics of an email sent from GitLab1392 behaves like it should not have Gmail Actions links1393 is expected not to have body including "ViewAction"1394 behaves like a user cannot unsubscribe through footer link1395 does not have a List-Unsubscribe header or a body link1396 behaves like appearance header and footer enabled1397 contains header and footer1398 behaves like appearance header and footer not enabled1399 does not contain header and footer1400 behaves like it requires a group1401 when given an deleted group1402 returns NullMail type message1403 group invitation declined1404 contains all the useful information1405 behaves like an email sent from GitLab1406 has the characteristics of an email sent from GitLab1407 behaves like it should not have Gmail Actions links1408 is expected not to have body including "ViewAction"1409 behaves like a user cannot unsubscribe through footer link1410 does not have a List-Unsubscribe header or a body link1411 behaves like appearance header and footer enabled1412 contains header and footer1413 behaves like appearance header and footer not enabled1414 does not contain header and footer1415 group expiration date updated1416 when expiration date is changed1417 behaves like an email sent from GitLab1418 has the characteristics of an email sent from GitLab1419 behaves like it should not have Gmail Actions links1420 is expected not to have body including "ViewAction"1421 behaves like a user cannot unsubscribe through footer link1422 does not have a List-Unsubscribe header or a body link1423 behaves like appearance header and footer enabled1424 contains header and footer1425 behaves like appearance header and footer not enabled1426 does not contain header and footer1427 when expiration date is one day away1428 contains all the useful information1429 when expiration date is more than one day away1430 contains all the useful information1431 when a group member is newly given an expiration date1432 contains all the useful information1433 when expiration date is removed1434 contains all the useful information1435 behaves like an email sent from GitLab1436 has the characteristics of an email sent from GitLab1437 behaves like it should not have Gmail Actions links1438 is expected not to have body including "ViewAction"1439 behaves like a user cannot unsubscribe through footer link1440 does not have a List-Unsubscribe header or a body link1441 behaves like appearance header and footer enabled1442 contains header and footer1443 behaves like appearance header and footer not enabled1444 does not contain header and footer1445 admin notification1446 is sent as the author1447 is sent to recipient1448 has the correct subject1449 includes unsubscribe link1450 confirmation if email changed1451 is sent to the new user1452 has the correct subject and body1453 behaves like an email sent from GitLab1454 has the characteristics of an email sent from GitLab1455 behaves like a user cannot unsubscribe through footer link1456 does not have a List-Unsubscribe header or a body link1457 email on push for a created branch1458 is sent as the author1459 has the correct subject and body1460 behaves like it should not have Gmail Actions links1461 is expected not to have body including "ViewAction"1462 behaves like a user cannot unsubscribe through footer link1463 does not have a List-Unsubscribe header or a body link1464 behaves like an email with X-GitLab headers containing project details1465 has X-GitLab-Project headers1466 behaves like an email that contains a header with author username1467 has X-GitLab-Author header containing author's username1468 behaves like appearance header and footer enabled1469 contains header and footer1470 behaves like appearance header and footer not enabled1471 does not contain header and footer1472 email on push for a created tag1473 is sent as the author1474 has the correct subject and body1475 behaves like it should not have Gmail Actions links1476 is expected not to have body including "ViewAction"1477 behaves like a user cannot unsubscribe through footer link1478 does not have a List-Unsubscribe header or a body link1479 behaves like an email with X-GitLab headers containing project details1480 has X-GitLab-Project headers1481 behaves like an email that contains a header with author username1482 has X-GitLab-Author header containing author's username1483 behaves like appearance header and footer enabled1484 contains header and footer1485 behaves like appearance header and footer not enabled1486 does not contain header and footer1487 email on push for a deleted branch1488 is sent as the author1489 has the correct subject1490 behaves like it should not have Gmail Actions links1491 is expected not to have body including "ViewAction"1492 behaves like a user cannot unsubscribe through footer link1493 does not have a List-Unsubscribe header or a body link1494 behaves like an email with X-GitLab headers containing project details1495 has X-GitLab-Project headers1496 behaves like an email that contains a header with author username1497 has X-GitLab-Author header containing author's username1498 behaves like appearance header and footer enabled1499 contains header and footer1500 behaves like appearance header and footer not enabled1501 does not contain header and footer1502 email on push for a deleted tag1503 is sent as the author1504 has the correct subject1505 behaves like it should not have Gmail Actions links1506 is expected not to have body including "ViewAction"1507 behaves like a user cannot unsubscribe through footer link1508 does not have a List-Unsubscribe header or a body link1509 behaves like an email with X-GitLab headers containing project details1510 has X-GitLab-Project headers1511 behaves like an email that contains a header with author username1512 has X-GitLab-Author header containing author's username1513 behaves like appearance header and footer enabled1514 contains header and footer1515 behaves like appearance header and footer not enabled1516 does not contain header and footer1517 email on push with multiple commits1518 is sent as the author1519 has the correct subject and body1520 behaves like it should not have Gmail Actions links1521 is expected not to have body including "ViewAction"1522 behaves like a user cannot unsubscribe through footer link1523 does not have a List-Unsubscribe header or a body link1524 behaves like an email with X-GitLab headers containing project details1525 has X-GitLab-Project headers1526 behaves like an email that contains a header with author username1527 has X-GitLab-Author header containing author's username1528 behaves like appearance header and footer enabled1529 contains header and footer1530 behaves like appearance header and footer not enabled1531 does not contain header and footer1532 when set to send from committer email if domain matches1533 when the committer email domain is within the GitLab domain1534 is sent from the committer email1535 when the committer email domain is not completely within the GitLab domain1536 is sent from the default email1537 when the committer email domain is outside the GitLab domain1538 is sent from the default email1539 email on push with a single commit1540 is sent as the author1541 has the correct subject and body1542 behaves like it should show Gmail Actions View Commit link1543 is expected to have body including "View Commit"1544 behaves like it should have Gmail Actions links1545 is expected to have body including "ViewAction"1546 behaves like a user cannot unsubscribe through footer link1547 does not have a List-Unsubscribe header or a body link1548 behaves like an email with X-GitLab headers containing project details1549 has X-GitLab-Project headers1550 behaves like an email that contains a header with author username1551 has X-GitLab-Author header containing author's username1552 behaves like appearance header and footer enabled1553 contains header and footer1554 behaves like appearance header and footer not enabled1555 does not contain header and footer1556 HTML emails setting1557 behaves like appearance header and footer enabled1558 contains header and footer1559 behaves like appearance header and footer not enabled1560 does not contain header and footer1561 when disabled1562 only sends the text template1563 when enabled1564 sends a multipart message1565 for personal snippet notes1566 has the correct subject1567 has the correct body1568 links to the personal snippet1569 behaves like a user cannot unsubscribe through footer link1570 does not have a List-Unsubscribe header or a body link1571 behaves like appearance header and footer enabled1572 contains header and footer1573 behaves like appearance header and footer not enabled1574 does not contain header and footer1575 merge request reviews1576 is sent to the given recipient as the author1577 contains the message from the notes of the review1578 contains review author name1579 has the correct subject and body1580 behaves like an answer to an existing thread with reply-by-email enabled1581 has X-GitLab-Project headers1582 has X-GitLab-*-ID header1583 has X-GitLab-*-IID header if model has iid defined1584 has X-GitLab-Project headers1585 has X-GitLab-*-ID header1586 has X-GitLab-*-IID header if model has iid defined1587 has the characteristics of a threaded reply1588 when reply-by-email is enabled with incoming address with %{key}1589 has a Reply-To header1590 when reply-by-email is enabled with incoming address without %{key}1591 has X-GitLab-Project headers1592 has X-GitLab-*-ID header1593 has X-GitLab-*-IID header if model has iid defined1594 has the characteristics of a threaded reply1595 has a Reply-To header1596 behaves like it should show Gmail Actions View Merge request link1597 is expected to have body including "View Merge request"1598 behaves like it should have Gmail Actions links1599 is expected to have body including "ViewAction"1600 behaves like an unsubscribeable thread1601 has a List-Unsubscribe header in the correct format, and a body link1602 behaves like an unsubscribeable thread with incoming address without %{key}1603 has a List-Unsubscribe header in the correct format, and a body link1604 when diff note1605 links to notes1606 in product marketing1607 does not raise error1608API::Users1609 admin notes1610 POST /users1611 when unauthenticated1612 return authentication error1613 when authenticated1614 as an admin1615 contains the note of the user1616 as a regular user1617 does not allow creating new user1618 GET /users/:id1619 when unauthenticated1620 does not contain the note of the user1621 when authenticated1622 as an admin1623 contains the note of the user1624 as a regular user1625 does not contain the note of the user1626 PUT /users/:id1627 when user is an admin1628 updates note of the user1629 when user is not an admin1630 cannot update their own note1631 GET /users/1632 when unauthenticated1633 does not contain the note of users1634 when authenticated1635 as a regular user1636 does not contain the note of users1637 as an admin1638 contains the note of users1639 GET /user1640 when authenticated1641 as an admin1642 accesses their own profile1643 contains the note of the user1644 sudo1645 accesses the profile of another regular user1646 does not contain the note of the user1647 accesses the profile of another admin1648 contains the note of the user1649 as a regular user1650 does not contain the note of the user1651 GET /users1652 when unauthenticated1653 returns authorization error when the `username` parameter is not passed1654 returns the user when a valid `username` parameter is passed1655 returns the user when a valid `username` parameter is passed (case insensitive)1656 returns an empty response when an invalid `username` parameter is passed1657 does not return the highest role1658 does not return the current or last sign-in ip addresses1659 when public level is restricted1660 returns authorization error when the `username` parameter refers to an inaccessible user1661 returns authorization error when the `username` parameter is not passed1662 when authenticated1663 returns an array of users1664 returns an array of blocked users1665 returns an array of external users1666 returns one user1667 returns one user (case insensitive)1668 returns a 403 when non-admin user searches by external UID1669 does not reveal the `is_admin` flag of the user1670 when public level is restricted1671 when authenticate as a regular user1672 renders 2001673 when authenticate as an admin1674 renders 2001675 exclude_internal param1676 returns all users when it is not set1677 returns all non internal users when it is set1678 admins param1679 returns all users1680 when admin1681 returns an array of users1682 returns an array of external users1683 returns one user by external UID1684 returns 400 error if provider with no extern_uid1685 returns 400 error if provider with no extern_uid1686 returns a user created before a specific date1687 returns no users created before a specific date1688 returns users created before and after a specific date1689 returns the correct order when sorted by id1690 returns users with 2fa enabled1691 returns users without projects1692 returns 400 when provided incorrect sort params1693 when sudo is defined1694 does not return 5001695 admins param1696 returns only admins1697 GET /users/:id1698 returns a user by id1699 does not return the user's `is_admin` flag1700 does not return the user's `highest_role`1701 does not return the user's sign in IPs1702 does not contain plan or trial data1703 returns a 404 error if user id not found1704 returns a 404 for invalid ID1705 when job title is present1706 returns job title of a user1707 when authenticated as admin1708 includes the `is_admin` field1709 includes the `created_at` field for private users1710 includes the `highest_role` field1711 does not include values for plan or trial1712 when user has not logged in1713 does not include the sign in IPs1714 when user has logged in1715 includes the sign in IPs1716 for an anonymous user1717 returns a user by id1718 returns a 404 if the target user is present but inaccessible1719 returns the `created_at` field for public users1720 does not return the `created_at` field for private users1721 returns the `followers` field for public users1722 does not return the `followers` field for private users1723 returns the `following` field for public users1724 does not return the `following` field for private users1725 GET /users/:id_or_username/status1726 when finding the user by id1727 behaves like rendering user status1728 returns the status if there was one1729 returns an empty response if there was no status1730 when finding the user by username1731 behaves like rendering user status1732 returns the status if there was one1733 returns an empty response if there was no status1734 when finding the user by username (case insensitive)1735 behaves like rendering user status1736 returns the status if there was one1737 returns an empty response if there was no status1738 POST /users/:id/follow1739 on an unfollowed user1740WARNING: Active Record does not support composite primary key.1741user_follow_users has composite primary key. Composite primary key is ignored.1742 follows the user1743 on a followed user1744 does not change following1745 POST /users/:id/unfollow1746 on a followed user1747 unfollow the user1748 on an unfollowed user1749 does not change following1750 GET /users/:id/followers1751 user has followers1752 lists followers1753 do not lists followers if profile is private1754 user does not have any follower1755 does list nothing1756 GET /users/:id/following1757 user has followers1758 lists following user1759 do not lists following user if profile is private1760 user does not have any follower1761 does list nothing1762 POST /users1763 creates user1764 creates user with correct attributes1765 creates user with optional attributes1766 creates non-admin user1767 creates non-admin users by default1768 returns 201 Created on success1769 creates non-external users by default1770 allows an external user to be created1771 creates user with reset password1772 creates user with random password1773 creates user with private profile1774 creates user with view_diffs_file_by_file1775 does not create user with invalid email1776 returns 400 error if name not given1777 returns 400 error if password not given1778 returns 400 error if email not given1779 returns 400 error if username not given1780 doesn't create user with invalid optional attributes1781DEPRECATION WARNING: Calling `delete` to an ActiveModel::Errors messages hash is deprecated. Please call `ActiveModel::Errors#delete` instead. (called from block in model_error_messages at /builds/gitlab-org/gitlab/lib/api/helpers/users_helpers.rb:18)1782DEPRECATION WARNING: Calling `[]=` to an ActiveModel::Errors is deprecated. Please call `ActiveModel::Errors#add` instead. (called from block in model_error_messages at /builds/gitlab-org/gitlab/lib/api/helpers/users_helpers.rb:18)1783 returns 400 error if user does not validate1784 is not available for non admin users1785 with existing user1786 returns 409 conflict error if user with same email exists1787 returns 409 conflict error if same username exists1788 returns 409 conflict error if same username exists (case insensitive)1789 creates user with new identity1790 scopes1791 when the requesting token has the "read_user" scope1792 returns a "403" response1793 PUT /users/:id1794 returns 200 OK on success1795 updates user with new bio1796 updates user with empty bio1797 updates user with nil bio1798 updates user with organization1799 updates user with avatar1800 updates user with a new email1801 skips reconfirmation when requested1802 updates user with their own username1803 updates user's existing identity1804 updates user with new identity1805 updates admin status1806 updates external status1807 private profile is false by default1808 does have default values for theme and color-scheme ID1809 updates private profile1810 updates viewing diffs file by file1811 updates private profile to false when nil is given1812 does not modify private profile when field is not provided1813 does not modify theme or color-scheme ID when field is not provided1814 does not update admin status1815 does not allow invalid update1816 updates theme id1817 does not update invalid theme id1818 updates color scheme id1819 does not update invalid color scheme id1820 returns 404 for non-existing user1821 returns a 404 if invalid ID1822DEPRECATION WARNING: Calling `delete` to an ActiveModel::Errors messages hash is deprecated. Please call `ActiveModel::Errors#delete` instead. (called from block in model_error_messages at /builds/gitlab-org/gitlab/lib/api/helpers/users_helpers.rb:18)1823DEPRECATION WARNING: Calling `[]=` to an ActiveModel::Errors is deprecated. Please call `ActiveModel::Errors#add` instead. (called from block in model_error_messages at /builds/gitlab-org/gitlab/lib/api/helpers/users_helpers.rb:18)1824 returns 400 error if user does not validate1825 returns 400 if provider is missing for identity update1826 returns 400 if external UID is missing for identity update1827 updating password1828 admin updates their own password1829 does not force reset on next login1830 does not enqueue the `admin changed your password` email1831 enqueues the `password changed` email1832 admin updates the password of another user1833 forces reset on next login1834 enqueues the `admin changed your password` email1835 does not enqueue the `password changed` email1836 when the current user is not an admin1837 is not available1838 with existing user1839 returns 409 conflict error if email address exists1840 returns 409 conflict error if username taken1841 returns 409 conflict error if username taken (case insensitive)1842 PUT /user/:id/credit_card_validation1843 when unauthenticated1844 returns authentication error1845 when authenticated as non-admin1846 does not allow updating user's credit card validation1847 when authenticated as admin1848 updates user's credit card validation1849 returns 400 error if credit_card_validated_at is missing1850 returns 404 error if user not found1851 DELETE /users/:id/identities/:provider1852 when unauthenticated1853 returns authentication error1854 when authenticated1855 deletes identity of given provider1856 returns 404 error if user not found1857 returns 404 error if identity not found1858 behaves like 412 response1859 for a modified ressource1860 returns 412 with a JSON error1861 for an unmodified ressource1862 returns 204 with an empty body1863 POST /users/:id/keys1864 does not create invalid ssh key1865 does not create key without title1866 creates ssh key1867 creates SSH key with `expires_at` attribute1868 returns 400 for invalid ID1869 GET /user/:id/keys1870 returns 404 for non-existing user1871 returns array of ssh keys1872 returns array of ssh keys with comments replaced witha simple identifier of username + hostname1873 N+1 queries1874 avoids N+1 queries1875 GET /user/:user_id/keys1876 returns 404 for non-existing user1877 returns array of ssh keys1878 DELETE /user/:id/keys/:key_id1879 when unauthenticated1880 returns authentication error1881 when authenticated1882 deletes existing key1883 returns 404 error if user not found1884 returns 404 error if key not foud1885 behaves like 412 response1886 for a modified ressource1887 returns 412 with a JSON error1888 for an unmodified ressource1889 returns 204 with an empty body1890 POST /users/:id/gpg_keys1891 does not create invalid GPG key1892 creates GPG key1893 returns 400 for invalid ID1894 GET /user/:id/gpg_keys1895 returns 404 for non-existing user1896 returns array of GPG keys1897 GET /user/:id/gpg_keys/:key_id1898 returns 404 for non-existing user1899 returns 404 for non-existing key1900 returns a single GPG key1901 DELETE /user/:id/gpg_keys/:key_id1902 when unauthenticated1903 returns authentication error1904 when authenticated1905 deletes existing key1906 returns 404 error if user not found1907 returns 404 error if key not foud1908 POST /user/:id/gpg_keys/:key_id/revoke1909 when unauthenticated1910 returns authentication error1911 when authenticated1912 revokes existing key1913 returns 404 error if user not found1914 returns 404 error if key not foud1915 POST /users/:id/emails1916 does not create invalid email1917 creates unverified email1918 returns a 400 for invalid ID1919 creates verified email1920 GET /user/:id/emails1921 when unauthenticated1922 returns authentication error1923 when authenticated1924 returns 404 for non-existing user1925 returns array of emails1926 returns a 404 for invalid ID1927 DELETE /user/:id/emails/:email_id1928 when unauthenticated1929 returns authentication error1930 when authenticated1931 deletes existing email1932 returns 404 error if user not found1933 returns 404 error if email not foud1934 returns a 404 for invalid ID1935 behaves like 412 response1936 for a modified ressource1937 returns 412 with a JSON error1938 for an unmodified ressource1939 returns 204 with an empty body1940 DELETE /users/:id1941 deletes user1942 does not delete for unauthenticated user1943 is not available for non admin users1944 returns 404 for non-existing user1945 returns a 404 for invalid ID1946 sole owner of a group1947 hard delete disabled1948DEPRECATION WARNING: Merging ("members"."access_level" != $1) and ("members"."access_level" = $1) no longer maintain both conditions, and will be replaced by the latter in Rails 6.2. To migrate to Rails 6.2's behavior, use `relation.merge(other, rewhere: true)`. (called from solo_owned_groups at /builds/gitlab-org/gitlab/app/models/user.rb:1356)1949 does not delete user1950 hard delete enabled1951DEPRECATION WARNING: Merging ("members"."access_level" != $1) and ("members"."access_level" = $1) no longer maintain both conditions, and will be replaced by the latter in Rails 6.2. To migrate to Rails 6.2's behavior, use `relation.merge(other, rewhere: true)`. (called from solo_owned_groups at /builds/gitlab-org/gitlab/app/models/user.rb:1356)1952DEPRECATION WARNING: Merging ("members"."access_level" != $1) and ("members"."access_level" = $1) no longer maintain both conditions, and will be replaced by the latter in Rails 6.2. To migrate to Rails 6.2's behavior, use `relation.merge(other, rewhere: true)`. (called from solo_owned_groups at /builds/gitlab-org/gitlab/app/models/user.rb:1356)1953 delete user and group1954 behaves like 412 response1955 for a modified ressource1956 returns 412 with a JSON error1957 for an unmodified ressource1958 returns 204 with an empty body1959 hard delete disabled1960 moves contributions to the ghost user1961 hard delete enabled1962 removes contributions1963 GET /user1964 behaves like get user info1965 with regular user1966 returns current user without private token when sudo not defined1967 with personal access token1968 returns 403 without private token when sudo is defined1969 scopes1970 for personal access tokens1971 when the requesting token has the "api" scope1972 returns a "200" response on get request1973 returns a "200" response on head request1974 when the requesting token has the "read_user" scope1975 returns a "200" response on get request1976 returns a "200" response on head request1977 when the requesting token does not have any required scope1978 returns a "403" response1979 for doorkeeper (OAuth) tokens1980 when the requesting token has the "api" scope1981 returns a "200" response on get request1982 returns a "200" response on head request1983 when the requesting token has the "read_user" scope1984 returns a "200" response on get request1985 returns a "200" response on head request1986 when the requesting token does not have any required scope1987 returns a "403" response1988 with admin1989 with personal access token1990 returns 403 without private token when sudo defined1991 returns initial current user without private token but with is_admin when sudo not defined1992 with unauthenticated user1993 returns 401 error if user is unauthenticated1994 behaves like get user info1995 with regular user1996 returns current user without private token when sudo not defined1997 with personal access token1998 returns 403 without private token when sudo is defined1999 scopes2000 for personal access tokens2001 when the requesting token has the "api" scope2002 returns a "200" response on get request2003 returns a "200" response on head request2004 when the requesting token has the "read_user" scope2005 returns a "200" response on get request2006 returns a "200" response on head request2007 when the requesting token does not have any required scope2008 returns a "403" response2009 for doorkeeper (OAuth) tokens2010 when the requesting token has the "api" scope2011 returns a "200" response on get request2012 returns a "200" response on head request2013 when the requesting token has the "read_user" scope2014 returns a "200" response on get request2015 returns a "200" response on head request2016 when the requesting token does not have any required scope2017 returns a "403" response2018 with admin2019 with personal access token2020 returns 403 without private token when sudo defined2021 returns initial current user without private token but with is_admin when sudo not defined2022 with unauthenticated user2023 returns 401 error if user is unauthenticated2024 GET /user/preferences2025 when unauthenticated2026 returns authentication error2027 when authenticated2028 returns user preferences2029 GET /user/keys2030 when unauthenticated2031 returns authentication error2032 when authenticated2033 returns array of ssh keys2034 returns array of ssh keys with comments replaced witha simple identifier of username + hostname2035 N+1 queries2036 avoids N+1 queries2037 scopes2038 for personal access tokens2039 when the requesting token has the "api" scope2040 returns a "200" response on get request2041 returns a "200" response on head request2042 when the requesting token has the "read_user" scope2043 returns a "200" response on get request2044 returns a "200" response on head request2045 when the requesting token does not have any required scope2046 returns a "403" response2047 for doorkeeper (OAuth) tokens2048 when the requesting token has the "api" scope2049 returns a "200" response on get request2050 returns a "200" response on head request2051 when the requesting token has the "read_user" scope2052 returns a "200" response on get request2053 returns a "200" response on head request2054 when the requesting token does not have any required scope2055 returns a "403" response2056 GET /user/keys/:key_id2057 returns single key2058 exposes SSH key comment as a simple identifier of username + hostname2059 returns 404 Not Found within invalid ID2060 returns 404 error if admin accesses user's ssh key2061 returns 404 for invalid ID2062 scopes2063 for personal access tokens2064 when the requesting token has the "api" scope2065 returns a "200" response on get request2066 returns a "200" response on head request2067 when the requesting token has the "read_user" scope2068 returns a "200" response on get request2069 returns a "200" response on head request2070 when the requesting token does not have any required scope2071 returns a "403" response2072 for doorkeeper (OAuth) tokens2073 when the requesting token has the "api" scope2074 returns a "200" response on get request2075 returns a "200" response on head request2076 when the requesting token has the "read_user" scope2077 returns a "200" response on get request2078 returns a "200" response on head request2079 when the requesting token does not have any required scope2080 returns a "403" response2081 POST /user/keys2082 creates ssh key2083 creates SSH key with `expires_at` attribute2084 returns a 401 error if unauthorized2085 does not create ssh key without key2086 does not create ssh key without title2087 does not create ssh key without title2088 DELETE /user/keys/:key_id2089 deletes existed key2090 returns 404 if key ID not found2091 returns 401 error if unauthorized2092 returns a 404 for invalid ID2093 behaves like 412 response2094 for a modified ressource2095 returns 412 with a JSON error2096 for an unmodified ressource2097 returns 204 with an empty body2098 GET /user/gpg_keys2099 when unauthenticated2100 returns authentication error2101 when authenticated2102 returns array of GPG keys2103 scopes2104 for personal access tokens2105 when the requesting token has the "api" scope2106 returns a "200" response on get request2107 returns a "200" response on head request2108 when the requesting token has the "read_user" scope2109 returns a "200" response on get request2110 returns a "200" response on head request2111 when the requesting token does not have any required scope2112 returns a "403" response2113 for doorkeeper (OAuth) tokens2114 when the requesting token has the "api" scope2115 returns a "200" response on get request2116 returns a "200" response on head request2117 when the requesting token has the "read_user" scope2118 returns a "200" response on get request2119 returns a "200" response on head request2120 when the requesting token does not have any required scope2121 returns a "403" response2122 GET /user/gpg_keys/:key_id2123 returns a single key2124 returns 404 Not Found within invalid ID2125 returns 404 error if admin accesses user's GPG key2126 returns 404 for invalid ID2127 scopes2128 for personal access tokens2129 when the requesting token has the "api" scope2130 returns a "200" response on get request2131 returns a "200" response on head request2132 when the requesting token has the "read_user" scope2133 returns a "200" response on get request2134 returns a "200" response on head request2135 when the requesting token does not have any required scope2136 returns a "403" response2137 for doorkeeper (OAuth) tokens2138 when the requesting token has the "api" scope2139 returns a "200" response on get request2140 returns a "200" response on head request2141 when the requesting token has the "read_user" scope2142 returns a "200" response on get request2143 returns a "200" response on head request2144 when the requesting token does not have any required scope2145 returns a "403" response2146 POST /user/gpg_keys2147 creates a GPG key2148 returns a 401 error if unauthorized2149 does not create GPG key without key2150 POST /user/gpg_keys/:key_id/revoke2151 revokes existing GPG key2152 returns 404 if key ID not found2153 returns 401 error if unauthorized2154 returns a 404 for invalid ID2155 DELETE /user/gpg_keys/:key_id2156 deletes existing GPG key2157 returns 404 if key ID not found2158 returns 401 error if unauthorized2159 returns a 404 for invalid ID2160 GET /user/emails2161 when unauthenticated2162 returns authentication error2163 when authenticated2164 returns array of emails2165 scopes2166 for personal access tokens2167 when the requesting token has the "api" scope2168 returns a "200" response on get request2169 returns a "200" response on head request2170 when the requesting token has the "read_user" scope2171 returns a "200" response on get request2172 returns a "200" response on head request2173 when the requesting token does not have any required scope2174 returns a "403" response2175 for doorkeeper (OAuth) tokens2176 when the requesting token has the "api" scope2177 returns a "200" response on get request2178 returns a "200" response on head request2179 when the requesting token has the "read_user" scope2180 returns a "200" response on get request2181 returns a "200" response on head request2182 when the requesting token does not have any required scope2183 returns a "403" response2184 GET /user/emails/:email_id2185 returns single email2186 returns 404 Not Found within invalid ID2187 returns 404 error if admin accesses user's email2188 returns 404 for invalid ID2189 scopes2190 for personal access tokens2191 when the requesting token has the "api" scope2192 returns a "200" response on get request2193 returns a "200" response on head request2194 when the requesting token has the "read_user" scope2195 returns a "200" response on get request2196 returns a "200" response on head request2197 when the requesting token does not have any required scope2198 returns a "403" response2199 for doorkeeper (OAuth) tokens2200 when the requesting token has the "api" scope2201 returns a "200" response on get request2202 returns a "200" response on head request2203 when the requesting token has the "read_user" scope2204 returns a "200" response on get request2205 returns a "200" response on head request2206 when the requesting token does not have any required scope2207 returns a "403" response2208 POST /user/emails2209 creates email2210 returns a 401 error if unauthorized2211 does not create email with invalid email2212 DELETE /user/emails/:email_id2213 deletes existed email2214 returns 404 if email ID not found2215 returns 401 error if unauthorized2216 returns 400 for invalid ID2217 behaves like 412 response2218 for a modified ressource2219 returns 412 with a JSON error2220 for an unmodified ressource2221 returns 204 with an empty body2222 activate and deactivate2223 POST /users/:id/activate2224 performed by a non-admin user2225 is not authorized to perform the action2226 performed by an admin user2227 for a deactivated user2228 activates a deactivated user2229 for an active user2230 returns 2012231 for a blocked user2232 returns 4032233 for a ldap blocked user2234 returns 4032235 for a user that does not exist2236 behaves like 4042237 returns 4042238 POST /users/:id/deactivate2239 performed by a non-admin user2240 is not authorized to perform the action2241 performed by an admin user2242 for an active user2243 with no recent activity2244 deactivates an active user2245 with recent activity2246 does not deactivate an active user2247 for a deactivated user2248 returns 2012249 for a blocked user2250 returns 4032251 for a ldap blocked user2252 returns 4032253 for an internal user2254 returns 4032255 for a user that does not exist2256 behaves like 4042257 returns 4042258 approve pending user2259 POST /users/:id/approve2260 performed by a non-admin user2261 is not authorized to perform the action2262 performed by an admin user2263 for a deactivated user2264 does not approve a deactivated user2265 for an pending approval user2266 returns 2012267 for an active user2268 returns 2012269 for a blocked user2270 returns 4032271 for a ldap blocked user2272 returns 4032273 for a user that does not exist2274 behaves like 4042275 returns 4042276 POST /users/:id/block2277 blocks existing user2278 does not re-block ldap blocked users2279 does not be available for non admin users2280 returns a 404 error if user id not found2281 returns a 403 error if user is internal2282 returns a 201 if user is already blocked2283 POST /users/:id/unblock2284 unblocks existing user2285 unblocks a blocked user2286 does not unblock ldap blocked users2287 does not unblock deactivated users2288 is not available for non admin users2289 returns a 404 error if user id not found2290 returns a 404 for invalid ID2291 GET /users/:id/memberships2292 responses with 4032293 requested by admin user2294 responses successfully2295 does not submit N+1 DB queries2296 with type filter2297 only returns project memberships2298 only returns group memberships2299 recognizes unsupported types2300 user activities2301 last activity as normal user2302 has no permission2303 as admin2304 returns the activities from the last 6 months2305 passing a :from parameter2306 returns the activities from the given date2307 GET /user/status2308 behaves like rendering user status2309 returns the status if there was one2310 returns an empty response if there was no status2311 PUT /user/status2312 saves the status2313 renders errors when the status was invalid2314 deletes the status when passing empty values2315 when clear_status_after is given2316 sets the clear_status_at column2317 unsets the clear_status_at column2318 raises error when unknown status value is given2319 POST /users/:user_id/personal_access_tokens2320 returns error if required attributes are missing2321 returns a 404 error if user not found2322 returns a 401 error when not authenticated2323 returns a 403 error when authenticated as normal user2324 creates a personal access token when authenticated as admin2325 when an error is thrown by the model2326 returns the error2327 GET /users/:user_id/impersonation_tokens2328 returns a 404 error if user not found2329 returns a 403 error when authenticated as normal user2330 returns an array of all impersonated tokens2331 returns an array of active impersonation tokens if state active2332 returns an array of inactive personal access tokens if active is set to false2333 POST /users/:user_id/impersonation_tokens2334 returns validation error if impersonation token misses some attributes2335 returns a 404 error if user not found2336 returns a 403 error when authenticated as normal user2337 creates a impersonation token2338 GET /users/:user_id/impersonation_tokens/:impersonation_token_id2339 returns 404 error if user not found2340 returns a 404 error if impersonation token not found2341 returns a 404 error if token is not impersonation token2342 returns a 403 error when authenticated as normal user2343 returns an impersonation token2344 DELETE /users/:user_id/impersonation_tokens/:impersonation_token_id2345 returns a 404 error if user not found2346 returns a 404 error if impersonation token not found2347 returns a 404 error if token is not impersonation token2348 returns a 403 error when authenticated as normal user2349 revokes a impersonation token2350 behaves like 412 response2351 for a modified ressource2352 returns 412 with a JSON error2353 for an unmodified ressource2354 returns 204 with an empty body2355 behaves like custom attributes endpoints2356 GET /users with custom attributes filter2357 with an unauthorized user2358 does not filter by custom attributes2359 with an authorized user2360 filters by custom attributes2361 GET /users with custom attributes2362 with an unauthorized user2363 does not include custom attributes2364 with an authorized user2365 does not include custom attributes by default2366 includes custom attributes if requested2367 GET /users/:id with custom attributes2368 with an unauthorized user2369 does not include custom attributes2370 with an authorized user2371 does not include custom attributes by default2372 includes custom attributes if requested2373 GET /users/:id/custom_attributes2374 with an unauthorized user2375 behaves like an unauthorized API user2376 is expected to eq 4032377 with an authorized user2378 returns all custom attributes2379 GET /users/:id/custom_attributes/:key2380 with an unauthorized user2381 behaves like an unauthorized API user2382 is expected to eq 4032383 with an authorized user2384 returns a single custom attribute2385 PUT /users/:id/custom_attributes/:key2386 with an unauthorized user2387 behaves like an unauthorized API user2388 is expected to eq 4032389 with an authorized user2390 creates a new custom attribute2391 updates an existing custom attribute2392 DELETE /users/:id/custom_attributes/:key2393 with an unauthorized user2394 behaves like an unauthorized API user2395 is expected to eq 4032396 with an authorized user2397 deletes an existing custom attribute2398API::Notes2399 when there are cross-reference system notes2400 behaves like with cross-reference system notes2401 returns only the note that the user should see2402 avoids Git calls and N+1 SQL queries2403 when noteable is an Issue2404 behaves like noteable API2405 GET /projects/:id/issues/:noteable_id/notes2406 returns an array of notes2407 returns a 404 error when noteable id not found2408 returns 404 when not authorized2409 sorting2410 sorts by ascending order when requested2411 sorts by updated_at in descending order when requested2412 sorts by updated_at in ascending order when requested2413 without sort params2414 sorts by created_at in descending order by default2415 fetches notes using parent path as id paremeter2416 2 notes with equal created_at2417 page breaks first page correctly2418 page breaks second page correctly2419 GET /projects/:id/issues/:noteable_id/notes/:note_id2420 returns a note by id2421 returns a 404 error if note not found2422 POST /projects/:id/issues/:noteable_id/notes2423DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2424To achieve the same use:2425 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2426 creates a new note2427DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2428To achieve the same use:2429 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2430 creates a confidential note if confidential is set to true2431 returns a 400 bad request error if body not given2432 returns a 401 unauthorized error if user not authenticated2433DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2434To achieve the same use:2435 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2436 creates an activity event when a note is created2437 setting created_at2438 by an admin2439DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2440To achieve the same use:2441 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2442 sets the creation time on the new note2443 by a project owner2444DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2445To achieve the same use:2446 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2447 sets the creation time on the new note2448 by a group owner2449DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2450To achieve the same use:2451 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2452 sets the creation time on the new note2453 by another user2454DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2455To achieve the same use:2456 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2457 ignores the given creation time2458 when the user is posting an award emoji on a noteable created by someone else2459DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2460To achieve the same use:2461 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2462 creates a new note2463 when the user is posting an award emoji on their own noteable2464DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2465To achieve the same use:2466 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2467 creates a new note2468 when user does not have access to read the noteable2469 responds with 4042470 when request exceeds the rate limit2471 prevents user from creating more notes2472DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2473To achieve the same use:2474 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2475 allows user in allow-list to create notes2476 PUT /projects/:id/issues/:noteable_id/notes/:note_id2477 returns a 404 error when note id not found2478 returns a 400 bad request error if body is empty2479 when eveything is ok2480 with multiple params present2481 returns modified note2482 updates the note2483 when only body param is present2484 updates only the note text2485 when only confidential param is present2486 updates only the note text2487 DELETE /projects/:id/issues/:noteable_id/notes/:note_id2488 deletes a note2489 returns a 404 error when note id not found2490 behaves like 412 response2491 for a modified ressource2492 returns 412 with a JSON error2493 for an unmodified ressource2494 returns 204 with an empty body2495 when user does not have access to create noteable2496 responds with resource not found error2497 does not create new note2498 when referencing other project2499 GET /projects/:id/noteable/:noteable_id/notes2500 current user cannot view the notes2501 returns an empty array2502 issue is confidential2503 returns 4042504 current user can view the note2505 returns a non-empty array2506 activity filters2507 when not provided2508 returns all the notes2509 behaves like a notes request2510 is a note array response2511 when all_notes provided2512 returns all the notes2513 behaves like a notes request2514 is a note array response2515 when provided2516 filter: "only_comments", count: 1, system_notable: false2517 properly filters the returned notables2518 behaves like a notes request2519 is a note array response2520 filter: "only_activity", count: 1, system_notable: true2521 properly filters the returned notables2522 behaves like a notes request2523 is a note array response2524 GET /projects/:id/noteable/:noteable_id/notes/:note_id2525 current user cannot view the notes2526 returns a 404 error2527 when issue is confidential2528 returns 4042529 current user can view the note2530 returns an issue note by id2531 when noteable is a Snippet2532 behaves like noteable API2533 GET /projects/:id/snippets/:noteable_id/notes2534 returns an array of notes2535 returns a 404 error when noteable id not found2536 returns 404 when not authorized2537 sorting2538 sorts by ascending order when requested2539 sorts by updated_at in descending order when requested2540 sorts by updated_at in ascending order when requested2541 without sort params2542 sorts by created_at in descending order by default2543 fetches notes using parent path as id paremeter2544 2 notes with equal created_at2545 page breaks first page correctly2546 page breaks second page correctly2547 GET /projects/:id/snippets/:noteable_id/notes/:note_id2548 returns a note by id2549 returns a 404 error if note not found2550 POST /projects/:id/snippets/:noteable_id/notes2551DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2552To achieve the same use:2553 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2554 creates a new note2555DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2556To achieve the same use:2557 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2558 creates a confidential note if confidential is set to true2559 returns a 400 bad request error if body not given2560 returns a 401 unauthorized error if user not authenticated2561DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2562To achieve the same use:2563 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2564 creates an activity event when a note is created2565 setting created_at2566 by an admin2567DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2568To achieve the same use:2569 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2570 sets the creation time on the new note2571 by a project owner2572DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2573To achieve the same use:2574 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2575 sets the creation time on the new note2576 by a group owner2577DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2578To achieve the same use:2579 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2580 sets the creation time on the new note2581 by another user2582DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2583To achieve the same use:2584 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2585 ignores the given creation time2586 when the user is posting an award emoji on a noteable created by someone else2587DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2588To achieve the same use:2589 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2590 creates a new note2591 when the user is posting an award emoji on their own noteable2592DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2593To achieve the same use:2594 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2595 creates a new note2596 when user does not have access to read the noteable2597 responds with 4042598 when request exceeds the rate limit2599 prevents user from creating more notes2600DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2601To achieve the same use:2602 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2603 allows user in allow-list to create notes2604 PUT /projects/:id/snippets/:noteable_id/notes/:note_id2605 returns a 404 error when note id not found2606 returns a 400 bad request error if body is empty2607 when eveything is ok2608 with multiple params present2609 returns modified note2610 updates the note2611 when only body param is present2612 updates only the note text2613 when only confidential param is present2614 updates only the note text2615 DELETE /projects/:id/snippets/:noteable_id/notes/:note_id2616 deletes a note2617 returns a 404 error when note id not found2618 behaves like 412 response2619 for a modified ressource2620 returns 412 with a JSON error2621 for an unmodified ressource2622 returns 204 with an empty body2623 when noteable is a Merge Request2624 behaves like noteable API2625 GET /projects/:id/merge_requests/:noteable_id/notes2626 returns an array of notes2627 returns a 404 error when noteable id not found2628 returns 404 when not authorized2629 sorting2630 sorts by ascending order when requested2631 sorts by updated_at in descending order when requested2632 sorts by updated_at in ascending order when requested2633 without sort params2634 sorts by created_at in descending order by default2635 fetches notes using parent path as id paremeter2636 2 notes with equal created_at2637 page breaks first page correctly2638 page breaks second page correctly2639 GET /projects/:id/merge_requests/:noteable_id/notes/:note_id2640 returns a note by id2641 returns a 404 error if note not found2642 POST /projects/:id/merge_requests/:noteable_id/notes2643DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2644To achieve the same use:2645 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2646 creates a new note2647DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2648To achieve the same use:2649 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2650 creates a confidential note if confidential is set to true2651 returns a 400 bad request error if body not given2652 returns a 401 unauthorized error if user not authenticated2653DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2654To achieve the same use:2655 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2656 creates an activity event when a note is created2657 setting created_at2658 by an admin2659DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2660To achieve the same use:2661 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2662 sets the creation time on the new note2663 by a project owner2664DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2665To achieve the same use:2666 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2667 sets the creation time on the new note2668 by a group owner2669DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2670To achieve the same use:2671 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2672 sets the creation time on the new note2673 by another user2674DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2675To achieve the same use:2676 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2677 ignores the given creation time2678 when the user is posting an award emoji on a noteable created by someone else2679DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2680To achieve the same use:2681 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2682 creates a new note2683 when the user is posting an award emoji on their own noteable2684DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2685To achieve the same use:2686 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2687 creates a new note2688 when user does not have access to read the noteable2689 responds with 4042690 when request exceeds the rate limit2691 prevents user from creating more notes2692DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2693To achieve the same use:2694 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2695 allows user in allow-list to create notes2696 PUT /projects/:id/merge_requests/:noteable_id/notes/:note_id2697 returns a 404 error when note id not found2698 returns a 400 bad request error if body is empty2699 when eveything is ok2700 with multiple params present2701 returns modified note2702 updates the note2703 when only body param is present2704 updates only the note text2705 when only confidential param is present2706 updates only the note text2707 DELETE /projects/:id/merge_requests/:noteable_id/notes/:note_id2708 deletes a note2709 returns a 404 error when note id not found2710 behaves like 412 response2711 for a modified ressource2712 returns 412 with a JSON error2713 for an unmodified ressource2714 returns 204 with an empty body2715 a command only note2716DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2717To achieve the same use:2718 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2719 returns 202 Accepted status2720DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2721To achieve the same use:2722 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2723 does not actually create a new note2724DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2725To achieve the same use:2726 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2727 does however create a system note about the change2728DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2729To achieve the same use:2730 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2731 applies the commands2732DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2733To achieve the same use:2734 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2735 reports the changes2736 when the merge request discussion is locked2737 when a user is a team member2738DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2739To achieve the same use:2740 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2741 returns 200 status2742DEPRECATION WARNING: ActiveModel::Errors#keys is deprecated and will be removed in Rails 6.2.2743To achieve the same use:2744 errors.attribute_names (called from block (3 levels) in <class:Notes> at /builds/gitlab-org/gitlab/lib/api/notes.rb:91)2745 creates a new note2746 when a user is not a team member2747 returns 403 status2748 does not create a new note2749API::ConanInstancePackages2750 GET /api/v4/packages/conan/v1/ping2751 behaves like conan ping endpoint2752 responds with 200 OK when no token provided2753 packages feature disabled2754 responds with 404 Not Found2755 GET /api/v4/packages/conan/v1/conans/search2756 behaves like conan search endpoint2757 returns packages with a matching name2758 is expected to contain exactly "package-5/1.0.0@namespace271+project292/stable"2759 returns packages using a * wildcard2760 is expected to contain exactly "package-7/1.0.0@namespace273+project294/stable"2761 does not return non-matching packages2762 is expected to be blank2763 GET /api/v4/packages/conan/v1/users/authenticate2764 behaves like conan authenticate endpoint2765 responds with 401 Unauthorized when an invalid access token ID is provided2766 responds with 401 Unauthorized when invalid user is provided2767 responds with 401 Unauthorized when the provided JWT is signed with different secret2768 responds with 401 UnauthorizedOK when invalid JWT is provided2769 when using invalid token2770 responds with 4012771 when valid JWT access token is provided2772 responds with 2002773 token has valid validity time2774 with valid job token2775 responds with 2002776 with valid deploy token2777 responds with 2002778 GET /api/v4/packages/conan/v1/users/check_credentials2779 behaves like conan check_credentials endpoint2780 responds with a 200 OK with PAT2781 responds with a 401 Unauthorized when an invalid token is used2782 with job token2783 responds with a 200 OK with job token2784 with deploy token2785 responds with a 200 OK with job token2786 recipe endpoints2787 GET /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel2788 behaves like recipe snapshot endpoint2789 behaves like rejects invalid recipe2790 with invalid recipe path2791 returns 4002792 behaves like rejects recipe for invalid project2793 with invalid project2794 behaves like not found request2795 returns not found2796 behaves like empty recipe for not found package2797 with invalid recipe url2798 returns not found2799 with existing package2800 returns a hash of files with their md5 hashes2801 GET /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel/packages/:conan_package_reference2802 behaves like package snapshot endpoint2803 behaves like rejects invalid recipe2804 with invalid recipe path2805 returns 4002806 behaves like rejects recipe for invalid project2807 with invalid project2808 behaves like not found request2809 returns not found2810 behaves like empty recipe for not found package2811 with invalid recipe url2812 returns not found2813 with existing package2814 returns a hash of md5 values for the files2815 GET /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel/digest2816 behaves like recipe download_urls endpoint2817 behaves like rejects invalid recipe2818 with invalid recipe path2819 returns 4002820 behaves like rejects recipe for invalid project2821 with invalid project2822 behaves like not found request2823 returns not found2824 behaves like recipe download_urls2825 returns the download_urls for the recipe files2826 behaves like not selecting a package with the wrong type2827 with a nuget package with same name and version2828 calls the presenter with a nil package2829 GET /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel/packages/:conan_package_reference/download_urls2830 behaves like package download_urls endpoint2831 behaves like rejects invalid recipe2832 with invalid recipe path2833 returns 4002834 behaves like rejects recipe for invalid project2835 with invalid project2836 behaves like not found request2837 returns not found2838 behaves like package download_urls2839 returns the download_urls for the package files2840 behaves like not selecting a package with the wrong type2841 with a nuget package with same name and version2842 calls the presenter with a nil package2843 GET /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel/download_urls2844 behaves like recipe download_urls endpoint2845 behaves like rejects invalid recipe2846 with invalid recipe path2847 returns 4002848 behaves like rejects recipe for invalid project2849 with invalid project2850 behaves like not found request2851 returns not found2852 behaves like recipe download_urls2853 returns the download_urls for the recipe files2854 behaves like not selecting a package with the wrong type2855 with a nuget package with same name and version2856 calls the presenter with a nil package2857 GET /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel/packages/:conan_package_reference/digest2858 behaves like package download_urls endpoint2859 behaves like rejects invalid recipe2860 with invalid recipe path2861 returns 4002862 behaves like rejects recipe for invalid project2863 with invalid project2864 behaves like not found request2865 returns not found2866 behaves like package download_urls2867 returns the download_urls for the package files2868 behaves like not selecting a package with the wrong type2869 with a nuget package with same name and version2870 calls the presenter with a nil package2871 POST /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel/upload_urls2872 behaves like recipe upload_urls endpoint2873 returns a set of upload urls for the files requested2874 behaves like rejects invalid recipe2875 with invalid recipe path2876 returns 4002877 behaves like rejects invalid upload_url params2878 with unaccepted json format2879 returns 4002880 with conan_sources and conan_export files2881 returns upload urls for the additional files2882 with an invalid file2883 does not return the invalid file as an upload_url2884 POST /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel/packages/:conan_package_reference/upload_urls2885 behaves like package upload_urls endpoint2886 returns a set of upload urls for the files requested2887 behaves like rejects invalid recipe2888 with invalid recipe path2889 returns 4002890 behaves like rejects invalid upload_url params2891 with unaccepted json format2892 returns 4002893 with invalid files2894 returns upload urls only for the valid requested files2895 DELETE /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel2896 behaves like delete package endpoint2897 returns unauthorized for users without valid permission2898 behaves like rejects invalid recipe2899 with invalid recipe path2900 returns 4002901 with delete permissions2902 deletes a package2903 behaves like a gitlab tracking event2904 creates a gitlab tracking event delete_package2905 file download endpoints2906 GET /api/v4/packages/conan/v1/files/:package_name/package_version/:package_username/:package_channel/2907:recipe_revision/export/:file_name2908 behaves like recipe file download endpoint2909 behaves like a public project with packages2910 returns the file2911 behaves like allows download with no token2912 with no private token2913 returns 2002914 behaves like an internal project with packages2915 returns the file2916 behaves like denies download with no token2917 with no private token2918 returns 4042919 behaves like a private project with packages2920 returns the file2921 denies download when not enough permissions2922 behaves like denies download with no token2923 with no private token2924 returns 4042925 behaves like project not found by recipe2926 behaves like not found request2927 returns not found2928 GET /api/v4/packages/conan/v1/files/:package_name/package_version/:package_username/:package_channel/2929:recipe_revision/package/:conan_package_reference/:package_revision/:file_name2930 behaves like package file download endpoint2931 behaves like a public project with packages2932 returns the file2933 behaves like allows download with no token2934 with no private token2935 returns 2002936 behaves like an internal project with packages2937 returns the file2938 behaves like denies download with no token2939 with no private token2940 returns 4042941 behaves like a private project with packages2942 returns the file2943 denies download when not enough permissions2944 behaves like denies download with no token2945 with no private token2946 returns 4042947 tracking the conan_package.tgz download2948 behaves like a gitlab tracking event2949 creates a gitlab tracking event pull_package2950 behaves like project not found by recipe2951 behaves like not found request2952 returns not found2953 file upload endpoints2954 PUT /api/v4/packages/conan/v1/files/:package_name/package_version/:package_username/:package_channel/:recipe_revision/export/:file_name/authorize2955 behaves like workhorse authorize endpoint2956 behaves like rejects invalid recipe2957 with invalid recipe path2958 returns 4002959 behaves like rejects invalid file_name2960 with invalid file_name2961 returns 4002962 behaves like workhorse authorization2963 authorizes posting package with a valid token2964 rejects request without a valid token2965 rejects request without a valid permission2966 rejects requests that bypassed gitlab-workhorse2967 when using remote storage2968 when direct upload is enabled2969 responds with status 200, location of package remote store and object details2970 when direct upload is disabled2971 handles as a local file2972 PUT /api/v4/packages/conan/v1/files/:package_name/package_version/:package_username/:package_channel/:recipe_revision/export/:conan_package_reference/:package_revision/:file_name/authorize2973 behaves like workhorse authorize endpoint2974 behaves like rejects invalid recipe2975 with invalid recipe path2976 returns 4002977 behaves like rejects invalid file_name2978 with invalid file_name2979 returns 4002980 behaves like workhorse authorization2981 authorizes posting package with a valid token2982 rejects request without a valid token2983 rejects request without a valid permission2984 rejects requests that bypassed gitlab-workhorse2985 when using remote storage2986 when direct upload is enabled2987 responds with status 200, location of package remote store and object details2988 when direct upload is disabled2989 handles as a local file2990 PUT /api/v4/packages/conan/v1/files/:package_name/package_version/:package_username/:package_channel/:recipe_revision/export/:file_name2991 behaves like workhorse recipe file upload endpoint2992 behaves like rejects invalid recipe2993 with invalid recipe path2994 returns 4002995 behaves like rejects invalid file_name2996 with invalid file_name2997 returns 4002998 behaves like uploads a package file2999 file size above maximum limit3000 handles as a local file3001 with object storage disabled3002 without a file from workhorse3003 rejects the request3004 with a file3005 behaves like package workhorse uploads3006 without a workhorse header3007 logs an error3008 behaves like returning response status3009 returns forbidden3010 without a token3011 rejects request without a token3012 when params from workhorse are correct3013 creates package and stores package file3014 doesn't attempt to migrate file to object storage3015 with object storage enabled3016 and direct upload enabled3017 with invalid remote_id: 1231233018 responds with status 4033019 with invalid remote_id: ../../1231233020 responds with status 4033021 with valid remote_id3022 creates package and stores package file3023 behaves like background upload schedules a file migration3024 background upload enabled3025 schedules migration of file to object storage3026 PUT /api/v4/packages/conan/v1/files/:package_name/package_version/:package_username/:package_channel/:recipe_revision/export/:conan_package_reference/:package_revision/:file_name3027 behaves like workhorse package file upload endpoint3028 behaves like rejects invalid recipe3029 with invalid recipe path3030 returns 4003031 behaves like rejects invalid file_name3032 with invalid file_name3033 returns 4003034 behaves like uploads a package file3035 file size above maximum limit3036 handles as a local file3037 with object storage disabled3038 without a file from workhorse3039 rejects the request3040 with a file3041 behaves like package workhorse uploads3042 without a workhorse header3043 logs an error3044 behaves like returning response status3045 returns forbidden3046 without a token3047 rejects request without a token3048 when params from workhorse are correct3049 creates package and stores package file3050 doesn't attempt to migrate file to object storage3051 with object storage enabled3052 and direct upload enabled3053 with invalid remote_id: 1231233054 responds with status 4033055 with invalid remote_id: ../../1231233056 responds with status 4033057 with valid remote_id3058 creates package and stores package file3059 behaves like background upload schedules a file migration3060 background upload enabled3061 schedules migration of file to object storage3062 tracking the conan_package.tgz upload3063 behaves like a gitlab tracking event3064 creates a gitlab tracking event push_package3065API::Terraform::Modules::V1::Packages3066 GET /api/v4/packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/versions3067 with valid namespace3068 visibility: :public, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "returns terraform module packages", expected_status: :success3069 behaves like returns terraform module packages3070 for user type developer3071 returning a valid response3072 behaves like returning response status3073 returns success3074 visibility: :public, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "returns terraform module packages", expected_status: :success3075 behaves like returns terraform module packages3076 for user type guest3077 returning a valid response3078 behaves like returning response status3079 returns success3080 visibility: :public, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3081 behaves like rejects terraform module packages access3082 for user type developer3083 behaves like returning response status3084 returns unauthorized3085 visibility: :public, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3086 behaves like rejects terraform module packages access3087 for user type guest3088 behaves like returning response status3089 returns unauthorized3090 visibility: :public, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "returns no terraform module packages", expected_status: :success3091 behaves like returns no terraform module packages3092 for user type developer3093 returns a response with no versions3094 behaves like returning response status3095 returns success3096 visibility: :public, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "returns no terraform module packages", expected_status: :success3097 behaves like returns no terraform module packages3098 for user type guest3099 returns a response with no versions3100 behaves like returning response status3101 returns success3102 visibility: :public, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3103 behaves like rejects terraform module packages access3104 for user type developer3105 behaves like returning response status3106 returns unauthorized3107 visibility: :public, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3108 behaves like rejects terraform module packages access3109 for user type guest3110 behaves like returning response status3111 returns unauthorized3112 visibility: :public, user_role: :anonymous, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "returns no terraform module packages", expected_status: :success3113 behaves like returns no terraform module packages3114 for user type anonymous3115 returns a response with no versions3116 behaves like returning response status3117 returns success3118 visibility: :private, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "returns terraform module packages", expected_status: :success3119 behaves like returns terraform module packages3120 for user type developer3121 returning a valid response3122 behaves like returning response status3123 returns success3124 visibility: :private, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3125 behaves like rejects terraform module packages access3126 for user type guest3127 behaves like returning response status3128 returns forbidden3129 visibility: :private, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3130 behaves like rejects terraform module packages access3131 for user type developer3132 behaves like returning response status3133 returns unauthorized3134 visibility: :private, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3135 behaves like rejects terraform module packages access3136 for user type guest3137 behaves like returning response status3138 returns unauthorized3139 visibility: :private, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3140 behaves like rejects terraform module packages access3141 for user type developer3142 behaves like returning response status3143 returns forbidden3144 visibility: :private, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3145 behaves like rejects terraform module packages access3146 for user type guest3147 behaves like returning response status3148 returns forbidden3149 visibility: :private, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3150 behaves like rejects terraform module packages access3151 for user type developer3152 behaves like returning response status3153 returns unauthorized3154 visibility: :private, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3155 behaves like rejects terraform module packages access3156 for user type guest3157 behaves like returning response status3158 returns unauthorized3159 visibility: :private, user_role: :anonymous, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3160 behaves like rejects terraform module packages access3161 for user type anonymous3162 behaves like returning response status3163 returns unauthorized3164 visibility: :public, user_role: :developer, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "returns terraform module packages", expected_status: :success3165 behaves like returns terraform module packages3166 for user type developer3167 returning a valid response3168 behaves like returning response status3169 returns success3170 visibility: :public, user_role: :guest, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "returns no terraform module packages", expected_status: :success3171 behaves like returns no terraform module packages3172 for user type guest3173 returns a response with no versions3174 behaves like returning response status3175 returns success3176 visibility: :public, user_role: :guest, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3177 behaves like rejects terraform module packages access3178 for user type guest3179 behaves like returning response status3180 returns unauthorized3181 visibility: :public, user_role: :developer, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "returns no terraform module packages", expected_status: :success3182 behaves like returns no terraform module packages3183 for user type developer3184 returns a response with no versions3185 behaves like returning response status3186 returns success3187 visibility: :public, user_role: :guest, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "returns no terraform module packages", expected_status: :success3188 behaves like returns no terraform module packages3189 for user type guest3190 returns a response with no versions3191 behaves like returning response status3192 returns success3193 visibility: :public, user_role: :developer, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3194 behaves like rejects terraform module packages access3195 for user type developer3196 behaves like returning response status3197 returns unauthorized3198 visibility: :public, user_role: :guest, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3199 behaves like rejects terraform module packages access3200 for user type guest3201 behaves like returning response status3202 returns unauthorized3203 visibility: :private, user_role: :developer, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "returns terraform module packages", expected_status: :success3204 behaves like returns terraform module packages3205 for user type developer3206 returning a valid response3207 behaves like returning response status3208 returns success3209 visibility: :private, user_role: :guest, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3210 behaves like rejects terraform module packages access3211 for user type guest3212 behaves like returning response status3213 returns forbidden3214 visibility: :private, user_role: :developer, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3215 behaves like rejects terraform module packages access3216 for user type developer3217 behaves like returning response status3218 returns unauthorized3219 visibility: :private, user_role: :guest, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3220 behaves like rejects terraform module packages access3221 for user type guest3222 behaves like returning response status3223 returns unauthorized3224 visibility: :private, user_role: :developer, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3225 behaves like rejects terraform module packages access3226 for user type developer3227 behaves like returning response status3228 returns forbidden3229 visibility: :private, user_role: :guest, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3230 behaves like rejects terraform module packages access3231 for user type guest3232 behaves like returning response status3233 returns forbidden3234 visibility: :private, user_role: :developer, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3235 behaves like rejects terraform module packages access3236 for user type developer3237 behaves like returning response status3238 returns unauthorized3239 visibility: :private, user_role: :guest, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3240 behaves like rejects terraform module packages access3241 for user type guest3242 behaves like returning response status3243 returns unauthorized3244 GET /api/v4/packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/:module_version/download3245 with valid namespace3246 visibility: :public, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "grants terraform module download", expected_status: :success3247 behaves like grants terraform module download3248 for user type developer3249 returns a valid response3250 behaves like returning response status3251 returns success3252 visibility: :public, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3253 behaves like rejects terraform module packages access3254 for user type guest3255 behaves like returning response status3256 returns not_found3257 visibility: :public, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3258 behaves like rejects terraform module packages access3259 for user type developer3260 behaves like returning response status3261 returns unauthorized3262 visibility: :public, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3263 behaves like rejects terraform module packages access3264 for user type guest3265 behaves like returning response status3266 returns unauthorized3267 visibility: :public, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3268 behaves like rejects terraform module packages access3269 for user type developer3270 behaves like returning response status3271 returns not_found3272 visibility: :public, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3273 behaves like rejects terraform module packages access3274 for user type guest3275 behaves like returning response status3276 returns not_found3277 visibility: :public, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3278 behaves like rejects terraform module packages access3279 for user type developer3280 behaves like returning response status3281 returns unauthorized3282 visibility: :public, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3283 behaves like rejects terraform module packages access3284 for user type guest3285 behaves like returning response status3286 returns unauthorized3287 visibility: :public, user_role: :anonymous, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3288 behaves like rejects terraform module packages access3289 for user type anonymous3290 behaves like returning response status3291 returns not_found3292 visibility: :private, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "grants terraform module download", expected_status: :success3293 behaves like grants terraform module download3294 for user type developer3295 returns a valid response3296 behaves like returning response status3297 returns success3298 visibility: :private, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3299 behaves like rejects terraform module packages access3300 for user type guest3301 behaves like returning response status3302 returns forbidden3303 visibility: :private, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3304 behaves like rejects terraform module packages access3305 for user type developer3306 behaves like returning response status3307 returns unauthorized3308 visibility: :private, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3309 behaves like rejects terraform module packages access3310 for user type guest3311 behaves like returning response status3312 returns unauthorized3313 visibility: :private, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3314 behaves like rejects terraform module packages access3315 for user type developer3316 behaves like returning response status3317 returns forbidden3318 visibility: :private, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3319 behaves like rejects terraform module packages access3320 for user type guest3321 behaves like returning response status3322 returns forbidden3323 visibility: :private, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3324 behaves like rejects terraform module packages access3325 for user type developer3326 behaves like returning response status3327 returns unauthorized3328 visibility: :private, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3329 behaves like rejects terraform module packages access3330 for user type guest3331 behaves like returning response status3332 returns unauthorized3333 visibility: :private, user_role: :anonymous, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3334 behaves like rejects terraform module packages access3335 for user type anonymous3336 behaves like returning response status3337 returns unauthorized3338 visibility: :public, user_role: :developer, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "grants terraform module download", expected_status: :success3339 behaves like grants terraform module download3340 for user type developer3341 returns a valid response3342 behaves like returning response status3343 returns success3344 visibility: :public, user_role: :guest, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3345 behaves like rejects terraform module packages access3346 for user type guest3347 behaves like returning response status3348 returns not_found3349 visibility: :public, user_role: :guest, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3350 behaves like rejects terraform module packages access3351 for user type guest3352 behaves like returning response status3353 returns unauthorized3354 visibility: :public, user_role: :developer, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3355 behaves like rejects terraform module packages access3356 for user type developer3357 behaves like returning response status3358 returns not_found3359 visibility: :public, user_role: :guest, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3360 behaves like rejects terraform module packages access3361 for user type guest3362 behaves like returning response status3363 returns not_found3364 visibility: :public, user_role: :developer, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3365 behaves like rejects terraform module packages access3366 for user type developer3367 behaves like returning response status3368 returns unauthorized3369 visibility: :public, user_role: :guest, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3370 behaves like rejects terraform module packages access3371 for user type guest3372 behaves like returning response status3373 returns unauthorized3374 visibility: :private, user_role: :developer, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "grants terraform module download", expected_status: :success3375 behaves like grants terraform module download3376 for user type developer3377 returns a valid response3378 behaves like returning response status3379 returns success3380 visibility: :private, user_role: :guest, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3381 behaves like rejects terraform module packages access3382 for user type guest3383 behaves like returning response status3384 returns forbidden3385 visibility: :private, user_role: :developer, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3386 behaves like rejects terraform module packages access3387 for user type developer3388 behaves like returning response status3389 returns unauthorized3390 visibility: :private, user_role: :guest, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3391 behaves like rejects terraform module packages access3392 for user type guest3393 behaves like returning response status3394 returns unauthorized3395 visibility: :private, user_role: :developer, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3396 behaves like rejects terraform module packages access3397 for user type developer3398 behaves like returning response status3399 returns forbidden3400 visibility: :private, user_role: :guest, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3401 behaves like rejects terraform module packages access3402 for user type guest3403 behaves like returning response status3404 returns forbidden3405 visibility: :private, user_role: :developer, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3406 behaves like rejects terraform module packages access3407 for user type developer3408 behaves like returning response status3409 returns unauthorized3410 visibility: :private, user_role: :guest, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3411 behaves like rejects terraform module packages access3412 for user type guest3413 behaves like returning response status3414 returns unauthorized3415 GET /api/v4/packages/terraform/modules/v1/:module_namespace/:module_name/:module_system/:module_version/file3416 with valid namespace3417 visibility: :public, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "grants terraform module package file access", expected_status: :success3418 behaves like grants terraform module package file access3419 for user type developer3420 behaves like returning response status3421 returns success3422 behaves like a package tracking event3423 creates a gitlab tracking event pull_package3424 visibility: :public, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3425 behaves like rejects terraform module packages access3426 for user type guest3427 behaves like returning response status3428 returns not_found3429 visibility: :public, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3430 behaves like rejects terraform module packages access3431 for user type developer3432 behaves like returning response status3433 returns unauthorized3434 visibility: :public, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3435 behaves like rejects terraform module packages access3436 for user type guest3437 behaves like returning response status3438 returns unauthorized3439 visibility: :public, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3440 behaves like rejects terraform module packages access3441 for user type developer3442 behaves like returning response status3443 returns not_found3444 visibility: :public, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3445 behaves like rejects terraform module packages access3446 for user type guest3447 behaves like returning response status3448 returns not_found3449 visibility: :public, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3450 behaves like rejects terraform module packages access3451 for user type developer3452 behaves like returning response status3453 returns unauthorized3454 visibility: :public, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3455 behaves like rejects terraform module packages access3456 for user type guest3457 behaves like returning response status3458 returns unauthorized3459 visibility: :public, user_role: :anonymous, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3460 behaves like rejects terraform module packages access3461 for user type anonymous3462 behaves like returning response status3463 returns not_found3464 visibility: :private, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "grants terraform module package file access", expected_status: :success3465 behaves like grants terraform module package file access3466 for user type developer3467 behaves like returning response status3468 returns success3469 behaves like a package tracking event3470 creates a gitlab tracking event pull_package3471 visibility: :private, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3472 behaves like rejects terraform module packages access3473 for user type guest3474 behaves like returning response status3475 returns forbidden3476 visibility: :private, user_role: :developer, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3477 behaves like rejects terraform module packages access3478 for user type developer3479 behaves like returning response status3480 returns unauthorized3481 visibility: :private, user_role: :guest, member: true, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3482 behaves like rejects terraform module packages access3483 for user type guest3484 behaves like returning response status3485 returns unauthorized3486 visibility: :private, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3487 behaves like rejects terraform module packages access3488 for user type developer3489 behaves like returning response status3490 returns forbidden3491 visibility: :private, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3492 behaves like rejects terraform module packages access3493 for user type guest3494 behaves like returning response status3495 returns forbidden3496 visibility: :private, user_role: :developer, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3497 behaves like rejects terraform module packages access3498 for user type developer3499 behaves like returning response status3500 returns unauthorized3501 visibility: :private, user_role: :guest, member: false, token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3502 behaves like rejects terraform module packages access3503 for user type guest3504 behaves like returning response status3505 returns unauthorized3506 visibility: :private, user_role: :anonymous, member: false, token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3507 behaves like rejects terraform module packages access3508 for user type anonymous3509 behaves like returning response status3510 returns forbidden3511 visibility: :public, user_role: :developer, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "grants terraform module package file access", expected_status: :success3512 behaves like grants terraform module package file access3513 for user type developer3514 behaves like returning response status3515 returns success3516 behaves like a package tracking event3517 creates a gitlab tracking event pull_package3518 visibility: :public, user_role: :guest, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3519 behaves like rejects terraform module packages access3520 for user type guest3521 behaves like returning response status3522 returns not_found3523 visibility: :public, user_role: :guest, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3524 behaves like rejects terraform module packages access3525 for user type guest3526 behaves like returning response status3527 returns unauthorized3528 visibility: :public, user_role: :developer, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3529 behaves like rejects terraform module packages access3530 for user type developer3531 behaves like returning response status3532 returns not_found3533 visibility: :public, user_role: :guest, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3534 behaves like rejects terraform module packages access3535 for user type guest3536 behaves like returning response status3537 returns not_found3538 visibility: :public, user_role: :developer, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3539 behaves like rejects terraform module packages access3540 for user type developer3541 behaves like returning response status3542 returns unauthorized3543 visibility: :public, user_role: :guest, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3544 behaves like rejects terraform module packages access3545 for user type guest3546 behaves like returning response status3547 returns unauthorized3548 visibility: :private, user_role: :developer, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "grants terraform module package file access", expected_status: :success3549 behaves like grants terraform module package file access3550 for user type developer3551 behaves like returning response status3552 returns success3553 behaves like a package tracking event3554 creates a gitlab tracking event pull_package3555 visibility: :private, user_role: :guest, member: true, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3556 behaves like rejects terraform module packages access3557 for user type guest3558 behaves like returning response status3559 returns forbidden3560 visibility: :private, user_role: :developer, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3561 behaves like rejects terraform module packages access3562 for user type developer3563 behaves like returning response status3564 returns unauthorized3565 visibility: :private, user_role: :guest, member: true, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3566 behaves like rejects terraform module packages access3567 for user type guest3568 behaves like returning response status3569 returns unauthorized3570 visibility: :private, user_role: :developer, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3571 behaves like rejects terraform module packages access3572 for user type developer3573 behaves like returning response status3574 returns forbidden3575 visibility: :private, user_role: :guest, member: false, token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3576 behaves like rejects terraform module packages access3577 for user type guest3578 behaves like returning response status3579 returns forbidden3580 visibility: :private, user_role: :developer, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3581 behaves like rejects terraform module packages access3582 for user type developer3583 behaves like returning response status3584 returns unauthorized3585 visibility: :private, user_role: :guest, member: false, token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3586 behaves like rejects terraform module packages access3587 for user type guest3588 behaves like returning response status3589 returns unauthorized3590 PUT /api/v4/projects/:project_id/packages/terraform/modules/:module_name/:module_system/:module_version/file/authorize3591 with valid project3592 visibility: :public, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "process terraform module workhorse authorization", expected_status: :success3593 behaves like process terraform module workhorse authorization3594 for user type developer3595 has the proper content type3596 behaves like returning response status3597 returns success3598 with a request that bypassed gitlab-workhorse3599 behaves like returning response status3600 returns forbidden3601 visibility: :public, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3602 behaves like rejects terraform module packages access3603 for user type guest3604 behaves like returning response status3605 returns forbidden3606 visibility: :public, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3607 behaves like rejects terraform module packages access3608 for user type developer3609 behaves like returning response status3610 returns unauthorized3611 visibility: :public, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3612 behaves like rejects terraform module packages access3613 for user type guest3614 behaves like returning response status3615 returns unauthorized3616 visibility: :public, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3617 behaves like rejects terraform module packages access3618 for user type developer3619 behaves like returning response status3620 returns forbidden3621 visibility: :public, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3622 behaves like rejects terraform module packages access3623 for user type guest3624 behaves like returning response status3625 returns forbidden3626 visibility: :public, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3627 behaves like rejects terraform module packages access3628 for user type developer3629 behaves like returning response status3630 returns unauthorized3631 visibility: :public, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3632 behaves like rejects terraform module packages access3633 for user type guest3634 behaves like returning response status3635 returns unauthorized3636 visibility: :public, user_role: :anonymous, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3637 behaves like rejects terraform module packages access3638 for user type anonymous3639 behaves like returning response status3640 returns unauthorized3641 visibility: :private, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "process terraform module workhorse authorization", expected_status: :success3642 behaves like process terraform module workhorse authorization3643 for user type developer3644 has the proper content type3645 behaves like returning response status3646 returns success3647 with a request that bypassed gitlab-workhorse3648 behaves like returning response status3649 returns forbidden3650 visibility: :private, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3651 behaves like rejects terraform module packages access3652 for user type guest3653 behaves like returning response status3654 returns forbidden3655 visibility: :private, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3656 behaves like rejects terraform module packages access3657 for user type developer3658 behaves like returning response status3659 returns unauthorized3660 visibility: :private, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3661 behaves like rejects terraform module packages access3662 for user type guest3663 behaves like returning response status3664 returns unauthorized3665 visibility: :private, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3666 behaves like rejects terraform module packages access3667 for user type developer3668 behaves like returning response status3669 returns not_found3670 visibility: :private, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3671 behaves like rejects terraform module packages access3672 for user type guest3673 behaves like returning response status3674 returns not_found3675 visibility: :private, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3676 behaves like rejects terraform module packages access3677 for user type developer3678 behaves like returning response status3679 returns unauthorized3680 visibility: :private, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3681 behaves like rejects terraform module packages access3682 for user type guest3683 behaves like returning response status3684 returns unauthorized3685 visibility: :private, user_role: :anonymous, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3686 behaves like rejects terraform module packages access3687 for user type anonymous3688 behaves like returning response status3689 returns unauthorized3690 visibility: :public, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "process terraform module workhorse authorization", expected_status: :success3691 behaves like process terraform module workhorse authorization3692 for user type developer3693 has the proper content type3694 behaves like returning response status3695 returns success3696 with a request that bypassed gitlab-workhorse3697 behaves like returning response status3698 returns forbidden3699 visibility: :public, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3700 behaves like rejects terraform module packages access3701 for user type guest3702 behaves like returning response status3703 returns forbidden3704 visibility: :public, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3705 behaves like rejects terraform module packages access3706 for user type developer3707 behaves like returning response status3708 returns unauthorized3709 visibility: :public, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3710 behaves like rejects terraform module packages access3711 for user type guest3712 behaves like returning response status3713 returns unauthorized3714 visibility: :public, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3715 behaves like rejects terraform module packages access3716 for user type developer3717 behaves like returning response status3718 returns forbidden3719 visibility: :public, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3720 behaves like rejects terraform module packages access3721 for user type guest3722 behaves like returning response status3723 returns forbidden3724 visibility: :public, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3725 behaves like rejects terraform module packages access3726 for user type developer3727 behaves like returning response status3728 returns unauthorized3729 visibility: :public, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3730 behaves like rejects terraform module packages access3731 for user type guest3732 behaves like returning response status3733 returns unauthorized3734 visibility: :private, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "process terraform module workhorse authorization", expected_status: :success3735 behaves like process terraform module workhorse authorization3736 for user type developer3737 has the proper content type3738 behaves like returning response status3739 returns success3740 with a request that bypassed gitlab-workhorse3741 behaves like returning response status3742 returns forbidden3743 visibility: :private, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3744 behaves like rejects terraform module packages access3745 for user type guest3746 behaves like returning response status3747 returns forbidden3748 visibility: :private, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3749 behaves like rejects terraform module packages access3750 for user type developer3751 behaves like returning response status3752 returns unauthorized3753 visibility: :private, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3754 behaves like rejects terraform module packages access3755 for user type guest3756 behaves like returning response status3757 returns unauthorized3758 visibility: :private, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3759 behaves like rejects terraform module packages access3760 for user type developer3761 behaves like returning response status3762 returns not_found3763 visibility: :private, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3764 behaves like rejects terraform module packages access3765 for user type guest3766 behaves like returning response status3767 returns not_found3768 visibility: :private, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3769 behaves like rejects terraform module packages access3770 for user type developer3771 behaves like returning response status3772 returns unauthorized3773 visibility: :private, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3774 behaves like rejects terraform module packages access3775 for user type guest3776 behaves like returning response status3777 returns unauthorized3778 visibility: :public, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: true, shared_examples_name: "process terraform module workhorse authorization", expected_status: :success3779 behaves like process terraform module workhorse authorization3780 for user type developer3781 has the proper content type3782 behaves like returning response status3783 returns success3784 with a request that bypassed gitlab-workhorse3785 behaves like returning response status3786 returns forbidden3787 visibility: :public, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3788 behaves like rejects terraform module packages access3789 for user type developer3790 behaves like returning response status3791 returns unauthorized3792 visibility: :private, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: true, shared_examples_name: "process terraform module workhorse authorization", expected_status: :success3793 behaves like process terraform module workhorse authorization3794 for user type developer3795 has the proper content type3796 behaves like returning response status3797 returns success3798 with a request that bypassed gitlab-workhorse3799 behaves like returning response status3800 returns forbidden3801 visibility: :private, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3802 behaves like rejects terraform module packages access3803 for user type developer3804 behaves like returning response status3805 returns unauthorized3806 PUT /api/v4/projects/:project_id/packages/terraform/modules/:module_name/:module_system/:module_version/file3807 with valid project3808 visibility: :public, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "process terraform module upload", expected_status: :created3809 behaves like process terraform module upload3810 for user type developer3811 with object storage disabled3812 without a file from workhorse3813 behaves like returning response status3814 returns bad_request3815 with correct params3816 behaves like package workhorse uploads3817 without a workhorse header3818 logs an error3819 behaves like returning response status3820 returns forbidden3821 behaves like creates terraform module package files3822 creates package files3823 behaves like a package tracking event3824 creates a gitlab tracking event push_package3825 with object storage enabled3826 and direct upload enabled3827 behaves like creates terraform module package files3828 creates package files3829 with invalid remote_id: 1231233830 behaves like returning response status3831 returns forbidden3832 with invalid remote_id: ../../1231233833 behaves like returning response status3834 returns forbidden3835 and direct upload disabled3836 and background upload disabled3837 behaves like creates terraform module package files3838 creates package files3839 and background upload enabled3840 behaves like creates terraform module package files3841 creates package files3842 visibility: :public, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3843 behaves like rejects terraform module packages access3844 for user type guest3845 behaves like returning response status3846 returns forbidden3847 visibility: :public, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3848 behaves like rejects terraform module packages access3849 for user type developer3850 behaves like returning response status3851 returns unauthorized3852 visibility: :public, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3853 behaves like rejects terraform module packages access3854 for user type guest3855 behaves like returning response status3856 returns unauthorized3857 visibility: :public, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3858 behaves like rejects terraform module packages access3859 for user type developer3860 behaves like returning response status3861 returns forbidden3862 visibility: :public, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3863 behaves like rejects terraform module packages access3864 for user type guest3865 behaves like returning response status3866 returns forbidden3867 visibility: :public, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3868 behaves like rejects terraform module packages access3869 for user type developer3870 behaves like returning response status3871 returns unauthorized3872 visibility: :public, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3873 behaves like rejects terraform module packages access3874 for user type guest3875 behaves like returning response status3876 returns unauthorized3877 visibility: :public, user_role: :anonymous, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3878 behaves like rejects terraform module packages access3879 for user type anonymous3880 behaves like returning response status3881 returns unauthorized3882 visibility: :private, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "process terraform module upload", expected_status: :created3883 behaves like process terraform module upload3884 for user type developer3885 with object storage disabled3886 without a file from workhorse3887 behaves like returning response status3888 returns bad_request3889 with correct params3890 behaves like package workhorse uploads3891 without a workhorse header3892 logs an error3893 behaves like returning response status3894 returns forbidden3895 behaves like creates terraform module package files3896 creates package files3897 behaves like a package tracking event3898 creates a gitlab tracking event push_package3899 with object storage enabled3900 and direct upload enabled3901 behaves like creates terraform module package files3902 creates package files3903 with invalid remote_id: 1231233904 behaves like returning response status3905 returns forbidden3906 with invalid remote_id: ../../1231233907 behaves like returning response status3908 returns forbidden3909 and direct upload disabled3910 and background upload disabled3911 behaves like creates terraform module package files3912 creates package files3913 and background upload enabled3914 behaves like creates terraform module package files3915 creates package files3916 visibility: :private, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3917 behaves like rejects terraform module packages access3918 for user type guest3919 behaves like returning response status3920 returns forbidden3921 visibility: :private, user_role: :developer, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3922 behaves like rejects terraform module packages access3923 for user type developer3924 behaves like returning response status3925 returns unauthorized3926 visibility: :private, user_role: :guest, member: true, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3927 behaves like rejects terraform module packages access3928 for user type guest3929 behaves like returning response status3930 returns unauthorized3931 visibility: :private, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3932 behaves like rejects terraform module packages access3933 for user type developer3934 behaves like returning response status3935 returns not_found3936 visibility: :private, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found3937 behaves like rejects terraform module packages access3938 for user type guest3939 behaves like returning response status3940 returns not_found3941 visibility: :private, user_role: :developer, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3942 behaves like rejects terraform module packages access3943 for user type developer3944 behaves like returning response status3945 returns unauthorized3946 visibility: :private, user_role: :guest, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3947 behaves like rejects terraform module packages access3948 for user type guest3949 behaves like returning response status3950 returns unauthorized3951 visibility: :private, user_role: :anonymous, member: false, token_header: "PRIVATE-TOKEN", token_type: :personal_access_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3952 behaves like rejects terraform module packages access3953 for user type anonymous3954 behaves like returning response status3955 returns unauthorized3956 visibility: :public, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "process terraform module upload", expected_status: :created3957 behaves like process terraform module upload3958 for user type developer3959 with object storage disabled3960 without a file from workhorse3961 behaves like returning response status3962 returns bad_request3963 with correct params3964 behaves like package workhorse uploads3965 without a workhorse header3966 logs an error3967 behaves like returning response status3968 returns forbidden3969 behaves like creates terraform module package files3970 creates package files3971 behaves like a package tracking event3972 creates a gitlab tracking event push_package3973 with object storage enabled3974 and direct upload enabled3975 behaves like creates terraform module package files3976 creates package files3977 with invalid remote_id: 1231233978 behaves like returning response status3979 returns forbidden3980 with invalid remote_id: ../../1231233981 behaves like returning response status3982 returns forbidden3983 and direct upload disabled3984 and background upload disabled3985 behaves like creates terraform module package files3986 creates package files3987 and background upload enabled3988 behaves like creates terraform module package files3989 creates package files3990 visibility: :public, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden3991 behaves like rejects terraform module packages access3992 for user type guest3993 behaves like returning response status3994 returns forbidden3995 visibility: :public, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized3996 behaves like rejects terraform module packages access3997 for user type developer3998 behaves like returning response status3999 returns unauthorized4000 visibility: :public, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4001 behaves like rejects terraform module packages access4002 for user type guest4003 behaves like returning response status4004 returns unauthorized4005 visibility: :public, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden4006 behaves like rejects terraform module packages access4007 for user type developer4008 behaves like returning response status4009 returns forbidden4010 visibility: :public, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden4011 behaves like rejects terraform module packages access4012 for user type guest4013 behaves like returning response status4014 returns forbidden4015 visibility: :public, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4016 behaves like rejects terraform module packages access4017 for user type developer4018 behaves like returning response status4019 returns unauthorized4020 visibility: :public, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4021 behaves like rejects terraform module packages access4022 for user type guest4023 behaves like returning response status4024 returns unauthorized4025 visibility: :private, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "process terraform module upload", expected_status: :created4026 behaves like process terraform module upload4027 for user type developer4028 with object storage disabled4029 without a file from workhorse4030 behaves like returning response status4031 returns bad_request4032 with correct params4033 behaves like package workhorse uploads4034 without a workhorse header4035 logs an error4036 behaves like returning response status4037 returns forbidden4038 behaves like creates terraform module package files4039 creates package files4040 behaves like a package tracking event4041 creates a gitlab tracking event push_package4042 with object storage enabled4043 and direct upload enabled4044 behaves like creates terraform module package files4045 creates package files4046 with invalid remote_id: 1231234047 behaves like returning response status4048 returns forbidden4049 with invalid remote_id: ../../1231234050 behaves like returning response status4051 returns forbidden4052 and direct upload disabled4053 and background upload disabled4054 behaves like creates terraform module package files4055 creates package files4056 and background upload enabled4057 behaves like creates terraform module package files4058 creates package files4059 visibility: :private, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :forbidden4060 behaves like rejects terraform module packages access4061 for user type guest4062 behaves like returning response status4063 returns forbidden4064 visibility: :private, user_role: :developer, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4065 behaves like rejects terraform module packages access4066 for user type developer4067 behaves like returning response status4068 returns unauthorized4069 visibility: :private, user_role: :guest, member: true, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4070 behaves like rejects terraform module packages access4071 for user type guest4072 behaves like returning response status4073 returns unauthorized4074 visibility: :private, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found4075 behaves like rejects terraform module packages access4076 for user type developer4077 behaves like returning response status4078 returns not_found4079 visibility: :private, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: true, shared_examples_name: "rejects terraform module packages access", expected_status: :not_found4080 behaves like rejects terraform module packages access4081 for user type guest4082 behaves like returning response status4083 returns not_found4084 visibility: :private, user_role: :developer, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4085 behaves like rejects terraform module packages access4086 for user type developer4087 behaves like returning response status4088 returns unauthorized4089 visibility: :private, user_role: :guest, member: false, token_header: "JOB-TOKEN", token_type: :job_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4090 behaves like rejects terraform module packages access4091 for user type guest4092 behaves like returning response status4093 returns unauthorized4094 visibility: :public, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: true, shared_examples_name: "process terraform module upload", expected_status: :created4095 behaves like process terraform module upload4096 for user type developer4097 with object storage disabled4098 without a file from workhorse4099 behaves like returning response status4100 returns bad_request4101 with correct params4102 behaves like package workhorse uploads4103 without a workhorse header4104 logs an error4105 behaves like returning response status4106 returns forbidden4107 behaves like creates terraform module package files4108 creates package files4109 behaves like a package tracking event4110 creates a gitlab tracking event push_package4111 with object storage enabled4112 and direct upload enabled4113 behaves like creates terraform module package files4114 creates package files4115 with invalid remote_id: 1231234116 behaves like returning response status4117 returns forbidden4118 with invalid remote_id: ../../1231234119 behaves like returning response status4120 returns forbidden4121 and direct upload disabled4122 and background upload disabled4123 behaves like creates terraform module package files4124 creates package files4125 and background upload enabled4126 behaves like creates terraform module package files4127 creates package files4128 visibility: :public, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4129 behaves like rejects terraform module packages access4130 for user type developer4131 behaves like returning response status4132 returns unauthorized4133 visibility: :private, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: true, shared_examples_name: "process terraform module upload", expected_status: :created4134 behaves like process terraform module upload4135 for user type developer4136 with object storage disabled4137 without a file from workhorse4138 behaves like returning response status4139 returns bad_request4140 with correct params4141 behaves like package workhorse uploads4142 without a workhorse header4143 logs an error4144 behaves like returning response status4145 returns forbidden4146 behaves like creates terraform module package files4147 creates package files4148 behaves like a package tracking event4149 creates a gitlab tracking event push_package4150 with object storage enabled4151 and direct upload enabled4152 behaves like creates terraform module package files4153 creates package files4154 with invalid remote_id: 1231234155 behaves like returning response status4156 returns forbidden4157 with invalid remote_id: ../../1231234158 behaves like returning response status4159 returns forbidden4160 and direct upload disabled4161 and background upload disabled4162 behaves like creates terraform module package files4163 creates package files4164 and background upload enabled4165 behaves like creates terraform module package files4166 creates package files4167 visibility: :private, user_role: :developer, member: true, token_header: "DEPLOY-TOKEN", token_type: :deploy_token, valid_token: false, shared_examples_name: "rejects terraform module packages access", expected_status: :unauthorized4168 behaves like rejects terraform module packages access4169 for user type developer4170 behaves like returning response status4171 returns unauthorized4172 failed package file save4173 does not create package record4174API::DebianProjectPackages4175 with invalid parameter4176 behaves like Debian repository GET request4177 returns bad_request and expected body4178 GET projects/:id/packages/debian/dists/*distribution/Release.gpg4179 behaves like Debian repository read endpoint4180 with valid container4181 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNATURE-----/4182 behaves like Debian repository GET request4183 returns success and expected body4184 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNATURE-----/4185 behaves like Debian repository GET request4186 returns success and expected body4187 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4188 behaves like Debian repository GET request4189 returns unauthorized4190 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4191 behaves like Debian repository GET request4192 returns unauthorized4193 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNATURE-----/4194 behaves like Debian repository GET request4195 returns success and expected body4196 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNATURE-----/4197 behaves like Debian repository GET request4198 returns success and expected body4199 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4200 behaves like Debian repository GET request4201 returns unauthorized4202 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4203 behaves like Debian repository GET request4204 returns unauthorized4205 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNATURE-----/4206 behaves like Debian repository GET request4207 returns success and expected body4208 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNATURE-----/4209 behaves like Debian repository GET request4210 returns success and expected body4211 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4212 behaves like Debian repository GET request4213 returns forbidden4214 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4215 behaves like Debian repository GET request4216 returns unauthorized4217 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4218 behaves like Debian repository GET request4219 returns unauthorized4220 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4221 behaves like Debian repository GET request4222 returns not_found4223 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4224 behaves like Debian repository GET request4225 returns not_found4226 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4227 behaves like Debian repository GET request4228 returns unauthorized4229 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4230 behaves like Debian repository GET request4231 returns unauthorized4232 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4233 behaves like Debian repository GET request4234 returns unauthorized4235 behaves like rejects Debian access with unknown container id4236 with an unknown container4237 as anonymous4238 behaves like Debian repository GET request4239 returns unauthorized4240 as authenticated user4241 behaves like Debian repository GET request4242 returns not_found4243 GET projects/:id/packages/debian/dists/*distribution/Release4244 behaves like Debian repository read endpoint4245 with valid container4246 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^Codename: fixture-distribution\n$/4247 behaves like Debian repository GET request4248 returns success and expected body4249 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /^Codename: fixture-distribution\n$/4250 behaves like Debian repository GET request4251 returns success and expected body4252 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4253 behaves like Debian repository GET request4254 returns unauthorized4255 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4256 behaves like Debian repository GET request4257 returns unauthorized4258 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /^Codename: fixture-distribution\n$/4259 behaves like Debian repository GET request4260 returns success and expected body4261 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /^Codename: fixture-distribution\n$/4262 behaves like Debian repository GET request4263 returns success and expected body4264 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4265 behaves like Debian repository GET request4266 returns unauthorized4267 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4268 behaves like Debian repository GET request4269 returns unauthorized4270 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /^Codename: fixture-distribution\n$/4271 behaves like Debian repository GET request4272 returns success and expected body4273 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^Codename: fixture-distribution\n$/4274 behaves like Debian repository GET request4275 returns success and expected body4276 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4277 behaves like Debian repository GET request4278 returns forbidden4279 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4280 behaves like Debian repository GET request4281 returns unauthorized4282 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4283 behaves like Debian repository GET request4284 returns unauthorized4285 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4286 behaves like Debian repository GET request4287 returns not_found4288 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4289 behaves like Debian repository GET request4290 returns not_found4291 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4292 behaves like Debian repository GET request4293 returns unauthorized4294 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4295 behaves like Debian repository GET request4296 returns unauthorized4297 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4298 behaves like Debian repository GET request4299 returns unauthorized4300 behaves like rejects Debian access with unknown container id4301 with an unknown container4302 as anonymous4303 behaves like Debian repository GET request4304 returns unauthorized4305 as authenticated user4306 behaves like Debian repository GET request4307 returns not_found4308 GET projects/:id/packages/debian/dists/*distribution/InRelease4309 behaves like Debian repository read endpoint4310 with valid container4311 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNED MESSAGE-----/4312 behaves like Debian repository GET request4313 returns success and expected body4314 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNED MESSAGE-----/4315 behaves like Debian repository GET request4316 returns success and expected body4317 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4318 behaves like Debian repository GET request4319 returns unauthorized4320 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4321 behaves like Debian repository GET request4322 returns unauthorized4323 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNED MESSAGE-----/4324 behaves like Debian repository GET request4325 returns success and expected body4326 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNED MESSAGE-----/4327 behaves like Debian repository GET request4328 returns success and expected body4329 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4330 behaves like Debian repository GET request4331 returns unauthorized4332 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4333 behaves like Debian repository GET request4334 returns unauthorized4335 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNED MESSAGE-----/4336 behaves like Debian repository GET request4337 returns success and expected body4338 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^-----BEGIN PGP SIGNED MESSAGE-----/4339 behaves like Debian repository GET request4340 returns success and expected body4341 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4342 behaves like Debian repository GET request4343 returns forbidden4344 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4345 behaves like Debian repository GET request4346 returns unauthorized4347 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4348 behaves like Debian repository GET request4349 returns unauthorized4350 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4351 behaves like Debian repository GET request4352 returns not_found4353 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4354 behaves like Debian repository GET request4355 returns not_found4356 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4357 behaves like Debian repository GET request4358 returns unauthorized4359 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4360 behaves like Debian repository GET request4361 returns unauthorized4362 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4363 behaves like Debian repository GET request4364 returns unauthorized4365 behaves like rejects Debian access with unknown container id4366 with an unknown container4367 as anonymous4368 behaves like Debian repository GET request4369 returns unauthorized4370 as authenticated user4371 behaves like Debian repository GET request4372 returns not_found4373 GET projects/:id/packages/debian/dists/*distribution/:component/binary-:architecture/Packages4374 behaves like Debian repository read endpoint4375 with valid container4376 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /Description: This is an incomplete Packages file/4377 behaves like Debian repository GET request4378 returns success and expected body4379 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /Description: This is an incomplete Packages file/4380 behaves like Debian repository GET request4381 returns success and expected body4382 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4383 behaves like Debian repository GET request4384 returns unauthorized4385 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4386 behaves like Debian repository GET request4387 returns unauthorized4388 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /Description: This is an incomplete Packages file/4389 behaves like Debian repository GET request4390 returns success and expected body4391 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /Description: This is an incomplete Packages file/4392 behaves like Debian repository GET request4393 returns success and expected body4394 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4395 behaves like Debian repository GET request4396 returns unauthorized4397 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4398 behaves like Debian repository GET request4399 returns unauthorized4400 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /Description: This is an incomplete Packages file/4401 behaves like Debian repository GET request4402 returns success and expected body4403 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /Description: This is an incomplete Packages file/4404 behaves like Debian repository GET request4405 returns success and expected body4406 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4407 behaves like Debian repository GET request4408 returns forbidden4409 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4410 behaves like Debian repository GET request4411 returns unauthorized4412 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4413 behaves like Debian repository GET request4414 returns unauthorized4415 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4416 behaves like Debian repository GET request4417 returns not_found4418 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4419 behaves like Debian repository GET request4420 returns not_found4421 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4422 behaves like Debian repository GET request4423 returns unauthorized4424 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4425 behaves like Debian repository GET request4426 returns unauthorized4427 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4428 behaves like Debian repository GET request4429 returns unauthorized4430 behaves like rejects Debian access with unknown container id4431 with an unknown container4432 as anonymous4433 behaves like Debian repository GET request4434 returns unauthorized4435 as authenticated user4436 behaves like Debian repository GET request4437 returns not_found4438 GET projects/:id/packages/debian/pool/:codename/:letter/:package_name/:package_version/:file_name4439 file_name: "sample_1.2.3~alpha2.tar.xz", success_body: /^.7zXZ/4440 behaves like Debian repository read endpoint4441 with valid container4442 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^.7zXZ/4443 behaves like Debian repository GET request4444 returns success and expected body4445 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /^.7zXZ/4446 behaves like Debian repository GET request4447 returns success and expected body4448 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4449 behaves like Debian repository GET request4450 returns unauthorized4451 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4452 behaves like Debian repository GET request4453 returns unauthorized4454 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /^.7zXZ/4455 behaves like Debian repository GET request4456 returns success and expected body4457 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /^.7zXZ/4458 behaves like Debian repository GET request4459 returns success and expected body4460 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4461 behaves like Debian repository GET request4462 returns unauthorized4463 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4464 behaves like Debian repository GET request4465 returns unauthorized4466 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /^.7zXZ/4467 behaves like Debian repository GET request4468 returns success and expected body4469 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^.7zXZ/4470 behaves like Debian repository GET request4471 returns success and expected body4472 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4473 behaves like Debian repository GET request4474 returns forbidden4475 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4476 behaves like Debian repository GET request4477 returns unauthorized4478 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4479 behaves like Debian repository GET request4480 returns unauthorized4481 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4482 behaves like Debian repository GET request4483 returns not_found4484 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4485 behaves like Debian repository GET request4486 returns not_found4487 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4488 behaves like Debian repository GET request4489 returns unauthorized4490 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4491 behaves like Debian repository GET request4492 returns unauthorized4493 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4494 behaves like Debian repository GET request4495 returns unauthorized4496 behaves like rejects Debian access with unknown container id4497 with an unknown container4498 as anonymous4499 behaves like Debian repository GET request4500 returns unauthorized4501 as authenticated user4502 behaves like Debian repository GET request4503 returns not_found4504 file_name: "sample_1.2.3~alpha2.dsc", success_body: /^Format: 3.0 \(native\)/4505 behaves like Debian repository read endpoint4506 with valid container4507 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^Format: 3.0 \(native\)/4508 behaves like Debian repository GET request4509 returns success and expected body4510 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /^Format: 3.0 \(native\)/4511 behaves like Debian repository GET request4512 returns success and expected body4513 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4514 behaves like Debian repository GET request4515 returns unauthorized4516 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4517 behaves like Debian repository GET request4518 returns unauthorized4519 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /^Format: 3.0 \(native\)/4520 behaves like Debian repository GET request4521 returns success and expected body4522 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /^Format: 3.0 \(native\)/4523 behaves like Debian repository GET request4524 returns success and expected body4525 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4526 behaves like Debian repository GET request4527 returns unauthorized4528 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4529 behaves like Debian repository GET request4530 returns unauthorized4531 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /^Format: 3.0 \(native\)/4532 behaves like Debian repository GET request4533 returns success and expected body4534 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^Format: 3.0 \(native\)/4535 behaves like Debian repository GET request4536 returns success and expected body4537 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4538 behaves like Debian repository GET request4539 returns forbidden4540 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4541 behaves like Debian repository GET request4542 returns unauthorized4543 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4544 behaves like Debian repository GET request4545 returns unauthorized4546 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4547 behaves like Debian repository GET request4548 returns not_found4549 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4550 behaves like Debian repository GET request4551 returns not_found4552 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4553 behaves like Debian repository GET request4554 returns unauthorized4555 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4556 behaves like Debian repository GET request4557 returns unauthorized4558 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4559 behaves like Debian repository GET request4560 returns unauthorized4561 behaves like rejects Debian access with unknown container id4562 with an unknown container4563 as anonymous4564 behaves like Debian repository GET request4565 returns unauthorized4566 as authenticated user4567 behaves like Debian repository GET request4568 returns not_found4569 file_name: "libsample0_1.2.3~alpha2_amd64.deb", success_body: /^!<arch>/4570 behaves like Debian repository read endpoint4571 with valid container4572 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^!<arch>/4573 behaves like Debian repository GET request4574 returns success and expected body4575 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /^!<arch>/4576 behaves like Debian repository GET request4577 returns success and expected body4578 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4579 behaves like Debian repository GET request4580 returns unauthorized4581 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4582 behaves like Debian repository GET request4583 returns unauthorized4584 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /^!<arch>/4585 behaves like Debian repository GET request4586 returns success and expected body4587 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /^!<arch>/4588 behaves like Debian repository GET request4589 returns success and expected body4590 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4591 behaves like Debian repository GET request4592 returns unauthorized4593 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4594 behaves like Debian repository GET request4595 returns unauthorized4596 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /^!<arch>/4597 behaves like Debian repository GET request4598 returns success and expected body4599 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^!<arch>/4600 behaves like Debian repository GET request4601 returns success and expected body4602 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4603 behaves like Debian repository GET request4604 returns forbidden4605 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4606 behaves like Debian repository GET request4607 returns unauthorized4608 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4609 behaves like Debian repository GET request4610 returns unauthorized4611 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4612 behaves like Debian repository GET request4613 returns not_found4614 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4615 behaves like Debian repository GET request4616 returns not_found4617 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4618 behaves like Debian repository GET request4619 returns unauthorized4620 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4621 behaves like Debian repository GET request4622 returns unauthorized4623 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4624 behaves like Debian repository GET request4625 returns unauthorized4626 behaves like rejects Debian access with unknown container id4627 with an unknown container4628 as anonymous4629 behaves like Debian repository GET request4630 returns unauthorized4631 as authenticated user4632 behaves like Debian repository GET request4633 returns not_found4634 file_name: "sample-udeb_1.2.3~alpha2_amd64.udeb", success_body: /^!<arch>/4635 behaves like Debian repository read endpoint4636 with valid container4637 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^!<arch>/4638 behaves like Debian repository GET request4639 returns success and expected body4640 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /^!<arch>/4641 behaves like Debian repository GET request4642 returns success and expected body4643 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4644 behaves like Debian repository GET request4645 returns unauthorized4646 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4647 behaves like Debian repository GET request4648 returns unauthorized4649 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /^!<arch>/4650 behaves like Debian repository GET request4651 returns success and expected body4652 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /^!<arch>/4653 behaves like Debian repository GET request4654 returns success and expected body4655 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4656 behaves like Debian repository GET request4657 returns unauthorized4658 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4659 behaves like Debian repository GET request4660 returns unauthorized4661 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /^!<arch>/4662 behaves like Debian repository GET request4663 returns success and expected body4664 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /^!<arch>/4665 behaves like Debian repository GET request4666 returns success and expected body4667 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4668 behaves like Debian repository GET request4669 returns forbidden4670 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4671 behaves like Debian repository GET request4672 returns unauthorized4673 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4674 behaves like Debian repository GET request4675 returns unauthorized4676 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4677 behaves like Debian repository GET request4678 returns not_found4679 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4680 behaves like Debian repository GET request4681 returns not_found4682 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4683 behaves like Debian repository GET request4684 returns unauthorized4685 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4686 behaves like Debian repository GET request4687 returns unauthorized4688 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4689 behaves like Debian repository GET request4690 returns unauthorized4691 behaves like rejects Debian access with unknown container id4692 with an unknown container4693 as anonymous4694 behaves like Debian repository GET request4695 returns unauthorized4696 as authenticated user4697 behaves like Debian repository GET request4698 returns not_found4699 file_name: "sample_1.2.3~alpha2_amd64.buildinfo", success_body: /Build-Tainted-By/4700 behaves like Debian repository read endpoint4701 with valid container4702 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /Build-Tainted-By/4703 behaves like Debian repository GET request4704 returns success and expected body4705 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /Build-Tainted-By/4706 behaves like Debian repository GET request4707 returns success and expected body4708 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4709 behaves like Debian repository GET request4710 returns unauthorized4711 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4712 behaves like Debian repository GET request4713 returns unauthorized4714 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /Build-Tainted-By/4715 behaves like Debian repository GET request4716 returns success and expected body4717 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /Build-Tainted-By/4718 behaves like Debian repository GET request4719 returns success and expected body4720 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4721 behaves like Debian repository GET request4722 returns unauthorized4723 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4724 behaves like Debian repository GET request4725 returns unauthorized4726 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /Build-Tainted-By/4727 behaves like Debian repository GET request4728 returns success and expected body4729 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /Build-Tainted-By/4730 behaves like Debian repository GET request4731 returns success and expected body4732 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4733 behaves like Debian repository GET request4734 returns forbidden4735 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4736 behaves like Debian repository GET request4737 returns unauthorized4738 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4739 behaves like Debian repository GET request4740 returns unauthorized4741 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4742 behaves like Debian repository GET request4743 returns not_found4744 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4745 behaves like Debian repository GET request4746 returns not_found4747 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4748 behaves like Debian repository GET request4749 returns unauthorized4750 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4751 behaves like Debian repository GET request4752 returns unauthorized4753 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4754 behaves like Debian repository GET request4755 returns unauthorized4756 behaves like rejects Debian access with unknown container id4757 with an unknown container4758 as anonymous4759 behaves like Debian repository GET request4760 returns unauthorized4761 as authenticated user4762 behaves like Debian repository GET request4763 returns not_found4764 file_name: "sample_1.2.3~alpha2_amd64.changes", success_body: /urgency=medium/4765 behaves like Debian repository read endpoint4766 with valid container4767 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /urgency=medium/4768 behaves like Debian repository GET request4769 returns success and expected body4770 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :success, expected_body: /urgency=medium/4771 behaves like Debian repository GET request4772 returns success and expected body4773 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4774 behaves like Debian repository GET request4775 returns unauthorized4776 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4777 behaves like Debian repository GET request4778 returns unauthorized4779 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :success, expected_body: /urgency=medium/4780 behaves like Debian repository GET request4781 returns success and expected body4782 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :success, expected_body: /urgency=medium/4783 behaves like Debian repository GET request4784 returns success and expected body4785 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4786 behaves like Debian repository GET request4787 returns unauthorized4788 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4789 behaves like Debian repository GET request4790 returns unauthorized4791 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :success, expected_body: /urgency=medium/4792 behaves like Debian repository GET request4793 returns success and expected body4794 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :success, expected_body: /urgency=medium/4795 behaves like Debian repository GET request4796 returns success and expected body4797 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4798 behaves like Debian repository GET request4799 returns forbidden4800 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4801 behaves like Debian repository GET request4802 returns unauthorized4803 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4804 behaves like Debian repository GET request4805 returns unauthorized4806 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4807 behaves like Debian repository GET request4808 returns not_found4809 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4810 behaves like Debian repository GET request4811 returns not_found4812 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4813 behaves like Debian repository GET request4814 returns unauthorized4815 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4816 behaves like Debian repository GET request4817 returns unauthorized4818 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4819 behaves like Debian repository GET request4820 returns unauthorized4821 behaves like rejects Debian access with unknown container id4822 with an unknown container4823 as anonymous4824 behaves like Debian repository GET request4825 returns unauthorized4826 as authenticated user4827 behaves like Debian repository GET request4828 returns not_found4829 PUT projects/:id/packages/debian/:file_name4830 with a deb4831 behaves like Debian repository write endpoint4832 with valid container4833 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :created, expected_body: nil4834 behaves like Debian repository upload request4835 creates package files4836 behaves like a package tracking event4837 creates a gitlab tracking event push_package4838 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4839 behaves like Debian repository upload request4840 returns forbidden4841 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4842 behaves like Debian repository upload request4843 returns unauthorized4844 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4845 behaves like Debian repository upload request4846 returns unauthorized4847 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :forbidden, expected_body: nil4848 behaves like Debian repository upload request4849 returns forbidden4850 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :forbidden, expected_body: nil4851 behaves like Debian repository upload request4852 returns forbidden4853 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4854 behaves like Debian repository upload request4855 returns unauthorized4856 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4857 behaves like Debian repository upload request4858 returns unauthorized4859 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4860 behaves like Debian repository upload request4861 returns unauthorized4862 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :created, expected_body: nil4863 behaves like Debian repository upload request4864 creates package files4865 behaves like a package tracking event4866 creates a gitlab tracking event push_package4867 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4868 behaves like Debian repository upload request4869 returns forbidden4870 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4871 behaves like Debian repository upload request4872 returns unauthorized4873 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4874 behaves like Debian repository upload request4875 returns unauthorized4876 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4877 behaves like Debian repository upload request4878 returns not_found4879 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4880 behaves like Debian repository upload request4881 returns not_found4882 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4883 behaves like Debian repository upload request4884 returns unauthorized4885 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4886 behaves like Debian repository upload request4887 returns unauthorized4888 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4889 behaves like Debian repository upload request4890 returns unauthorized4891 behaves like rejects Debian access with unknown container id4892 with an unknown container4893 as anonymous4894 behaves like Debian repository GET request4895 returns unauthorized4896 as authenticated user4897 behaves like Debian repository GET request4898 returns not_found4899 with a changes file4900 behaves like Debian repository write endpoint4901 with valid container4902 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :created, expected_body: nil4903 behaves like Debian repository upload request4904 creates package files4905 behaves like a package tracking event4906 creates a gitlab tracking event push_package4907 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4908 behaves like Debian repository upload request4909 returns forbidden4910 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4911 behaves like Debian repository upload request4912 returns unauthorized4913 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4914 behaves like Debian repository upload request4915 returns unauthorized4916 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :forbidden, expected_body: nil4917 behaves like Debian repository upload request4918 returns forbidden4919 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :forbidden, expected_body: nil4920 behaves like Debian repository upload request4921 returns forbidden4922 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4923 behaves like Debian repository upload request4924 returns unauthorized4925 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4926 behaves like Debian repository upload request4927 returns unauthorized4928 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4929 behaves like Debian repository upload request4930 returns unauthorized4931 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :created, expected_body: nil4932 behaves like Debian repository upload request4933 creates package files4934 behaves like a package tracking event4935 creates a gitlab tracking event push_package4936 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4937 behaves like Debian repository upload request4938 returns forbidden4939 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4940 behaves like Debian repository upload request4941 returns unauthorized4942 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4943 behaves like Debian repository upload request4944 returns unauthorized4945 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil4946 behaves like Debian repository upload request4947 returns not_found4948 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil4949 behaves like Debian repository upload request4950 returns not_found4951 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4952 behaves like Debian repository upload request4953 returns unauthorized4954 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4955 behaves like Debian repository upload request4956 returns unauthorized4957 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil4958 behaves like Debian repository upload request4959 returns unauthorized4960 behaves like rejects Debian access with unknown container id4961 with an unknown container4962 as anonymous4963 behaves like Debian repository GET request4964 returns unauthorized4965 as authenticated user4966 behaves like Debian repository GET request4967 returns not_found4968 PUT projects/:id/packages/debian/:file_name/authorize4969 behaves like Debian repository write endpoint4970 with valid container4971 visibility_level: :public, user_role: :developer, member: true, user_token: true, expected_status: :created, expected_body: nil4972 behaves like Debian repository upload authorize request4973 authorizes package file upload4974 without a valid token4975 rejects request4976 bypassing gitlab-workhorse4977 rejects request4978 visibility_level: :public, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil4979 behaves like Debian repository upload authorize request4980 returns forbidden4981 visibility_level: :public, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4982 behaves like Debian repository upload authorize request4983 returns unauthorized4984 visibility_level: :public, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil4985 behaves like Debian repository upload authorize request4986 returns unauthorized4987 visibility_level: :public, user_role: :developer, member: false, user_token: true, expected_status: :forbidden, expected_body: nil4988 behaves like Debian repository upload authorize request4989 returns forbidden4990 visibility_level: :public, user_role: :guest, member: false, user_token: true, expected_status: :forbidden, expected_body: nil4991 behaves like Debian repository upload authorize request4992 returns forbidden4993 visibility_level: :public, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4994 behaves like Debian repository upload authorize request4995 returns unauthorized4996 visibility_level: :public, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil4997 behaves like Debian repository upload authorize request4998 returns unauthorized4999 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil5000 behaves like Debian repository upload authorize request5001 returns unauthorized5002 visibility_level: :private, user_role: :developer, member: true, user_token: true, expected_status: :created, expected_body: nil5003 behaves like Debian repository upload authorize request5004 authorizes package file upload5005 without a valid token5006 rejects request5007 bypassing gitlab-workhorse5008 rejects request5009 visibility_level: :private, user_role: :guest, member: true, user_token: true, expected_status: :forbidden, expected_body: nil5010 behaves like Debian repository upload authorize request5011 returns forbidden5012 visibility_level: :private, user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil5013 behaves like Debian repository upload authorize request5014 returns unauthorized5015 visibility_level: :private, user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, expected_body: nil5016 behaves like Debian repository upload authorize request5017 returns unauthorized5018 visibility_level: :private, user_role: :developer, member: false, user_token: true, expected_status: :not_found, expected_body: nil5019 behaves like Debian repository upload authorize request5020 returns not_found5021 visibility_level: :private, user_role: :guest, member: false, user_token: true, expected_status: :not_found, expected_body: nil5022 behaves like Debian repository upload authorize request5023 returns not_found5024 visibility_level: :private, user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil5025 behaves like Debian repository upload authorize request5026 returns unauthorized5027 visibility_level: :private, user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, expected_body: nil5028 behaves like Debian repository upload authorize request5029 returns unauthorized5030 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized, expected_body: nil5031 behaves like Debian repository upload authorize request5032 returns unauthorized5033 behaves like rejects Debian access with unknown container id5034 with an unknown container5035 as anonymous5036 behaves like Debian repository GET request5037 returns unauthorized5038 as authenticated user5039 behaves like Debian repository GET request5040 returns not_found5041API::ProjectSnippets5042 GET /projects/:project_id/snippets/:id/user_agent_detail5043 exposes known attributes5044 respects project scoping5045 returns unauthorized for non-admin users5046 with snippets disabled5047 behaves like 403 response5048 returns 4035049 GET /projects/:project_id/snippets/5050 returns all snippets available to team member5051 hides private snippets from regular user5052 with snippets disabled5053 behaves like 403 response5054 returns 4035055 GET /projects/:project_id/snippets/:id5056 returns snippet json5057 returns 404 for invalid snippet id5058 with snippets disabled5059 behaves like 403 response5060 returns 4035061 behaves like project snippet access levels5062 behaves like unauthenticated project snippet access5063 project_visibility: :public, snippet_visibility: :public, status: :ok5064 behaves like expected response status5065 returns the correct response5066 project_visibility: :public, snippet_visibility: :private, status: :not_found5067 behaves like expected response status5068 returns the correct response5069 project_visibility: :public, snippet_visibility: :internal, status: :not_found5070 behaves like expected response status5071 returns the correct response5072 project_visibility: :internal, snippet_visibility: :public, status: :not_found5073 behaves like expected response status5074 returns the correct response5075 project_visibility: :private, snippet_visibility: :public, status: :not_found5076 behaves like expected response status5077 returns the correct response5078 behaves like non-member project snippet access5079 project_visibility: :public, snippet_visibility: :public, status: :ok5080 behaves like expected response status5081 returns the correct response5082 project_visibility: :public, snippet_visibility: :internal, status: :ok5083 behaves like expected response status5084 returns the correct response5085 project_visibility: :internal, snippet_visibility: :public, status: :ok5086 behaves like expected response status5087 returns the correct response5088 project_visibility: :public, snippet_visibility: :private, status: :not_found5089 behaves like expected response status5090 returns the correct response5091 project_visibility: :private, snippet_visibility: :public, status: :not_found5092 behaves like expected response status5093 returns the correct response5094 behaves like member project snippet access5095 project_visibility: :public, snippet_visibility: :public, status: :ok5096 behaves like expected response status5097 returns the correct response5098 project_visibility: :public, snippet_visibility: :internal, status: :ok5099 behaves like expected response status5100 returns the correct response5101 project_visibility: :internal, snippet_visibility: :public, status: :ok5102 behaves like expected response status5103 returns the correct response5104 project_visibility: :public, snippet_visibility: :private, status: :ok5105 behaves like expected response status5106 returns the correct response5107 project_visibility: :private, snippet_visibility: :public, status: :ok5108 behaves like expected response status5109 returns the correct response5110 POST /projects/:project_id/snippets/5111 with an external user5112 that belongs to the project5113 creates a new snippet5114 that does not belong to the project5115 does not create a new snippet5116 with a regular user5117 creates a new snippet5118 behaves like project snippet repository actions5119 commit the files to the repository5120 with an admin5121 creates a new snippet5122 returns 400 for missing parameters5123 returns 400 if title is blank5124 behaves like project snippet repository actions5125 commit the files to the repository5126 behaves like snippet creation with files parameter5127 returns 400 if both files and content are provided5128 returns 400 when neither files or content are provided5129 path: ".gitattributes", content: "file content", status: :created, error: nil5130 responds correctly5131 path: "valid/path/file.rb", content: "file content", status: :created, error: nil5132 responds correctly5133 path: ".gitattributes", content: nil, status: :bad_request, error: "files[0][content] is empty"5134 responds correctly5135 path: ".gitattributes", content: "", status: :bad_request, error: "files[0][content] is empty"5136 responds correctly5137 path: "", content: "file content", status: :bad_request, error: "files[0][file_path] is empty"5138 responds correctly5139 path: nil, content: "file content", status: :bad_request, error: "files[0][file_path] should be a valid file path, files[0][file_path] is empty"5140 responds correctly5141 path: "../../etc/passwd", content: "file content", status: :bad_request, error: "files[0][file_path] should be a valid file path"5142 responds correctly5143 behaves like snippet creation without files parameter5144 allows file_name and content parameters5145 returns 400 if file_name and content are not both provided5146 returns 400 if content is blank5147 when save fails because the repository could not be created5148 returns 4005149 when the snippet is spam5150 when the snippet is private5151 creates the snippet5152 when the snippet is public5153 rejects the snippet5154 creates a spam log5155 with snippets disabled5156 behaves like 403 response5157 returns 4035158 PUT /projects/:project_id/snippets/:id/5159 behaves like snippet file updates5160 with various snippet file changes5161 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}], status: :success5162 has the correct response5163 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"update", :file_path=>"CHANGELOG", :content=>"bar"}], status: :success5164 has the correct response5165 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"move", :file_path=>".old-gitattributes", :previous_path=>".gitattributes"}], status: :success5166 has the correct response5167 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"delete", :file_path=>"CONTRIBUTING.md"}], status: :success5168 has the correct response5169 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}, {:action=>"update", :file_path=>"CHANGELOG", :content=>"bar"}], status: :success5170 has the correct response5171 is_multi_file: true, file_name: "foo.txt", content: "bar", files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}], status: :bad_request5172 has the correct response5173 is_multi_file: true, file_name: "foo.txt", content: "bar", files: nil, status: :bad_request5174 has the correct response5175 is_multi_file: true, file_name: nil, content: nil, files: nil, status: :bad_request5176 has the correct response5177 is_multi_file: true, file_name: "foo.txt", content: nil, files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}], status: :bad_request5178 has the correct response5179 is_multi_file: true, file_name: nil, content: "bar", files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}], status: :bad_request5180 has the correct response5181 is_multi_file: true, file_name: "", content: nil, files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}], status: :bad_request5182 has the correct response5183 is_multi_file: true, file_name: nil, content: "", files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}], status: :bad_request5184 has the correct response5185 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"create", :file_path=>"../../etc/passwd", :content=>"bar"}], status: :bad_request5186 has the correct response5187 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"create", :previous_path=>"../../etc/passwd", :file_path=>"CHANGELOG", :content=>"bar"}], status: :bad_request5188 has the correct response5189 is_multi_file: true, file_name: nil, content: nil, files: [{:action=>"move", :file_path=>"missing_previous_path.txt"}], status: :unprocessable_entity5190 has the correct response5191 is_multi_file: false, file_name: "foo.txt", content: "bar", files: nil, status: :success5192 has the correct response5193 is_multi_file: false, file_name: "foo.txt", content: nil, files: nil, status: :success5194 has the correct response5195 is_multi_file: false, file_name: nil, content: "bar", files: nil, status: :success5196 has the correct response5197 is_multi_file: false, file_name: "foo.txt", content: "bar", files: [{:action=>"create", :file_path=>"foo.txt", :content=>"bar"}], status: :bad_request5198 has the correct response5199 is_multi_file: false, file_name: nil, content: nil, files: nil, status: :bad_request5200 has the correct response5201 is_multi_file: false, file_name: nil, content: "", files: nil, status: :bad_request5202 has the correct response5203 is_multi_file: false, file_name: nil, content: nil, files: [{:action=>"create", :file_path=>"../../etc/passwd", :content=>"bar"}], status: :bad_request5204 has the correct response5205 is_multi_file: false, file_name: nil, content: nil, files: [{:action=>"create", :previous_path=>"../../etc/passwd", :file_path=>"CHANGELOG", :content=>"bar"}], status: :bad_request5206 has the correct response5207 when save fails due to a repository commit error5208 returns a bad request response5209 behaves like snippet non-file updates5210 updates a snippet non-file attributes5211 behaves like snippet individual non-file updates5212 attribute: :description, updated_value: "new description"5213 updates the attribute5214 attribute: :title, updated_value: "new title"5215 updates the attribute5216 attribute: :visibility, updated_value: "private"5217 updates the attribute5218 behaves like invalid snippet updates5219 returns 404 for invalid snippet id5220 returns 400 for missing parameters5221 returns 400 if content is blank5222 returns 400 if title is blank5223 behaves like update with repository actions5224 when the repository exists5225 commits the changes to the repository5226 when the repository does not exist5227 when update attributes does not include file_name or content5228 does not create the repository5229 when update attributes include file_name or content5230 creates the repository5231 commits the file to the repository5232 when save fails due to a repository creation error5233 returns 4005234 does not save the changes to the snippet object5235 when the snippet is spam5236 when the snippet is private5237 creates the snippet5238 when the snippet is public5239 rejects the snippet5240 creates a spam log5241 when the private snippet is made public5242 rejects the snippet5243 creates a spam log5244 with snippets disabled5245 behaves like 403 response5246 returns 4035247 DELETE /projects/:project_id/snippets/:id/5248 deletes snippet5249 returns 404 for invalid snippet id5250 behaves like 412 response5251 for a modified ressource5252 returns 412 with a JSON error5253 for an unmodified ressource5254 returns 204 with an empty body5255 with snippets disabled5256 behaves like 403 response5257 returns 4035258 GET /projects/:project_id/snippets/:id/raw5259 returns raw text5260 returns 404 for invalid snippet id5261 behaves like project snippet access levels5262 behaves like unauthenticated project snippet access5263 project_visibility: :public, snippet_visibility: :public, status: :ok5264 behaves like expected response status5265 returns the correct response5266 project_visibility: :public, snippet_visibility: :private, status: :not_found5267 behaves like expected response status5268 returns the correct response5269 project_visibility: :public, snippet_visibility: :internal, status: :not_found5270 behaves like expected response status5271 returns the correct response5272 project_visibility: :internal, snippet_visibility: :public, status: :not_found5273 behaves like expected response status5274 returns the correct response5275 project_visibility: :private, snippet_visibility: :public, status: :not_found5276 behaves like expected response status5277 returns the correct response5278 behaves like non-member project snippet access5279 project_visibility: :public, snippet_visibility: :public, status: :ok5280 behaves like expected response status5281 returns the correct response5282 project_visibility: :public, snippet_visibility: :internal, status: :ok5283 behaves like expected response status5284 returns the correct response5285 project_visibility: :internal, snippet_visibility: :public, status: :ok5286 behaves like expected response status5287 returns the correct response5288 project_visibility: :public, snippet_visibility: :private, status: :not_found5289 behaves like expected response status5290 returns the correct response5291 project_visibility: :private, snippet_visibility: :public, status: :not_found5292 behaves like expected response status5293 returns the correct response5294 behaves like member project snippet access5295 project_visibility: :public, snippet_visibility: :public, status: :ok5296 behaves like expected response status5297 returns the correct response5298 project_visibility: :public, snippet_visibility: :internal, status: :ok5299 behaves like expected response status5300 returns the correct response5301 project_visibility: :internal, snippet_visibility: :public, status: :ok5302 behaves like expected response status5303 returns the correct response5304 project_visibility: :public, snippet_visibility: :private, status: :ok5305 behaves like expected response status5306 returns the correct response5307 project_visibility: :private, snippet_visibility: :public, status: :ok5308 behaves like expected response status5309 returns the correct response5310 with snippets disabled5311 behaves like 403 response5312 returns 4035313 behaves like snippet blob content5314 returns content from repository5315 when snippet repository is empty5316 returns content from database5317 GET /projects/:project_id/snippets/:id/files/:ref/:file_path/raw5318 behaves like raw snippet files5319 with an invalid snippet ID5320 returns 4045321 with valid params5322 returns the raw file info5323 with unauthorized user5324 returns 4045325 with invalid params5326 file_path: "%2Egitattributes", ref: "invalid-ref", status: :not_found, key: "message", message: "404 Reference Not Found"5327 returns the proper response code and message5328 file_path: "%2Egitattributes", ref: nil, status: :not_found, key: "error", message: "404 Not Found"5329 returns the proper response code and message5330 file_path: "%2Egitattributes", ref: "", status: :not_found, key: "error", message: "404 Not Found"5331 returns the proper response code and message5332 file_path: "doesnotexist.rb", ref: "master", status: :not_found, key: "message", message: "404 File Not Found"5333 returns the proper response code and message5334 file_path: "/does/not/exist.rb", ref: "master", status: :not_found, key: "error", message: "404 Not Found"5335 returns the proper response code and message5336 file_path: "%2E%2E%2Fetc%2Fpasswd", ref: "master", status: :bad_request, key: "error", message: "file_path should be a valid file path"5337 returns the proper response code and message5338 file_path: "%2Fetc%2Fpasswd", ref: "master", status: :bad_request, key: "error", message: "file_path should be a valid file path"5339 returns the proper response code and message5340 file_path: "../../etc/passwd", ref: "master", status: :not_found, key: "error", message: "404 Not Found"5341 returns the proper response code and message5342 behaves like project snippet access levels5343 behaves like unauthenticated project snippet access5344 project_visibility: :public, snippet_visibility: :public, status: :ok5345 behaves like expected response status5346 returns the correct response5347 project_visibility: :public, snippet_visibility: :private, status: :not_found5348 behaves like expected response status5349 returns the correct response5350 project_visibility: :public, snippet_visibility: :internal, status: :not_found5351 behaves like expected response status5352 returns the correct response5353 project_visibility: :internal, snippet_visibility: :public, status: :not_found5354 behaves like expected response status5355 returns the correct response5356 project_visibility: :private, snippet_visibility: :public, status: :not_found5357 behaves like expected response status5358 returns the correct response5359 behaves like non-member project snippet access5360 project_visibility: :public, snippet_visibility: :public, status: :ok5361 behaves like expected response status5362 returns the correct response5363 project_visibility: :public, snippet_visibility: :internal, status: :ok5364 behaves like expected response status5365 returns the correct response5366 project_visibility: :internal, snippet_visibility: :public, status: :ok5367 behaves like expected response status5368 returns the correct response5369 project_visibility: :public, snippet_visibility: :private, status: :not_found5370 behaves like expected response status5371 returns the correct response5372 project_visibility: :private, snippet_visibility: :public, status: :not_found5373 behaves like expected response status5374 returns the correct response5375 behaves like member project snippet access5376 project_visibility: :public, snippet_visibility: :public, status: :ok5377 behaves like expected response status5378 returns the correct response5379 project_visibility: :public, snippet_visibility: :internal, status: :ok5380 behaves like expected response status5381 returns the correct response5382 project_visibility: :internal, snippet_visibility: :public, status: :ok5383 behaves like expected response status5384 returns the correct response5385 project_visibility: :public, snippet_visibility: :private, status: :ok5386 behaves like expected response status5387 returns the correct response5388 project_visibility: :private, snippet_visibility: :public, status: :ok5389 behaves like expected response status5390 returns the correct response5391API::GroupPackages5392 GET /groups/:id/packages5393 with sorting5394 without sorting params5395 sorts by created_at asc5396 behaves like package sorting5397 sorting by name5398 ascending order5399 returns the sorted packages5400 descending order5401 returns the sorted packages5402 behaves like package sorting5403 sorting by created_at5404 ascending order5405 returns the sorted packages5406 descending order5407 returns the sorted packages5408 behaves like package sorting5409 sorting by version5410 ascending order5411 returns the sorted packages5412 descending order5413 returns the sorted packages5414 behaves like package sorting5415 sorting by type5416 ascending order5417 returns the sorted packages5418 descending order5419 returns the sorted packages5420 behaves like package sorting5421 sorting by project_path5422 ascending order5423 returns the sorted packages5424 descending order5425 returns the sorted packages5426 with private group5427 with unauthenticated user5428 behaves like rejects packages access5429 for no_type5430 behaves like returning response status5431 returns not_found5432 with authenticated user5433 behaves like returns packages5434 for owner5435 returns success response5436 returns a valid response schema5437 returns two packages5438 behaves like returns packages5439 for maintainer5440 returns success response5441 returns a valid response schema5442 returns two packages5443 behaves like returns packages5444 for developer5445 returns success response5446 returns a valid response schema5447 returns two packages5448 behaves like returns packages5449 for reporter5450 returns success response5451 returns a valid response schema5452 returns two packages5453 behaves like rejects packages access5454 for guest5455 behaves like returning response status5456 returns forbidden5457 with subgroup5458 behaves like returns packages with subgroups5459 with subgroups for owner5460 returns success response5461 returns a valid response schema5462 returns three packages5463 behaves like returns packages with subgroups5464 with subgroups for maintainer5465 returns success response5466 returns a valid response schema5467 returns three packages5468 behaves like returns packages with subgroups5469 with subgroups for developer5470 returns success response5471 returns a valid response schema5472 returns three packages5473 behaves like returns packages with subgroups5474 with subgroups for reporter5475 returns success response5476 returns a valid response schema5477 returns three packages5478 behaves like rejects packages access5479 for guest5480 behaves like returning response status5481 returns forbidden5482 excluding subgroup5483 behaves like returns packages5484 for owner5485 returns success response5486 returns a valid response schema5487 returns two packages5488 behaves like returns packages5489 for maintainer5490 returns success response5491 returns a valid response schema5492 returns two packages5493 behaves like returns packages5494 for developer5495 returns success response5496 returns a valid response schema5497 returns two packages5498 behaves like returns packages5499 for reporter5500 returns success response5501 returns a valid response schema5502 returns two packages5503 behaves like rejects packages access5504 for guest5505 behaves like returning response status5506 returns forbidden5507 with public group5508 with unauthenticated user5509 behaves like returns packages5510 for no_type5511 returns success response5512 returns a valid response schema5513 returns two packages5514 with authenticated user5515 behaves like returns packages5516 for owner5517 returns success response5518 returns a valid response schema5519 returns two packages5520 behaves like returns packages5521 for maintainer5522 returns success response5523 returns a valid response schema5524 returns two packages5525 behaves like returns packages5526 for developer5527 returns success response5528 returns a valid response schema5529 returns two packages5530 behaves like returns packages5531 for reporter5532 returns success response5533 returns a valid response schema5534 returns two packages5535 behaves like returns packages5536 for guest5537 returns success response5538 returns a valid response schema5539 returns two packages5540 with pagination params5541 behaves like returns paginated packages5542 when viewing the first page5543 returns first 2 packages5544 when viewing the second page5545 returns first 2 packages5546 behaves like filters on each package_type5547 for package type maven5548 returns maven packages5549 for package type npm5550 returns npm packages5551 for package type conan5552 returns conan packages5553 for package type nuget5554 returns nuget packages5555 for package type pypi5556 returns pypi packages5557 for package type composer5558 returns composer packages5559 for package type generic5560 returns generic packages5561 for package type golang5562 returns golang packages5563 for package type debian5564 returns debian packages5565 for package type rubygems5566 returns rubygems packages5567 for package type helm5568 returns helm packages5569 for package type terraform_module5570 returns terraform_module packages5571 does not accept non supported package_type value5572 behaves like returning response status5573 returns bad_request5574 behaves like with versionless packages5575 with versionless package5576 behaves like not including the package5577 does not return the package5578 with include_versionless param5579 with true include_versionless param5580 for param true5581 returns the package5582 for param true5583 returns the package5584 for param 15585 returns the package5586 for param 15587 returns the package5588 with falsy include_versionless param5589 for param false5590 behaves like not including the package5591 does not return the package5592 for param5593 behaves like not including the package5594 does not return the package5595 for param5596 behaves like not including the package5597 does not return the package5598 for param false5599 behaves like not including the package5600 does not return the package5601 for param 05602 behaves like not including the package5603 does not return the package5604 for param 05605 behaves like not including the package5606 does not return the package5607 behaves like with status param5608 hidden packages5609 no status param5610 behaves like not including the hidden package5611 does not return the package5612 with hidden status param5613 returns the package5614 bad status param5615 returns the package5616 behaves like does not cause n^2 queries5617 avoids N^2 database queries5618Groups::MilestonesController5619 behaves like milestone tabs5620 #issues5621 as html5622 redirects to milestone#show5623 as json5624 renders the issues tab template to a string5625 #merge_requests5626 as html5627 redirects to milestone#show5628 as json5629 renders the merge requests tab template to a string5630 #participants5631 as html5632 redirects to milestone#show5633 as json5634 renders the participants tab template to a string5635 #labels5636 as html5637 redirects to milestone#show5638 as json5639 renders the labels tab template to a string5640 #index5641 as HTML5642DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/_logo.svg (called from brand_header_logo at /builds/gitlab-org/gitlab/app/helpers/appearances_helper.rb:42)5643DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/_logo.svg (called from brand_header_logo at /builds/gitlab-org/gitlab/app/helpers/appearances_helper.rb:42)5644DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/_logo_type.svg (called from brand_header_logo_type at /builds/gitlab-org/gitlab/app/helpers/appearances_helper.rb:49)5645DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/_logo_type.svg (called from brand_header_logo_type at /builds/gitlab-org/gitlab/app/helpers/appearances_helper.rb:49)5646 shows group milestones page5647 searches legacy milestones by title when search_title is given5648 searches group milestones by title when search_title is given5649 when anonymous user5650 shows group milestones page5651 when issues and merge requests are disabled in public project5652 when anonymous user5653 behaves like milestone not accessible5654 does not return milestone5655 when non project or group member user5656 behaves like milestone not accessible5657 does not return milestone5658 when group member user5659 returns the milestone5660 when subgroup milestones are present5661 shows subgroup milestones that user has access to5662 when user has no access to subgroups5663 does not show subgroup milestones5664 as JSON5665 lists project and group milestones5666 with subgroup milestones5667 lists descendants group milestones5668 for a subgroup5669 includes ancestor group milestones5670 external authorization5671 behaves like disabled when using an external authorization service5672 works when the feature is not enabled5673 renders a 404 with a message when the feature is enabled5674 #show5675DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/icons/_icon_burndown_chart_splash.svg (called from block in custom_icon at /builds/gitlab-org/gitlab/app/helpers/icons_helper.rb:14)5676DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/icons/_issues.svg (called from block in custom_icon at /builds/gitlab-org/gitlab/app/helpers/icons_helper.rb:14)5677DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/icons/_issues.svg (called from block in custom_icon at /builds/gitlab-org/gitlab/app/helpers/icons_helper.rb:14)5678DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/icons/_mr_bold.svg (called from block in custom_icon at /builds/gitlab-org/gitlab/app/helpers/icons_helper.rb:14)5679DEPRECATION WARNING: Rendering actions with '.' in the name is deprecated: shared/icons/_mr_bold.svg (called from block in custom_icon at /builds/gitlab-org/gitlab/app/helpers/icons_helper.rb:14)5680 renders for a group milestone5681 #create5682 creates group milestone with Chinese title5683 #update5684 updates group milestone5685 #destroy5686 removes milestone5687 #ensure_canonical_path5688 for a GET request5689 when requesting the canonical path5690 non-show path5691 with exactly matching casing5692 does not redirect5693 with different casing5694 redirects to the correct casing5695 show path5696 with exactly matching casing5697 does not redirect5698 with different casing5699 redirects to the correct casing5700 when requesting a redirected path5701 redirects to the canonical path5702 with an AJAX request5703 redirects to the canonical path but does not set flash message5704 with JSON format5705 redirects to the canonical path but does not set flash message5706 when the old group path is a substring of the scheme or host5707 does not modify the requested host5708 when the old group path is substring of groups5709 does not modify the /groups part of the path5710 when the old group path is substring of groups plus the new path5711 does not modify the /groups part of the path5712 for a non-GET request5713 when requesting the canonical path with different casing5714 does not 4045715 does not redirect to the correct casing5716 when requesting a redirected path5717 returns not found5718API::Tags5719 GET /projects/:id/repository/tags5720 :api_caching_tags flag enabled5721 behaves like get repository tags5722 sorting5723 sorts by descending order by default5724 sorts by ascending order if specified5725 sorts by name in descending order when requested5726 sorts by name in ascending order when requested5727 searching5728 only returns searched tags5729 when unauthenticated and project is public5730 behaves like repository tags5731 returns the repository tags5732 when repository is disabled5733 behaves like 403 response5734 returns 4035735 when unauthenticated and project is private5736 behaves like 404 response5737 returns 4045738 when authenticated as a maintainer5739 behaves like repository tags5740 returns the repository tags5741 when repository is disabled5742 behaves like 403 response5743 returns 4035744 requesting with the escaped project full path5745 behaves like repository tags5746 returns the repository tags5747 when repository is disabled5748 behaves like 403 response5749 returns 4035750 when authenticated as a guest5751 behaves like 403 response5752 returns 4035753 with releases5754 returns an array of project tags with release info5755 cache expiry5756 is cached5757 when protected tag is changed5758 behaves like cache expired5759 isn't cached5760 when release is changed5761 behaves like cache expired5762 isn't cached5763 when project is changed5764 behaves like cache expired5765 isn't cached5766 :api_caching_tags flag disabled5767 behaves like get repository tags5768 sorting5769 sorts by descending order by default5770 sorts by ascending order if specified5771 sorts by name in descending order when requested5772 sorts by name in ascending order when requested5773 searching5774 only returns searched tags5775 when unauthenticated and project is public5776 behaves like repository tags5777 returns the repository tags5778 when repository is disabled5779 behaves like 403 response5780 returns 4035781 when unauthenticated and project is private5782 behaves like 404 response5783 returns 4045784 when authenticated as a maintainer5785 behaves like repository tags5786 returns the repository tags5787 when repository is disabled5788 behaves like 403 response5789 returns 4035790 requesting with the escaped project full path5791 behaves like repository tags5792 returns the repository tags5793 when repository is disabled5794 behaves like 403 response5795 returns 4035796 when authenticated as a guest5797 behaves like 403 response5798 returns 4035799 with releases5800 returns an array of project tags with release info5801 GET /projects/:id/repository/tags/:tag_name5802 when unauthenticated and project is public5803 behaves like repository tag5804 returns the repository branch5805 when tag does not exist5806 behaves like 404 response5807 returns 4045808 when repository is disabled5809 behaves like 403 response5810 returns 4035811 when unauthenticated and project is private5812 behaves like 404 response5813 returns 4045814 when authenticated as a maintainer5815 behaves like repository tag5816 returns the repository branch5817 when tag does not exist5818 behaves like 404 response5819 returns 4045820 when repository is disabled5821 behaves like 403 response5822 returns 4035823 requesting with the escaped project full path5824 behaves like repository tag5825 returns the repository branch5826 when tag does not exist5827 behaves like 404 response5828 returns 4045829 when repository is disabled5830 behaves like 403 response5831 returns 4035832 when authenticated as a guest5833 behaves like 403 response5834 returns 4035835 POST /projects/:id/repository/tags5836 when unauthenticated and project is private5837 behaves like 404 response5838 returns 4045839 when authenticated as a guest5840 behaves like 403 response5841 returns 4035842 when authenticated as a maintainer5843 returns 400 if tag name is invalid5844 returns 400 if tag already exists5845 returns 400 if ref name is invalid5846 when a protected branch doesn't already exist5847 behaves like repository new tag5848 creates a new tag5849 when repository is disabled5850 behaves like 403 response5851 returns 4035852 when tag contains a dot5853 behaves like repository new tag5854 creates a new tag5855 when repository is disabled5856 behaves like 403 response5857 returns 4035858 requesting with the escaped project full path5859 behaves like repository new tag5860 creates a new tag5861 when repository is disabled5862 behaves like 403 response5863 returns 4035864 when tag contains a dot5865 behaves like repository new tag5866 creates a new tag5867 when repository is disabled5868 behaves like 403 response5869 returns 4035870 annotated tag5871 creates a new annotated tag5872 DELETE /projects/:id/repository/tags/:tag_name5873 when authenticated as a maintainer5874 behaves like repository delete tag5875 deletes a tag5876 behaves like 412 response5877 for a modified ressource5878 returns 412 with a JSON error5879 for an unmodified ressource5880 returns 204 with an empty body5881 when tag does not exist5882 behaves like 404 response5883 returns 4045884 when repository is disabled5885 behaves like 403 response5886 returns 4035887 requesting with the escaped project full path5888 behaves like repository delete tag5889 deletes a tag5890 behaves like 412 response5891 for a modified ressource5892 returns 412 with a JSON error5893 for an unmodified ressource5894 returns 204 with an empty body5895 when tag does not exist5896 behaves like 404 response5897 returns 4045898 when repository is disabled5899 behaves like 403 response5900 returns 4035901ApplicationController5902 #check_password_expiration5903 redirects if the user is over their password expiry5904 does not redirect if the user is under their password expiry5905 does not redirect if the user is over their password expiry but they are an ldap user5906 does not redirect if the user is over their password expiry but password authentication is disabled for the web interface5907 #add_gon_variables5908 with html format5909 behaves like setting gon variables5910 sets gon variables5911 with json format5912 behaves like not setting gon variables5913 does not set gon variables5914 with atom format5915 behaves like not setting gon variables5916 does not set gon variables5917 session expiration5918 authenticated user5919 does not set the expire_after option5920 unauthenticated user5921 sets the expire_after option5922 response format5923 when format is handled5924 returns 200 response5925 when format is not handled5926 returns 404 response5927 #route_not_found5928 renders 404 if authenticated5929 renders 404 if client is a search engine crawler5930 redirects to login page if not authenticated5931 redirects if unauthenticated and request format is unknown5932 #set_page_title_header5933 URI encodes UTF-8 characters in the title5934 two-factor authentication5935 #check_two_factor_requirement5936 does not redirect if user has temporary oauth email5937 does not redirect if 2FA is not required5938 does not redirect if user is not logged in5939 does not redirect if user has 2FA enabled5940 does not redirect if 2FA setup can be skipped5941 redirects to 2FA setup otherwise5942 #two_factor_authentication_required?5943 returns false if no 2FA requirement is present5944 returns true if a 2FA requirement is set in the application settings5945 returns true if a 2FA requirement is set on the user5946 #two_factor_grace_period5947 returns the grace period from the application settings5948 with a 2FA requirement set on the user5949 returns the user grace period if lower than the application grace period5950 returns the application grace period if lower than the user grace period5951 #two_factor_grace_period_expired?5952 returns false if the user has not started their grace period yet5953 with grace period started5954 returns true if the grace period has expired5955 returns false if the grace period is still active5956 #two_factor_skippable5957 returns false if 2FA is not required5958 returns false if the user has already enabled 2FA5959 returns false if the 2FA grace period has expired5960 returns true otherwise5961 #skip_two_factor?5962 returns false if 2FA setup was not skipped5963 with 2FA setup skipped5964 returns false if the grace period has expired5965 returns true if the grace period is still active5966 deactivated user5967 signs out a deactivated user5968 terms5969 does not query more when terms are enforced5970 when terms are enforced5971 redirects if the user did not accept the terms5972 does not redirect when the user accepted terms5973 #append_info_to_payload5974 does not log errors with a 200 response5975 does log correlation id5976 adds context metadata to the payload5977 #access_denied5978 renders a 404 without a message5979 renders a 403 when a message is passed to access denied5980 renders a status passed to access denied5981 when invalid UTF-8 parameters are received5982 html5983 renders 4125984 js5985 renders 4125986 X-GitLab-Custom-Error header5987 given a 422 error page5988 sets a custom header5989 given a 500 error page5990 sets a custom header5991 given a 200 success page5992 does not set a custom header5993 given a json response5994 sets a custom header5995 for html request5996 sets a custom header5997 for 200 response5998 does not set a custom header5999 control headers6000 user not logged in6001 sets the default headers6002 user logged in6003 sets the default headers6004 does not set the "no-store" header for XHR requests6005 #stream_csv_headers6006 sets no-cache headers6007 sets stream headers6008 sets the csv specific headers6009 Gitlab::Session6010 is set on web requests6011 with sessionless user6012 is not set6013 #current_user_mode6014 with a regular user6015 admin mode is not set6016 with an admin user6017 admin mode is not set6018 that re-authenticated6019 admin mode is set6020 #required_signup_info6021 user with required role6022 is expected to redirect to "/users/sign_up/welcome"6023 user without a required role6024 is expected not to redirect to "/users/sign_up/welcome"6025 rescue_from Gitlab::Auth::IpBlacklisted6026 returns a 403 and logs the request6027 #set_current_context6028 does not break anything when no group or project method is defined6029 sets the username in the context when signed in6030 sets the group if it was available6031 sets the project if one was available6032 sets the caller_id as controller#action6033 sets the feature_category as defined in the controller6034 assigns the context to a variable for logging6035 assigns the context when the action caused an error6036 #current_user6037 when being impersonated6038 returns a User with impersonator6039 when not being impersonated6040 returns a User6041 locale6042 sets user's locale6043 setting permissions-policy header6044 with FloC enabled6045 does not set the Permissions-Policy header6046 with FloC disabled6047 sets the Permissions-Policy header6048AutocompleteController6049 GET users6050 project members6051 GET #users with project ID6052 returns the project members6053 GET #users with unknown project6054 is expected to respond with numeric status code not_found6055 group members6056 GET #users with group ID6057 returns the group members6058 GET #users with unknown group ID6059 is expected to respond with numeric status code not_found6060 non-member login for public project6061 GET #users with project ID6062 returns the project members and non-members6063 all users6064 is expected to be a kind of Array6065 is expected to eq 36066 user order6067 shows exact matches first6068 limited users per page6069 is expected to be a kind of Array6070 is expected to eq 206071 unauthenticated user6072 GET #users with public project6073 is expected to be a kind of Array6074 is expected to eq 26075 GET #users with project6076 is expected to respond with numeric status code not_found6077 GET #users with unknown project6078 is expected to respond with numeric status code not_found6079 GET #users with inaccessible group6080 is expected to respond with numeric status code not_found6081 GET #users with no project6082 is expected to be a kind of Array6083 is expected to be empty6084 GET #users with todo filter6085 gives an array of users6086 author of issuable included6087 authenticated6088 includes the author6089 rejects non existent user ids6090 without authenticating6091 returns empty result6092 skip_users parameter included6093 skips the user IDs passed6094 merge_request_iid parameter included6095 includes can_merge option to users6096 GET projects6097 authorized projects6098 GET #projects with project ID6099 returns projects6100 authorized projects and search6101 GET #projects with project ID and search6102 returns projects6103 authorized projects apply limit6104 GET #projects with project ID6105 returns projects6106 authorized projects without admin_issue ability6107 GET #projects with project ID6108 returns no projects6109 GET award_emojis6110 unauthorized user6111 returns empty json6112 sign in as user without award emoji6113 returns empty json6114 sign in as user with award emoji6115 returns json sorted by name count6116 GET deploy_keys_with_owners6117 unauthorized user6118 returns a not found response6119 when the user who can read the project is logged in6120 renders the deploy key in a json payload, with its owner6121 and they cannot read the project6122 returns a not found response6123 with an unknown project6124 returns a not found response6125 and the user cannot read the owner of the key6126 returns a payload without owner6127 Get merge_request_target_branches6128 anonymous user6129 returns empty json6130 user without any accessible merge requests6131 returns empty json6132 user with an accessible merge request but no scope6133 params: {}6134 returns an error6135 params: {:group_id=>" "}6136 returns an error6137 params: {:project_id=>" "}6138 returns an error6139 params: {:group_id=>" ", :project_id=>" "}6140 returns an error6141 user with an accessible merge request by project6142 returns json6143 user with an accessible merge request by group6144 returns json6145Groups::EmailCampaignsController6146 GET #index6147 track parameter6148 when valid6149 track: :create6150 behaves like track and redirect6151 redirects6152 on .com6153 emits a snowplow event6154 does not save the cta_click6155 when not on.com6156 saves the cta_click6157 does not track snowplow events6158 track: :team_short6159 behaves like track and redirect6160 redirects6161 on .com6162 emits a snowplow event6163 does not save the cta_click6164 when not on.com6165 saves the cta_click6166 does not track snowplow events6167 track: :trial_short6168 behaves like track and redirect6169 redirects6170 on .com6171 emits a snowplow event6172 does not save the cta_click6173 when not on.com6174 saves the cta_click6175 does not track snowplow events6176 track: :admin_verify6177 behaves like track and redirect6178 redirects6179 on .com6180 emits a snowplow event6181 does not save the cta_click6182 when not on.com6183 saves the cta_click6184 does not track snowplow events6185 track: :verify6186 behaves like track and redirect6187 redirects6188 on .com6189 emits a snowplow event6190 does not save the cta_click6191 when not on.com6192 saves the cta_click6193 does not track snowplow events6194 track: :trial6195 behaves like track and redirect6196 redirects6197 on .com6198 emits a snowplow event6199 does not save the cta_click6200 when not on.com6201 saves the cta_click6202 does not track snowplow events6203 track: :team6204 behaves like track and redirect6205 redirects6206 on .com6207 emits a snowplow event6208 does not save the cta_click6209 when not on.com6210 saves the cta_click6211 does not track snowplow events6212 when invalid6213 track: nil6214 behaves like no track and 4046215 returns 4046216 does not emit a snowplow event6217 track: "xxxx"6218 behaves like no track and 4046219 returns 4046220 does not emit a snowplow event6221 series parameter6222 when valid6223 series: 06224 behaves like track and redirect6225 redirects6226 on .com6227 emits a snowplow event6228 does not save the cta_click6229 when not on.com6230 saves the cta_click6231 does not track snowplow events6232 series: 16233 behaves like track and redirect6234 redirects6235 on .com6236 emits a snowplow event6237 does not save the cta_click6238 when not on.com6239 saves the cta_click6240 does not track snowplow events6241 series: 26242 behaves like track and redirect6243 redirects6244 on .com6245 emits a snowplow event6246 does not save the cta_click6247 when not on.com6248 saves the cta_click6249 does not track snowplow events6250 when invalid6251 series: -16252 behaves like no track and 4046253 returns 4046254 does not emit a snowplow event6255 series: nil6256 behaves like no track and 4046257 returns 4046258 does not emit a snowplow event6259 series: 36260 behaves like no track and 4046261 returns 4046262 does not emit a snowplow event6263Boards::ListsController6264 GET index6265 returns a successful 200 response6266 returns a list of board lists6267 when another user has list preferences6268 returns the complete list of board lists6269 with unauthorized user6270 returns a forbidden 403 response6271 POST create6272 with valid params6273 returns a successful 200 response6274 returns the created list6275 with invalid params6276 when label is nil6277 returns an unprocessable entity 422 response6278 when label that does not belongs to project6279 returns an unprocessable entity 422 response6280 with unauthorized user6281 returns a forbidden 403 response6282 PATCH update6283 with valid position6284 returns a successful 200 response6285 moves the list to the desired position6286 with invalid position6287 returns an unprocessable entity 422 response6288 with invalid list id6289 returns a not found 404 response6290 with unauthorized user6291 returns a 422 unprocessable entity response6292 with collapsed preference6293 saves collapsed preference for user6294 saves not collapsed preference for user6295 with a list_type other than :label6296 saves collapsed preference for user6297 saves not collapsed preference for user6298 DELETE destroy6299 with valid list id6300 returns a successful 200 response6301 removes list from board6302 with invalid list id6303 returns a not found 404 response6304 with unauthorized user6305 returns a forbidden 403 response6306 with an error service response6307 returns an unprocessable entity response6308 POST generate6309 when board lists is empty6310 returns a successful 200 response6311 returns the defaults lists6312 when board lists is not empty6313 returns an unprocessable entity 422 response6314 with unauthorized user6315 returns a forbidden 403 response6316Projects::BlobController6317 GET show6318 with file path6319 valid branch, valid file6320 is expected to respond with 2006321 valid branch, invalid file6322 redirects6323 invalid branch, valid file6324 is expected to respond with 4046325 renamed default branch, valid file6326 is expected to redirect to "/namespace853/project941/-/blob/master/README.md"6327 renamed default branch, invalid file6328 is expected to redirect to "/namespace854/project942/-/blob/master/invalid-path.rb"6329 binary file6330 is expected to respond with 2006331 Markdown file6332 is expected to respond with 2006333 with file path and JSON format6334 valid branch, valid file6335 is expected to have key "raw_path"6336 with viewer=none6337 is expected to have key "raw_path"6338 with tree path6339 redirect to tree6340 redirects6341 GET diff6342 when essential params are missing6343 renders nothing6344 when essential params are present6345 when rendering for commit6346 renders the diff content6347 when rendering for merge request6348 renders diff context lines Gitlab::Diff::Line array6349 handles full being true6350 GET edit6351 anonymous6352 redirects to sign in and returns6353 as guest6354 redirects to blob show6355 as developer6356 redirects to blob show6357 as maintainer6358 redirects to blob show6359 PUT update6360 redirects to blob6361 ?from_merge_request_iid6362 redirects to MR diff6363 when user doesn't have access6364 redirects to blob6365 when user has forked project6366 when editing on the fork6367 redirects to blob6368 when editing on the original repository6369 redirects to forked project new merge request6370 behaves like tracking unique hll events6371 tracks unique event6372 DELETE destroy6373 for a file in a subdirectory6374 redirects to the sub directory6375 when a validation failure occurs6376 redirects to a valid page6377 if deleted file is the last one in a subdirectory6378 redirects to the project root6379 when deleting a file in a branch other than master6380 redirects to the project root of the branch6381 POST preview6382 is successful6383 POST create6384 redirects to blob6385 behaves like tracking unique hll events6386 tracks unique event6387 when code_quality_walkthrough param is present6388 redirects to the pipelines page6389 creates an "commit_created" experiment tracking event6390SessionsController6391 #new6392 redirects correctly for referer on same host with params6393 when auto sign-in is enabled6394 and no auto_sign_in param is passed6395 redirects to :omniauth_authorize_path6396 and auto_sign_in=false param is passed6397 responds with 2006398 with LDAP enabled6399 ldap_servers available in helper6400 with sign_in disabled6401 no ldap_servers available in helper6402 #create6403 behaves like known sign in6404 when the remote IP and the last sign in IP match6405 does not notify the user6406 sets/updates the encrypted cookie6407 when the remote IP and the last sign in IP do not match6408 notifies the user when the cookie is expired6409 notifies the user when the cookie is for another user6410 does not notify the user when remote IP matches an active session6411 does not notify the user when the cookie is present and not expired6412 when the cookie is not previously set6413 notifies the user6414 sets the encrypted cookie6415 when notify_on_unknown_sign_in global setting is false6416 does not notify the user6417 does not set a cookie6418 when using standard authentications6419 invalid password6420 does not authenticate user6421 a blocked user6422 does not authenticate the user6423 a `blocked pending approval` user6424 does not authenticate the user6425 an internal user6426 does not authenticate the user6427 when using valid password6428 authenticates user correctly6429 creates an audit log record6430 creates an authentication event record6431 allows user authenticating from the same ip6432 blocks user authenticating from two distinct ips6433 updates the user activity6434 a deactivated user6435 is allowed to login6436 activates the user6437 shows reactivation flash message after logging in6438 with password authentication disabled6439 does not sign in the user6440 returns status 4036441 with reCAPTCHA6442 when reCAPTCHA is enabled6443 displays an error when the reCAPTCHA is not solved6444 successfully logs in a user when reCAPTCHA is solved6445 when reCAPTCHA login protection is enabled6446 when user tried to login 5 times6447 displays an error when the reCAPTCHA is not solved6448 successfully logs in a user when reCAPTCHA is solved6449 when there are more than 5 anonymous session with the same IP6450 displays an error when the reCAPTCHA is not solved6451 successfully logs in a user when reCAPTCHA is solved6452 when using two-factor authentication via OTP6453 creates an audit log record6454 creates an authentication event record6455 remember_me field6456 sets a remember_user_token cookie when enabled6457 does nothing when disabled6458 with password authentication disabled6459 allows 2FA stage of non-password login6460 when otp_user_id is stale6461 favors login over otp_user_id when password is present and does not authenticate the user6462 when authenticating with login and OTP of another user6463 when another user has 2FA enabled6464 when OTP is valid for another user6465 does not authenticate6466 when OTP is invalid for another user6467 does not authenticate6468 when authenticating with OTP6469 when OTP is valid6470 authenticates correctly6471 when OTP is invalid6472 does not authenticate6473 warns about invalid OTP code6474 when the user is on their last attempt6475 when OTP is valid6476 authenticates correctly6477 when OTP is invalid6478 does not authenticate6479 warns about invalid login6480 locks the user6481 keeps the user locked on future login attempts6482 when using two-factor authentication via U2F device6483 creates an audit log record6484 creates an authentication event record6485 remember_me field6486 sets a remember_user_token cookie when enabled6487 does nothing when disabled6488 when login fails6489 does increment failed login counts for session6490 #set_current_context6491 when signed in6492 sets the username and caller_id in the context6493 when not signed in6494 sets the caller_id in the context6495 when the user becomes locked6496 sets the caller_id in the context6497 #destroy6498 for a user whose password has expired6499 allows to sign out successfully6500merge requests discussions6501 GET /:namespace/:project/-/merge_requests/:iid/discussions6502 returns 2006503 avoids N+1 DB queries6504 limits Gitaly queries6505 caching6506 gets cached on subsequent requests6507 when a note in a discussion got updated6508 behaves like cache miss6509WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6510 does not hit a warm cache6511 when a note in a discussion got its reference state updated6512 behaves like cache miss6513WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6514 does not hit a warm cache6515 when a note in a discussion got resolved6516 behaves like cache miss6517WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6518 does not hit a warm cache6519 when a note is added to a discussion6520 behaves like cache miss6521WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6522 does not hit a warm cache6523 when a note is removed from a discussion6524 behaves like cache miss6525WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6526 does not hit a warm cache6527 when an emoji is awarded to a note in discussion6528 behaves like cache miss6529WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6530 does not hit a warm cache6531 when an award emoji is removed from a note in discussion6532 behaves like cache miss6533WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6534 does not hit a warm cache6535 when the diff note position changes6536 behaves like cache miss6537WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6538 does not hit a warm cache6539 when the HEAD diff note position changes6540 behaves like cache miss6541WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6542 does not hit a warm cache6543 when author detail changes6544 behaves like cache miss6545WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6546 does not hit a warm cache6547 when author status changes6548 behaves like cache miss6549WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6550 does not hit a warm cache6551 when merge_request_discussion_cache is disabled6552 behaves like cache miss6553WARNING: You're overriding a previous stub implementation of `represent`. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.. Called from /builds/gitlab-org/gitlab/spec/requests/projects/merge_requests_discussions_spec.rb:73:in `block (6 levels) in <top (required)>'.6554 does not hit a warm cache6555API::ProtectedBranches6556 GET /projects/:id/protected_branches6557 when authenticated as a maintainer6558 when search param is not present6559 behaves like protected branches6560 returns the protected branches6561 when search param is present6562 behaves like protected branches6563 returns the protected branches6564 when authenticated as a guest6565 behaves like 403 response6566 returns 4036567 GET /projects/:id/protected_branches/:branch6568 when authenticated as a maintainer6569 behaves like protected branch6570 returns the protected branch6571 when protected branch does not exist6572 behaves like 404 response6573 returns 4046574 when protected branch contains a wildcard6575 behaves like protected branch6576 returns the protected branch6577 when protected branch does not exist6578 behaves like 404 response6579 returns 4046580 when protected branch contains a period6581 behaves like protected branch6582 returns the protected branch6583 when protected branch does not exist6584 behaves like 404 response6585 returns 4046586 when authenticated as a guest6587 behaves like 403 response6588 returns 4036589 POST /projects/:id/protected_branches6590 when authenticated as a maintainer6591 protects a single branch6592 protects a single branch and developers can push6593 protects a single branch and developers can merge6594 protects a single branch and developers can push and merge6595 protects a single branch and no one can push6596 protects a single branch and no one can merge6597 protects a single branch and no one can push or merge6598 protects a single branch and allows force pushes6599 returns a 409 error if the same branch is protected twice6600 when branch has a wildcard in its name6601 protects multiple branches with a wildcard in the name6602 when a policy restricts rule deletion6603 prevents deletion of the protected branch rule6604 when authenticated as a guest6605 returns a 403 error if guest6606 DELETE /projects/:id/protected_branches/unprotect/:branch6607 unprotects a single branch6608 returns 404 if branch does not exist6609 behaves like 412 response6610 for a modified ressource6611 returns 412 with a JSON error6612 for an unmodified ressource6613 returns 204 with an empty body6614 when a policy restricts rule deletion6615 prevents deletion of the protected branch rule6616 when branch has a wildcard in its name6617 unprotects a wildcard branch6618API::GroupMilestones6619 behaves like group and project milestones6620 GET /groups/:id/milestones6621 returns milestones list6622 returns a 401 error if user not authenticated6623 returns an array of active milestones6624 returns an array of closed milestones6625 returns an array of milestones specified by iids6626 does not return any milestone if none found6627 returns a milestone by iids array6628 returns a milestone by title6629 returns a milestone by searching for title6630 returns a milestones by searching for description6631 GET /groups/:id/milestones/:milestone_id6632 returns a milestone by id6633 returns 401 error if user not authenticated6634 returns a 404 error if milestone id not found6635 POST /groups/:id/milestones6636 creates a new milestone6637 creates a new milestone with description and dates6638 returns a 400 error if title is missing6639 returns a 400 error if params are invalid (duplicate title)6640 creates a new milestone with reserved html characters6641 PUT /groups/:id/milestones/:milestone_id6642 updates a milestone6643 removes a due date if nil is passed6644 returns a 404 error if milestone id not found6645 closes milestone6646 updates milestone with only start date6647 DELETE /groups/:id/milestones/:milestone_id6648 rejects a member with reporter access from deleting a milestone6649 deletes the milestone when the user has developer access to the project6650 GET /groups/:id/milestones/:milestone_id/issues6651 returns issues for a particular milestone6652 returns issues sorted by label priority6653 matches V4 response schema for a list of issues6654 returns a 401 error if user not authenticated6655 confidential issues6656 returns confidential issues to team members6657 does not return confidential issues to team members with guest role6658 does not return confidential issues to regular users6659 returns issues ordered by label priority6660 GET /groups/:id/milestones/:milestone_id/merge_requests6661 returns merge_requests for a particular milestone6662 returns merge_requests sorted by label priority6663 returns a 404 error if milestone id not found6664 returns a 404 if the user has no access to the milestone6665 returns a 401 error if user not authenticated6666 returns merge_requests ordered by position asc6667 GET /groups/:id/milestones6668 when include_parent_milestones is true6669 when user has access to ancestor groups6670 behaves like listing all milestones6671 returns correct list of milestones6672 when iids param is present6673 behaves like listing all milestones6674 returns correct list of milestones6675 when user has no access to ancestor groups6676 behaves like listing all milestones6677 returns correct list of milestones6678 GET /groups/:id/milestones/:milestone_id/issues6679 returns multiple issues without performing N + 16680Projects::DiscussionsController6681 GET show6682 when user is not authorized to read the MR6683 returns 4046684 when user is authorized to read the MR6685 returns status 2006686 returns status 404 if MR does not exists6687 when user is authorized but note is LegacyDiffNote6688 returns status 2006689 POST resolve6690 when the user is not authorized to resolve the discussion6691 returns status 4046692 when the user is authorized to resolve the discussion6693 when the discussion is not resolvable6694 returns status 4046695 when the discussion is resolvable6696 resolves the discussion6697 sends notifications if all discussions are resolved6698 returns the name of the resolving user6699 returns status 2006700 renders discussion with serializer6701 diff discussion6702 returns truncated diff lines6703 DELETE unresolve6704 when the user is not authorized to resolve the discussion6705 returns status 4046706 when the user is authorized to resolve the discussion6707 when the discussion is not resolvable6708 returns status 4046709 when the discussion is resolvable6710 unresolves the discussion6711 tracks thread unresolve usage data6712 returns status 2006713 when vue_mr_discussions cookie is present6714 renders discussion with serializer6715API::Unleash6716 GET /feature_flags/unleash/:project_id/features6717 behaves like authenticated request6718 when using instance id6719 responds with OK6720 when repository is disabled6721 responds with forbidden6722 when repository is private6723 responds with OK6724 when using header6725 responds with OK6726 when using bogus instance id6727 responds with unauthorized6728 when using not existing project6729 responds with unauthorized6730 with version 1 (legacy) feature flags6731 does not return a legacy feature flag6732 with version 2 feature flags6733 does not return a flag without any strategies6734 returns a flag with a default strategy6735 returns a flag with a userWithId strategy6736 returns a flag with multiple strategies6737 returns only flags matching the environment scope6738 returns only strategies matching the environment scope6739 returns only flags for the given project6740 returns all strategies with a matching scope6741 returns a strategy with more than one matching scope6742 returns a disabled flag with a matching scope6743 returns a userWithId strategy for a gitlabUserList strategy6744 GET /feature_flags/unleash/:project_id/client/features6745 behaves like authenticated request6746 when using instance id6747 responds with OK6748 when repository is disabled6749 responds with forbidden6750 when repository is private6751 responds with OK6752 when using header6753 responds with OK6754 when using bogus instance id6755 responds with unauthorized6756 when using not existing project6757 responds with unauthorized6758 with version 1 (legacy) feature flags6759 does not return a legacy feature flag6760 with version 2 feature flags6761 does not return a flag without any strategies6762 returns a flag with a default strategy6763 returns a flag with a userWithId strategy6764 returns a flag with multiple strategies6765 returns only flags matching the environment scope6766 returns only strategies matching the environment scope6767 returns only flags for the given project6768 returns all strategies with a matching scope6769 returns a strategy with more than one matching scope6770 returns a disabled flag with a matching scope6771 returns a userWithId strategy for a gitlabUserList strategy6772 POST /feature_flags/unleash/:project_id/client/register6773 behaves like authenticated request6774 when using instance id6775 responds with OK6776 when repository is disabled6777 responds with forbidden6778 when repository is private6779 responds with OK6780 when using header6781 responds with OK6782 when using bogus instance id6783 responds with unauthorized6784 when using not existing project6785 responds with unauthorized6786 POST /feature_flags/unleash/:project_id/client/metrics6787 behaves like authenticated request6788 when using instance id6789 responds with OK6790 when repository is disabled6791 responds with forbidden6792 when repository is private6793 responds with OK6794 when using header6795 responds with OK6796 when using bogus instance id6797 responds with unauthorized6798 when using not existing project6799 responds with unauthorized6800Query.project(fullPath).releases()6801 ensures that the correct data is returned based on the project's visibility and the user's access level6802 when the project is private6803 when the user is not logged in6804 behaves like no access to any release data6805 returns nil6806 when the user has Guest permissions6807 behaves like no access to any repository-related fields6808 repository-related fields6809 does not return data for fields that expose repository information6810 behaves like correct total count6811 returns the total count6812 when the user has Reporter permissions6813 behaves like full access to all repository-related fields6814 repository-related fields6815 returns data for fields that are protected in private projects6816 behaves like correct total count6817 returns the total count6818 behaves like no access to editUrl6819 does not return editUrl6820 when the user has Developer permissions6821 behaves like full access to all repository-related fields6822 repository-related fields6823 returns data for fields that are protected in private projects6824 behaves like correct total count6825 returns the total count6826 behaves like access to editUrl6827 returns editUrl6828 when the project is public6829 when the user is not logged in6830 behaves like full access to all repository-related fields6831 repository-related fields6832 returns data for fields that are protected in private projects6833 behaves like correct total count6834 returns the total count6835 behaves like no access to editUrl6836 does not return editUrl6837 when the user has Guest permissions6838 behaves like full access to all repository-related fields6839 repository-related fields6840 returns data for fields that are protected in private projects6841 behaves like correct total count6842 returns the total count6843 behaves like no access to editUrl6844 does not return editUrl6845 when the user has Reporter permissions6846 behaves like full access to all repository-related fields6847 repository-related fields6848 returns data for fields that are protected in private projects6849 behaves like correct total count6850 returns the total count6851 behaves like no access to editUrl6852 does not return editUrl6853 when the user has Developer permissions6854 behaves like full access to all repository-related fields6855 repository-related fields6856 returns data for fields that are protected in private projects6857 behaves like correct total count6858 returns the total count6859 behaves like access to editUrl6860 returns editUrl6861 sorting and pagination6862 when sorting by released_at6863 when ascending6864 behaves like sorted paginated query6865 behaves like requires variables6866 shared example requires variables to be set6868 when sorting6869 sorts correctly6870 when paginating6871 paginates correctly6872 when descending6873 behaves like sorted paginated query6874 behaves like requires variables6875 shared example requires variables to be set6877 when sorting6878 sorts correctly6879 when paginating6880 paginates correctly6881 when sorting by created_at6882 when ascending6883 behaves like sorted paginated query6884 behaves like requires variables6885 shared example requires variables to be set6887 when sorting6888 sorts correctly6889 when paginating6890 paginates correctly6891 when descending6892 behaves like sorted paginated query6893 behaves like requires variables6894 shared example requires variables to be set6896 when sorting6897 sorts correctly6898 when paginating6899 paginates correctly6900getting a package list for a project6901 behaves like group and project packages query6902 when user has access to the resource6903 returns packages successfully6904 deals with metadata6905 behaves like a working graphql query6906 returns a successful response6907 when the user does not have access to the resource6908 returns nil6909 behaves like a working graphql query6910 returns a successful response6911 when the user is not authenticated6912 returns nil6913 behaves like a working graphql query6914 returns a successful response6915 sorting and pagination6916 CREATED_ASC6917 behaves like sorted paginated query6918 behaves like requires variables6919 shared example requires variables to be set6921 when sorting6922 sorts correctly6923 when paginating6924 paginates correctly6925 NAME_ASC6926 behaves like sorted paginated query6927 behaves like requires variables6928 shared example requires variables to be set6930 when sorting6931 sorts correctly6932 when paginating6933 paginates correctly6934 VERSION_ASC6935 behaves like sorted paginated query6936 behaves like requires variables6937 shared example requires variables to be set6939 when sorting6940 sorts correctly6941 when paginating6942 paginates correctly6943 TYPE_ASC6944 behaves like sorted paginated query6945 behaves like requires variables6946 shared example requires variables to be set6948 when sorting6949 sorts correctly6950 when paginating6951 paginates correctly6952 CREATED_DESC6953 behaves like sorted paginated query6954 behaves like requires variables6955 shared example requires variables to be set6957 when sorting6958 sorts correctly6959 when paginating6960 paginates correctly6961 NAME_DESC6962 behaves like sorted paginated query6963 behaves like requires variables6964 shared example requires variables to be set6966 when sorting6967 sorts correctly6968 when paginating6969 paginates correctly6970 VERSION_DESC6971 behaves like sorted paginated query6972 behaves like requires variables6973 shared example requires variables to be set6975 when sorting6976 sorts correctly6977 when paginating6978 paginates correctly6979 TYPE_DESC6980 behaves like sorted paginated query6981 behaves like requires variables6982 shared example requires variables to be set6984 when sorting6985 sorts correctly6986 when paginating6987 paginates correctly6988 with an invalid sort6989 throws an error6990 filtering6991 package_name6992 is expected to contain exactly {"name"=>"tab"}6993 package_type6994 is expected to contain exactly {"name"=>"vab"}6995 status6996 is expected to contain exactly {"name"=>"my/company/app/my-app"}6997 include_versionless6998 is expected to include {"name" => "my/company/app/my-app"}6999API::UsageDataQueries7000 GET /usage_data/usage_data_queries7001 with authentication7002 returns queries if user is admin7003 returns forbidden if user is not admin7004 without authentication7005 returns unauthorized7006 when feature_flag is disabled7007 returns not_found for admin7008 returns forbidden for non-admin7009Oauth::ApplicationsController7010 project members7011 GET #new7012 is expected to respond with numeric status code ok7013 behaves like redirects to login page when the user is not signed in7014 is expected to redirect to "/users/sign_in"7015 behaves like redirects to 2fa setup page when the user requires it7016 when 2fa is set up on application level7017 is expected to redirect to "/-/profile/two_factor_auth"7018 when 2fa is set up on group level7019 is expected to redirect to "/-/profile/two_factor_auth"7020 DELETE #destroy7021 is expected to redirect to "http://test.host/oauth/applications"7022 behaves like redirects to login page when the user is not signed in7023 is expected to redirect to "/users/sign_in"7024 behaves like redirects to 2fa setup page when the user requires it7025 when 2fa is set up on application level7026 is expected to redirect to "/-/profile/two_factor_auth"7027 when 2fa is set up on group level7028 is expected to redirect to "/-/profile/two_factor_auth"7029 GET #edit7030 is expected to respond with numeric status code ok7031 behaves like redirects to login page when the user is not signed in7032 is expected to redirect to "/users/sign_in"7033 behaves like redirects to 2fa setup page when the user requires it7034 when 2fa is set up on application level7035 is expected to redirect to "/-/profile/two_factor_auth"7036 when 2fa is set up on group level7037 is expected to redirect to "/-/profile/two_factor_auth"7038 PUT #update7039 is expected to redirect to "http://test.host/oauth/applications/49"7040 behaves like redirects to login page when the user is not signed in7041 is expected to redirect to "/users/sign_in"7042 behaves like redirects to 2fa setup page when the user requires it7043 when 2fa is set up on application level7044 is expected to redirect to "/-/profile/two_factor_auth"7045 when 2fa is set up on group level7046 is expected to redirect to "/-/profile/two_factor_auth"7047 GET #show7048 is expected to respond with numeric status code ok7049 behaves like redirects to login page when the user is not signed in7050 is expected to redirect to "/users/sign_in"7051 behaves like redirects to 2fa setup page when the user requires it7052 when 2fa is set up on application level7053 is expected to redirect to "/-/profile/two_factor_auth"7054 when 2fa is set up on group level7055 is expected to redirect to "/-/profile/two_factor_auth"7056 GET #index7057 is expected to respond with numeric status code ok7058 when OAuth applications are disabled7059 is expected to respond with numeric status code ok7060 behaves like redirects to login page when the user is not signed in7061 is expected to redirect to "/users/sign_in"7062 behaves like redirects to 2fa setup page when the user requires it7063 when 2fa is set up on application level7064 is expected to redirect to "/-/profile/two_factor_auth"7065 when 2fa is set up on group level7066 is expected to redirect to "/-/profile/two_factor_auth"7067 POST #create7068 creates an application7069 redirects back to profile page if OAuth applications are disabled7070 redirect_uri7071 shows an error for a forbidden URI7072 when scopes are not present7073 shows an error for blank scopes7074 behaves like redirects to login page when the user is not signed in7075 is expected to redirect to "/users/sign_in"7076 behaves like redirects to 2fa setup page when the user requires it7077 when 2fa is set up on application level7078 is expected to redirect to "/-/profile/two_factor_auth"7079 when 2fa is set up on group level7080 is expected to redirect to "/-/profile/two_factor_auth"7081 Helpers7082 current_user_mode available7083 includes Two-factor enforcement concern7084 locale7085 sets user's locale7086Projects::ArtifactsController7087 GET index7088 when feature flag is on7089 sets the artifacts variable7090 sets the total size variable7091 pagination7092 paginates artifacts7093 when feature flag is off7094 renders no content7095 does not set the artifacts variable7096 does not set the total size variable7097 DELETE destroy7098 deletes the artifact7099 redirects to artifacts index page7100 sets the notice7101 when artifact deletion fails7102 redirects to artifacts index page7103 sets the notice7104 when user is not authorized7105 does not delete the artifact7106 GET download7107 when no file type is supplied7108 sends the artifacts file7109 when a file type is supplied7110 when an invalid file type is supplied7111 returns 4047112 when codequality file type is supplied7113 when file is stored locally7114 sends the codequality report7115 when file is stored remotely7116 sends the codequality report7117 when proxied7118 sends the codequality report7119 GET browse7120 when the directory exists7121 renders the browse view7122 when the directory does not exist7123 responds Not Found7124 GET file7125 when the file is served by GitLab Pages7126 when the file exists7127 renders the file view7128 when the file does not exist7129 responds Not Found7130 when the file is served through Rails7131 when the file exists7132 renders the file view7133 when the file does not exist7134 responds Not Found7135 when the project is private7136 does not redirect the request7137 when the project is private and pages access control is enabled7138 renders the file view7139 GET raw7140 when the file exists7141 when using local file storage7142 behaves like a valid file7143 serves the file using workhorse7144 when using remote file storage7145 behaves like a valid file7146 serves the file using workhorse7147 fetching an artifact of different type7148 when the artifact is zip7149 behaves like a valid file7150 serves the file using workhorse7151 when the artifact is not zip7152 responds with not found7153 GET latest_succeeded7154 cannot find the job7155 has no such ref7156 behaves like not found7157 is expected to respond with numeric status code not_found7158 has no such job7159 behaves like not found7160 is expected to respond with numeric status code not_found7161 has no path7162 behaves like not found7163 is expected to respond with numeric status code not_found7164 found the job and redirect7165 with regular branch7166 behaves like redirect to the job7167 redirects7168 with branch name containing slash7169 behaves like redirect to the job7170 redirects7171 with branch name and path containing slashes7172 redirects7173 with a failed pipeline on an updated master7174 behaves like redirect to the job7175 redirects7176Projects::MirrorsController7177 Access control7178 #update7179 when project mirroring is enabled7180 allows requests from a maintainer7181 allows requests from an admin user7182 when project mirroring is disabled7183 disallows requests from a maintainer7184 when admin mode is enabled7185 allows requests from an admin user7186 when admin mode is disabled7187 disallows requests from an admin user7188 #update_now7189 when project mirroring is enabled7190 allows requests from a maintainer7191 allows requests from an admin user7192 when project mirroring is disabled7193 disallows requests from a maintainer7194 when admin mode is enabled7195 allows requests from an admin user7196 when admin mode is disabled7197 disallows requests from an admin user7198 setting up a remote mirror7199 when the current project is not a mirror7200 allows to create a remote mirror7201 setting up SSH public-key authentication7202 processes a successful update7203 #update7204 With valid URL for a push7205 processes a successful update7206 creates a RemoteMirror object7207 With invalid URL for a push7208 processes an unsuccessful update7209 does not create a RemoteMirror object7210 #ssh_host_keys7211 invalid URLs7212 returns an error with a 400 response for URL "INVALID"7213 returns an error with a 400 response for URL "git@example.com:foo/bar.git"7214 returns an error with a 400 response for URL "ssh://git@example.com:foo/bar.git"7215 no data in cache7216 requests the cache to be filled and returns a 204 response7217 error in the cache7218 returns the error with a 400 response7219 data in the cache7220 returns the data with a 200 response7221Groups::UploadsController7222 behaves like handle uploads7223 behaves like handle uploads authorize7224 POST #authorize7225 when a user is not authorized to upload a file7226 returns 404 status7227 when a user can upload a file7228 and the request bypassed workhorse7229 raises an exception7230 and request is sent by gitlab-workhorse to authorize the request7231 when using local storage7232 behaves like a local file7233 behaves like a valid response7234 responds with status 2007235 uses the gitlab-workhorse content type7236 responds with status 200, location of uploads store and object details7237 when using remote storage7238 when direct upload is enabled7239 behaves like a valid response7240 responds with status 2007241 uses the gitlab-workhorse content type7242 responds with status 200, location of uploads remote store and object details7243 when direct upload is disabled7244 behaves like a local file7245 behaves like a valid response7246 responds with status 2007247 uses the gitlab-workhorse content type7248 responds with status 200, location of uploads store and object details7249 POST #create7250 when a user is not authorized to upload a file7251 returns 404 status7252 when a user can upload a file7253 without params['file']7254 returns an error7255 with valid image7256 returns a content with original filename, new link, and correct type.7257 creates a corresponding Upload record7258 with valid non-image file7259 returns a content with original filename, new link, and correct type.7260 GET #show7261 when the secret is invalid7262 responds with status 4047263 is a working exploit without the validation7264 when accessing a specific upload via different model7265 responds with status 4047266 when the upload does not have a MIME type that Rails knows7267 falls back to the null type7268 when the model is public7269 when not signed in7270 when the file exists7271 responds with status 2007272 when neither the uploader nor the model exists7273 responds with status 4047274 when the file doesn't exist7275 responds with status 4047276 when signed in7277 when the file exists7278 responds with status 2007279 when the file doesn't exist7280 responds with status 4047281 when the model is private7282 when not signed in7283 when the file exists7284 when the file is an image7285 responds with status 2007286 when the file is not an image7287 redirects to the sign in page7288 when the file doesn't exist7289 redirects to the sign in page7290 when signed in7291 when the user has access to the project7292 when the file exists7293 responds with status 2007294 when the file doesn't exist7295 responds with status 4047296 when the user doesn't have access to the model7297 when the file exists7298 when the file is an image7299 responds with status 2007300 when the file is not an image7301 responds with status 4047302 when the file doesn't exist7303 responds with status 4047304 with a moved group7305 redirects to a file with the proper extension7306InvitesController7307 GET #show7308 when logged in7309 behaves like invite email match enforcement7310 accepts user if invite email matches signed in user7311 accepts invite if invite email matches confirmed secondary email7312 does not accept if invite email matches unconfirmed secondary email7313 does not accept if invite email does not match signed in user7314 behaves like invalid token7315 when invite token is not valid7316 redirects to root7317 when it is an initial invite email7318 tracks the initial join click from email7319 when it is part of the invite_email_preview_text experiment7320 tracks the initial join click from email7321 when member does not exist7322 does not track the experiment7323 when member does not exist7324 does not track join click7325 when it is not an initial email7326 does not track the join click7327 when it is not part of our invite email experiment7328 does not track via experiment7329 when not logged in7330 when invite token belongs to a valid member7331 when instance allows sign up7332 indicates an account can be created in notice7333 when user exists with the invited email7334 is redirected to a new session with invite email param7335 when user exists with the invited email as secondary email7336 is redirected to a new session with invite email param7337 when user does not exist with the invited email7338 indicates an account can be created in notice7339 is redirected to a new registration with invite email param and flash message7340 sets session keys for auto email confirmation on sign up7341 when it is part of our invite email experiment7342 sets session key for invite acceptance tracking on sign-up7343 when it is not part of our invite email experiment7344 does not set the session key for invite acceptance tracking on sign-up7345 when instance does not allow sign up7346 does not indicate an account can be created in notice7347 when user exists with the invited email7348 is redirected to a new session with invite email param7349 when user does not exist with the invited email7350 is redirected to a new session with invite email param7351 when invite token does not belong to a valid member7352 is redirected to a new session7353 POST #accept7354 behaves like invite email match enforcement7355 accepts user if invite email matches signed in user7356 accepts invite if invite email matches confirmed secondary email7357 does not accept if invite email matches unconfirmed secondary email7358 does not accept if invite email does not match signed in user7359 behaves like invalid token7360 when invite token is not valid7361 redirects to root7362 POST #decline for link in UI7363 behaves like invalid token7364 when invite token is not valid7365 redirects to root7366 GET #decline for link in email7367 behaves like invalid token7368 when invite token is not valid7369 redirects to root7370Getting Metrics Dashboard7371 with metrics_dashboard_exhaustive_validations feature flag off7372 for anonymous user7373 requested dashboard is available7374 returns nil7375 behaves like a working graphql query7376 returns a successful response7377 for user with developer access7378 requested dashboard is available7379 returns metrics dashboard7380 behaves like a working graphql query7381 returns a successful response7382 invalid dashboard7383DEPRECATION WARNING: Enumerating ActiveModel::Errors as a hash has been deprecated.7384In Rails 6.1, `errors` is an array of Error objects,7385therefore it should be accessed by a block with a single block7386parameter like this:7387person.errors.each do |error|7388 attribute = error.attribute7389 message = error.message7390end7391You are passing a block expecting two parameters,7392so the old hash behavior is simulated. As this is deprecated,7393this will result in an ArgumentError in Rails 6.2.7394 (called from map at /builds/gitlab-org/gitlab/app/models/performance_monitoring/prometheus_dashboard.rb:63)7395 returns metrics dashboard7396 empty dashboard7397DEPRECATION WARNING: Enumerating ActiveModel::Errors as a hash has been deprecated.7398In Rails 6.1, `errors` is an array of Error objects,7399therefore it should be accessed by a block with a single block7400parameter like this:7401person.errors.each do |error|7402 attribute = error.attribute7403 message = error.message7404end7405You are passing a block expecting two parameters,7406so the old hash behavior is simulated. As this is deprecated,7407this will result in an ArgumentError in Rails 6.2.7408 (called from map at /builds/gitlab-org/gitlab/app/models/performance_monitoring/prometheus_dashboard.rb:63)7409 returns metrics dashboard7410 requested dashboard can not be found7411 returns nil7412 behaves like a working graphql query7413 returns a successful response7414 with metrics_dashboard_exhaustive_validations feature flag on7415 for anonymous user7416 requested dashboard is available7417 returns nil7418 behaves like a working graphql query7419 returns a successful response7420 for user with developer access7421 requested dashboard is available7422 returns metrics dashboard7423 behaves like a working graphql query7424 returns a successful response7425 invalid dashboard7426 returns metrics dashboard7427 empty dashboard7428 returns metrics dashboard7429 requested dashboard can not be found7430 returns nil7431 behaves like a working graphql query7432 returns a successful response7433API::ProtectedTags7434 GET /projects/:id/protected_tags7435 when authenticated as a maintainer7436 behaves like protected tags7437 returns the protected tags7438 when authenticated as a guest7439 behaves like 403 response7440 returns 4037441 GET /projects/:id/protected_tags/:tag7442 when authenticated as a maintainer7443 behaves like protected tag7444 returns the protected tag7445 when protected tag does not exist7446 behaves like 404 response7447 returns 4047448 when protected tag contains a wildcard7449 behaves like protected tag7450 returns the protected tag7451 when protected tag does not exist7452 behaves like 404 response7453 returns 4047454 when authenticated as a guest7455 behaves like 403 response7456 returns 4037457 POST /projects/:id/protected_tags7458 when authenticated as a maintainer7459 protects a single tag with maintainers can create tags7460 protects a single tag with developers can create tags7461 protects a single tag with no one can create tags7462 returns a 422 error if the same tag is protected twice7463 returns 201 if the same tag is proteted on different projects7464 when tag has a wildcard in its name7465 protects multiple tags with a wildcard in the name7466 when authenticated as a guest7467 returns a 403 error if guest7468 DELETE /projects/:id/protected_tags/unprotect/:tag7469 unprotects a single tag7470 returns 404 if tag does not exist7471 behaves like 412 response7472 for a modified ressource7473 returns 412 with a JSON error7474 for an unmodified ressource7475 returns 204 with an empty body7476 when tag has a wildcard in its name7477 unprotects a wildcard tag7478Updating a Note7479 when the user does not have permission7480 does not update the Note7481 behaves like a mutation that returns a top-level access error7482 is expected to eq ["The resource that you are attempting to access does not exist or you don't have permission to perform this action"]7483 when the user has permission7484DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7485 updates the Note7486DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7487 returns the updated Note7488 behaves like a Note mutation when the given resource id is not for a Note7489 behaves like a mutation that returns top-level errors7490 is expected to include /does not represent an instance of Note/7491 when only confidential param is present7492DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7493 updates only the note confidentiality7494 when only body param is present7495DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7496 updates only the note body7497 when there are ActiveRecord validation errors7498DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7499 does not update the Note7500DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7501 returns the original Note7502 behaves like a mutation that returns errors in the response7503DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7504 is expected to contain exactly "Note can't be blank"7505 when body only contains quick actions7506 returns a nil note and empty errors7507GraphQL7508 logging7509 with no variables7510 behaves like logging a graphql query7511 logs a query with the expected params7512 does not instantiate any query analyzers7513 with variables7514 behaves like logging a graphql query7515 logs a query with the expected params7516 does not instantiate any query analyzers7517 when there is an error in the logger7518 logs the exception in Sentry and continues with the request7519 when executing mutations7520 with POST7521 succeeds7522 with variables7523 succeeds7524 with GET7525 fails7526 with variables7527 fails7528 when executing queries7529 with POST7530 succeeds7531 with GET7532 succeeds7533 when selecting a query by operation name7534 with POST7535 succeeds when selecting the query7536 succeeds when selecting the mutation7537 with GET7538 succeeds when selecting the query7539 fails when selecting the mutation7540 when batching mutations and queries7541 with POST7542 succeeds7543 with GET7544 fails with a helpful error message7545 with invalid variables7546 returns an error7547 authentication7548 allows access to public data without authentication7549 does not authenticate a user with an invalid CSRF7550 authenticates a user with a valid session token7551 with token authentication7552 authenticates users with a PAT7553 prevents access by deactived users7554 when the personal access token has no api scope7555 does not log the user in7556 testing for Gitaly calls7557 behaves like a working graphql query7558 returns a successful response7559 when Gitaly is called7560 logs a warning that the 'calls_gitaly' field declaration is missing7561 resolver complexity7562 when fetching single resource7563 processes the query7564 when fetching too many resources7565 returns an error7566 complexity limits7567 unauthenticated user7568 raises a complexity error7569 authenticated user7570 does not raise an error as it uses the `AUTHENTICATED_MAX_COMPLEXITY`7571 keyset pagination7572 when new_graphql_keyset_pagination feature flag is off7573 paginates datetimes correctly when they have millisecond data7574 when new_graphql_keyset_pagination feature flag is on7575 paginates datetimes correctly when they have millisecond data7576Projects::Clusters::IntegrationsController7577 POST create_or_update7578 behaves like #create_or_update action7579 authorization7580 behaves like a secure endpoint7581 is allowed for admin when admin mode enabled7582 is denied for admin when admin mode disabled7583 it is allowed for project maintainers7584 is expected to be allowed for owner. Expected: 200,201,204,302 Got: 3027585 is expected to be allowed for maintainer. Expected: 200,201,204,302 Got: 3027586 is expected to be denied for developer. Expected: 401,404 Got: 4047587 is expected to be denied for reporter. Expected: 401,404 Got: 4047588 is expected to be denied for guest. Expected: 401,404 Got: 4047589 is expected to be denied for user. Expected: 401,404 Got: 4047590 is expected to be denied for external. Expected: 401,404 Got: 4047591 functionality7592 redirects on success7593 redirects on error7594Merge Requests Diffs7595 GET diffs_batch7596 with caching7597 when the request has not been cached7598 behaves like serializes diffs with expected arguments7599 serializes paginated merge request diff collection7600 when the request has already been cached7601 does not serialize diffs7602 with the different user7603 behaves like serializes diffs with expected arguments7604 serializes paginated merge request diff collection7605 with a new unfoldable diff position7606 behaves like serializes diffs with expected arguments7607 serializes paginated merge request diff collection7608 with a new environment7609 behaves like serializes diffs with expected arguments7610 serializes paginated merge request diff collection7611 with disabled display_merge_conflicts_in_diff feature7612 behaves like serializes diffs with expected arguments7613 serializes paginated merge request diff collection7614 with diff_head option7615 behaves like serializes diffs with expected arguments7616 serializes paginated merge request diff collection7617 with the different pagination option7618 behaves like serializes diffs with expected arguments7619 serializes paginated merge request diff collection7620 with the different diff_view7621 behaves like serializes diffs with expected arguments7622 serializes paginated merge request diff collection7623 with the different expanded option7624 behaves like serializes diffs with expected arguments7625 serializes paginated merge request diff collection7626 with the different ignore_whitespace_change option7627 behaves like serializes diffs with expected arguments7628 serializes paginated merge request diff collection7629 when the paths is given7630 does not use cache7631Projects::ImportsController7632 GET #show7633 when user is not authenticated and the project is public7634 returns 404 response7635 when the user has maintainer rights7636 when repository does not exists7637 renders template7638 sets flash.now if params is present7639 when repository exists7640 when import is in progress7641 renders template7642 sets flash.now if params is present7643 when import failed7644 redirects to new_namespace_project_import_path7645 when import finished7646 when project is a fork7647 redirects to namespace_project_path7648 when project is external7649 redirects to namespace_project_path7650 when continue params is present7651 redirects to internal params[:to]7652 does not redirect to external params[:to]7653 when import never happened7654 redirects to namespace_project_path7655 when project is in group7656 when user has developer access to group and import is in progress7657 when group allows developers to create projects7658 renders template7659 when group prohibits developers to create projects7660 returns 404 response7661 POST #create7662 sets import_url to the project7663Destroying a container repository7664 post graphql mutation7665 with valid id7666 user_role: :maintainer, shared_examples_name: "destroying the container repository"7667 behaves like destroying the container repository7668DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7669 destroy the container repository7670 behaves like returning response status7671DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7672 returns success7673 user_role: :developer, shared_examples_name: "destroying the container repository"7674 behaves like destroying the container repository7675DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7676 destroy the container repository7677 behaves like returning response status7678DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7679 returns success7680 user_role: :reporter, shared_examples_name: "denying the mutation request"7681 behaves like denying the mutation request7682 does not destroy the container repository7683 behaves like returning response status7684 returns success7685 user_role: :guest, shared_examples_name: "denying the mutation request"7686 behaves like denying the mutation request7687 does not destroy the container repository7688 behaves like returning response status7689 returns success7690 user_role: :anonymous, shared_examples_name: "denying the mutation request"7691 behaves like denying the mutation request7692 does not destroy the container repository7693 behaves like returning response status7694 returns success7695 with invalid id7696 behaves like denying the mutation request7697 does not destroy the container repository7698 behaves like returning response status7699 returns success7700Groups::Settings::CiCdController7701 GET #show7702 when user is owner7703 renders show with 200 status code and correct runners7704 paginates runners7705 when user is not owner7706 renders a 4047707 external authorization7708 renders show with 200 status code7709 PUT #reset_registration_token7710 when user is owner7711 resets runner registration token7712 redirects the user to admin runners page7713 when user is not owner7714 renders a 4047715 PATCH #update_auto_devops7716 when user does not have enough permission7717 is expected to respond with numeric status code not_found7718 when user has enough privileges7719 is expected to redirect to "/groups/group224/-/settings/ci_cd"7720 when service execution went wrong7721 returns a flash alert7722 when service execution was successful7723 returns a flash notice7724 when changing auto devops value7725 when explicitly enabling auto devops7726 updates group attribute7727 when explicitly disabling auto devops7728 updates group attribute7729 PATCH #update7730 when user is not an admin7731 is expected to respond with numeric status code not_found7732 when user is an admin7733 when admin mode is disabled7734 is expected to respond with numeric status code not_found7735 when admin mode is enabled7736 is expected to redirect to "/groups/group224/-/settings/ci_cd"7737 when service execution went wrong7738 returns a flash alert7739 when service execution was successful7740 returns a flash notice7741 GET #runner_setup_scripts7742 renders the setup scripts7743 renders errors if they occur7744API::GroupVariables7745 GET /groups/:id/variables7746 authorized user with proper permissions7747 returns group variables7748 authorized user with invalid permissions7749 does not return group variables7750 unauthorized user7751 does not return group variables7752 GET /groups/:id/variables/:key7753 authorized user with proper permissions7754 returns group variable details7755 responds with 404 Not Found if requesting non-existing variable7756 authorized user with invalid permissions7757 does not return group variable details7758 unauthorized user7759 does not return group variable details7760 POST /groups/:id/variables7761 authorized user with proper permissions7762 creates variable7763 creates variable with optional attributes7764 does not allow to duplicate variable key7765 authorized user with invalid permissions7766 does not create variable7767 unauthorized user7768 does not create variable7769 PUT /groups/:id/variables/:key7770 authorized user with proper permissions7771 updates variable data7772 responds with 404 Not Found if requesting non-existing variable7773 responds with 400 if the update fails7774 authorized user with invalid permissions7775 does not update variable7776 unauthorized user7777 does not update variable7778 DELETE /groups/:id/variables/:key7779 authorized user with proper permissions7780 deletes variable7781 responds with 404 Not Found if requesting non-existing variable7782 behaves like 412 response7783 for a modified ressource7784 returns 412 with a JSON error7785 for an unmodified ressource7786 returns 204 with an empty body7787 authorized user with invalid permissions7788 does not delete variable7789 unauthorized user7790 does not delete variable7791Admin::Ci::VariablesController7792 GET #show7793 when signed in as admin7794 renders the variables as json7795 has only one variable7796 when signed in as regular user7797 returns 4047798 PATCH #update7799 when signed in as admin7800 with invalid new variable parameters7801 does not update the existing variable7802 does not create the new variable7803 returns a bad request response7804 with duplicate new variable parameters7805 does not update the existing variable7806 does not create the new variable7807 returns a bad request response7808 with valid new variable parameters7809 updates the existing variable7810 creates the new variable7811 returns a successful response7812 has all variables in response7813 with a deleted variable7814 destroys the variable7815 returns a successful response7816 has all variables in response7817 with missing variable7818 returns not found response7819 for variables of type file7820 creates new variable of type file7821 when signed in as regular user7822 returns 4047823API::API7824 Record user last activity in after hook7825 updates the users last_activity_on to the current date7826 User with only read_api scope personal access token7827 when personal access token has only read_api scope7828 does authorize user for get request7829 does authorize user for head request7830 does not authorize user for revoked token7831 does not authorize user for post request7832 does not authorize user for put request7833 does not authorize user for delete request7834 authentication with deploy token7835 admin mode7836 does not bypass the session7837 application context7838 logs all application context fields7839 skips fields that do not apply7840 Marginalia comments7841 GET /user/:id7842 generates a query that includes the expected annotations7843 supported content-types7844 GET /user/:id.txt7845 returns application/json7846Projects::Tags::ReleasesController7847 GET #edit7848 initializes a new release7849 retrieves an existing release7850 PUT #update7851 updates release note description7852 creates a release if one does not exist7853 sets the release name, sha, and author for a new release7854 does not delete release when description is empty7855 does nothing when description is empty and the tag does not have a release7856Emails::Pipelines7857 #pipeline_success_email7858 behaves like correct pipeline information7859 has a correct information7860 when pipeline on master branch has a merge request7861 has correct information that there is no merge request link7862 when pipeline for merge requests7863 has correct information that there is a merge request link7864 when branch pipeline is set to a merge request as a head pipeline7865 has correct information that there is a merge request link7866 #pipeline_failed_email7867 behaves like correct pipeline information7868 has a correct information7869 when pipeline on master branch has a merge request7870 has correct information that there is no merge request link7871 when pipeline for merge requests7872 has correct information that there is a merge request link7873 when branch pipeline is set to a merge request as a head pipeline7874 has correct information that there is a merge request link7875 #pipeline_fixed_email7876 behaves like correct pipeline information7877 has a correct information7878 when pipeline on master branch has a merge request7879 has correct information that there is no merge request link7880 when pipeline for merge requests7881 has correct information that there is a merge request link7882 when branch pipeline is set to a merge request as a head pipeline7883 has correct information that there is a merge request link7884API::Submodules7885 PUT /projects/:id/repository/submodule/:submodule7886 when unauthenticated7887 returns 4017888 when authenticated as a guest7889 returns 4037890 when authenticated as a developer7891 returns 400 if params is missing7892 returns 400 if branch is missing7893 returns 400 if commit_sha is missing7894 returns the commit7895 when the submodule name is urlencoded7896 returns the commit7897Setting locked status of a merge request7898 returns an error if the user is not allowed to update the merge request7899 marks the merge request as WIP7900 does not do anything if the merge request was already locked7901 when passing locked false as input7902 does not do anything if the merge request was not marked locked7903 unmarks the merge request as locked7904Setting Draft status of a merge request7905 returns an error if the user is not allowed to update the merge request7906 marks the merge request as Draft7907 does not do anything if the merge request was already marked `Draft`7908 when passing Draft false as input7909 does not do anything if the merge reqeust was not marked draft7910 unmarks the merge request as `Draft`7911Groups::Settings::ApplicationsController7912 GET #index7913 when user is owner7914 renders the application form7915 when user is not owner7916 renders a 4047917 GET #edit7918 when user is owner7919 renders the application form7920 when user is not owner7921 renders a 4047922 POST #create7923 when user is owner7924 creates the application7925 renders the application form on errors7926 when the params are for a confidential application7927 creates a confidential application7928 when scopes are not present7929 renders the application form on errors7930 when user is not owner7931 renders a 4047932 PATCH #update7933 when user is owner7934 updates the application7935 renders the application form on errors7936 when updating the application to be confidential7937 successfully sets the application to confidential7938 when user is not owner7939 renders a 4047940 DELETE #destroy7941 when user is owner7942 deletes the application7943 when user is not owner7944 renders a 4047945package details7946DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7947 has the correct metadata7948DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7949 does not have files7950 behaves like a package detail7951 behaves like a working graphql query7952DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7953 returns a successful response7954DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7955 matches the JSON schema7956Projects::ErrorTracking::StackTracesController7957 GET #index7958 awaiting data7959 responds with no data7960 behaves like sets the polling header7961 is expected to eq "1000"7962 service result is successful7963 responds with success7964 responds with error7965 highlights stack trace source code7966 behaves like sets the polling header7967 is expected to eq "1000"7968 service result is erroneous7969 without http_status7970 responds with bad request7971 responds with error message7972 with explicit http_status7973 responds with custom http status7974 responds with error message7975A Todoable that implements the CurrentUserTodos interface7976 returns todos of the current user7977 does not return todos of another user7978 does not error when there is no logged in user7979 when `state` argument is `pending`7980 returns just the pending todo7981 when `state` argument is `done`7982 returns just the done todo7983pypi package details7984DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7985 has the correct metadata7986 behaves like a package detail7987 behaves like a working graphql query7988DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7989 returns a successful response7990DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7991 matches the JSON schema7992 behaves like a package with files7993DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7994 has the right amount of files7995DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.7996 has the basic package files data7997CiCdSettingsUpdate7998 when unauthorized7999 when not a project member8000 behaves like unauthorized8001 returns an error8002 when a non-admin project member8003 behaves like unauthorized8004 returns an error8005 when authorized8006DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.8007 updates ci cd settings8008DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.8009 updates job_token_scope_enabled8010DEPRECATION WARNING: using BatchLoader.for in GraphQL is deprecated. Use BatchLoader::GraphQL.for instead or return BatchLoader::GraphQL.wrap from your resolver.8011 does not update job_token_scope_enabled if not specified8012 when bad arguments are provided8013 returns the errors8014API::ImportBitbucketServer8015 POST /import/bitbucket_server8016 with no optional parameters8017 returns 201 response when the project is imported successfully8018 with a new project name8019 returns 201 response when the project is imported successfully with a new project name8020 with an invalid URL8021 returns 400 response due to a blocked URL8022 with a new namespace8023 returns 201 response when the project is imported successfully to a new namespace8024 with a private inaccessible namespace8025 returns 401 response when user can not create projects in the chosen namespace8026 with an inaccessible bitbucket server instance8027 raises a connection error8028rendering project statistics8029 includes the packages size if the user can read the statistics8030 includes uploads size if the user can read the statistics8031 behaves like a working graphql query8032 returns a successful response8033 when the project is public8034 hides statistics for unauthenticated requests8035MetricsController8036 #index8037 accessed from whitelisted ip8038 behaves like providing metrics8039 returns prometheus metrics8040 prometheus metrics are disabled8041 returns proper response8042 accessed from ip in whitelisted range8043 behaves like providing metrics8044 returns prometheus metrics8045 prometheus metrics are disabled8046 returns proper response8047 accessed from not whitelisted ip8048 returns the expected error response8049 #system8050 accessed from whitelisted ip8051 behaves like providing system stats8052 renders system stats JSON8053 accessed from ip in whitelisted range8054 behaves like providing system stats8055 renders system stats JSON8056 accessed from not whitelisted ip8057 returns the expected error response8058Projects::BlameController8059 GET show8060 valid branch, valid file8061 is expected to respond with 2008062 valid branch, invalid file8063 redirects8064 invalid branch, valid file8065 is expected to respond with 4048066Querying a Milestone8067 when the user has access to the milestone8068 is expected to include {"title" => "My title 1427"}8069 behaves like a working graphql query8070 returns a successful response8071 when the user does not have access to the milestone8072 is expected to be nil8073 behaves like a working graphql query8074 returns a successful response8075 when ID argument is missing8076 raises an exception8077Mutations::Labels::Create8078 when creating a project label8079 behaves like labels create mutation8080 when the user does not have permission to create a label8081 does not create the label8082 behaves like a mutation that returns a top-level access error8083 is expected to eq ["The resource that you are attempting to access does not exist or you don't have permission to perform this action"]8084 when the user has permission to create a label8085 when the parent (project_path or group_path) param is given8086 creates the label8087 does not create a label when there are errors8088 when creating a group label8089 behaves like labels create mutation8090 when the user does not have permission to create a label8091 does not create the label8092 behaves like a mutation that returns a top-level access error8093 is expected to eq ["The resource that you are attempting to access does not exist or you don't have permission to perform this action"]8094 when the user has permission to create a label8095 when the parent (project_path or group_path) param is given8096 creates the label8097 does not create a label when there are errors8098 when neither project_path nor group_path param is given8099 does not create the label8100 behaves like a mutation that returns top-level errors8101 is expected to eq ["Exactly one of group_path or project_path arguments is required"]8102AbuseReportsController8103 GET new8104 when the user has already been deleted8105 redirects the reporter to root_path8106 when the user has already been blocked8107 redirects the reporter to the user's profile8108 POST create8109 with valid attributes8110 saves the abuse report8111 calls notify8112 redirects back to root8113 with invalid attributes8114 renders new8115Projects::Pipelines::StagesController8116 POST #play_manual.json8117 when user does not have access8118 returns not authorized8119 when user has access8120 when the stage does not exists8121 fails to play all manual8122 when the stage exists8123 starts all manual jobs8124Create a label or backlog board list8125 behaves like board lists create request8126 the user is not allowed to read board lists8127 behaves like a mutation that returns a top-level access error8128 is expected to eq ["The resource that you are attempting to access does not exist or you don't have permission to perform this action"]8129 when user has permissions to admin board lists8130 backlog list8131 creates the list8132 label list8133 creates the list8134getting Alert Management Alert Assignees8135 with self-managed prometheus payload8136 includes the correct metrics dashboard url8137 with gitlab-managed prometheus payload8138 includes the correct metrics dashboard url8139Groups::DependencyProxyAuthController8140 GET #authenticate8141 feature flag disabled8142 returns successfully8143 without JWT8144 returns unauthorized with oauth realm8145 with valid JWT8146 user8147 is expected to respond with numeric status code success8148 deploy token8149 is expected to respond with numeric status code success8150 with invalid JWT8151 bad user8152 is expected to respond with numeric status code unauthorized8153 token with no user id8154 is expected to respond with numeric status code unauthorized8155 expired token8156 is expected to respond with numeric status code unauthorized8157 expired deploy token8158 is expected to respond with numeric status code unauthorized8159 revoked deploy token8160 is expected to respond with numeric status code unauthorized8161API::Appearance Appearance8162 GET /application/appearance8163 as a non-admin user8164 returns 4038165 as an admin user8166 returns appearance8167 PUT /application/appearance8168 as a non-admin user8169 returns 4038170 as an admin user8171 instance basics8172 allows updating the settings8173 system header and footer8174 allows updating the settings8175 fails on invalid color values8176 with message_font_color8177 with message_background_color8178 instance logos8179 allows updating the image files8180 fails on invalid color images8181 with string instead of file8182 with .svg file instead of .png8183API::BulkImports8184 GET /bulk_imports8185 returns a list of bulk imports authored by the user8186 POST /bulk_imports8187 starts a new migration8188 when provided url is blocked8189 returns blocked url error8190 GET /bulk_imports/entities8191 returns a list of all import entities authored by the user8192 GET /bulk_imports/:id8193 returns specified bulk import8194 GET /bulk_imports/:id/entities8195 returns specified bulk import entities with failures8196 GET /bulk_imports/:id/entities/:entity_id8197 returns specified bulk import entity8198 when user is unauthenticated8199 returns 4018200API::Statistics Statistics8201 GET /application/statistics8202 when no user8203 returns authentication error8204 when not an admin8205 returns forbidden error8206 when authenticated as admin8207unknown OID 28: failed to recognize type of 'relfrozenxid'. It will be treated as String.8208unknown OID 1034: failed to recognize type of 'relacl'. It will be treated as String.8209unknown OID 194: failed to recognize type of 'relpartbound'. It will be treated as String.8210 matches the response schema8211 gives the right statistics8212Query.ciConfig8213 returns the correct structure8214 behaves like a working graphql query8215 returns a successful response8216 when the config file includes other files8217 returns the correct structure with included files8218 behaves like a working graphql query8219 returns a successful response8220ChecksCollaboration8221 #can_collaborate_with_project?8222 is true if the user can push to the project8223 is true when the user can push to a branch of the project8224 when the user has forked the project8225 is true8226 is false when the project is archived8227snippets8228 querying for all fields8229 can successfully query for snippets and their blobs8230Restoring many Todos8231 restores many todos8232 when using an invalid gid8233 contains the expected error8234Profiles::GpgKeysController8235 POST #create8236 creates a new key8237getting Issue counts by status8238 with issue count data8239 without project permissions8240 is expected to equal nil8241 behaves like a working graphql query8242 returns a successful response8243 with project permissions8244 returns the correct counts for each status8245 behaves like a working graphql query8246 returns a successful response8247getting a detailed sentry error8248 behaves like a working graphql query8249 returns a successful response8250 when data is loading via reactive cache8251 is expected to return an empty error8252 reactive cache returns data8253 is expected to return a valid error8254 is expected to return the frequency correctly8255ProductAnalytics::CollectorApp throttle8256 per application id8257 throttles the endpoint8258Projects::Environments::SampleMetricsController8259 GET #query8260 when the file is not found8261 returns a 4048262 when the sample data is found8263 returns JSON with a message and a 200 status code8264Admin::RequestsProfilesController8265 #show8266 when loading HTML profile8267 renders the data8268 when loading TXT profile8269 renders the data8270 when loading PDF profile8271 fails to render the data8272getting Alert Management Alert Issue8273 with gitlab alert8274 includes the correct alert issue payload data8275 performance8276 with gitlab alert8277 avoids N+1 queries8278JobRetry8279 returns an error if the user is not allowed to retry the job8280 retries a job8281Setting an issue as locked8282 when the user is not allowed to update the issue8283 behaves like a mutation that returns a top-level access error8284 is expected to eq ["The resource that you are attempting to access does not exist or you don't have permission to perform this action"]8285 when user is allowed to update the issue8286 updates the issue locked status8287Profiles::KeysController8288 POST #create8289 creates a new key8290PipelineDestroy8291 returns an error if the user is not allowed to destroy the pipeline8292 destroys a pipeline8293Create a todo8294 the user is not allowed to create todo8295 behaves like a mutation that returns a top-level access error8296 is expected to eq ["The resource that you are attempting to access does not exist or you don't have permission to perform this action"]8297 when user has permissions to create todo8298 creates todo8299File uploads8300 POST /:namespace/:project/create/:branch8301 redirects to blob8302Admin::PlanLimitsController8303 POST create8304 with an authenticated admin user8305 updates the plan limits8306 without admin access8307 returns `not_found`8308API::Geo8309 GET /geo/proxy8310 rejects requests that bypassed gitlab-workhorse8311 with valid auth8312 returns empty data8313RunnerSetupController8314 GET /-/runner_setup/platforms8315 renders the platforms8316Admin::HealthCheckController8317 GET show8318 loads the health information8319Knapsack report was generated. Preview:8320{8321 "spec/mailers/notify_spec.rb": 226.204401636,8322 "spec/requests/api/users_spec.rb": 77.55983695499998,8323 "spec/requests/api/notes_spec.rb": 115.46185637999997,8324 "spec/requests/api/conan_instance_packages_spec.rb": 94.02381501000002,8325 "spec/requests/api/terraform/modules/v1/packages_spec.rb": 61.190385627999945,8326 "spec/requests/api/debian_project_packages_spec.rb": 38.40786027199999,8327 "spec/requests/api/project_snippets_spec.rb": 45.64022094299992,8328 "spec/requests/api/group_packages_spec.rb": 47.278691587000026,8329 "spec/controllers/groups/milestones_controller_spec.rb": 42.47595953999996,8330 "spec/requests/api/tags_spec.rb": 38.74903852600005,8331 "spec/controllers/application_controller_spec.rb": 29.325026260999948,8332 "spec/controllers/autocomplete_controller_spec.rb": 32.57936439399987,8333 "spec/requests/groups/email_campaigns_controller_spec.rb": 14.974836523000022,8334 "spec/controllers/boards/lists_controller_spec.rb": 25.85312481899996,8335 "spec/controllers/projects/blob_controller_spec.rb": 24.65591298900017,8336 "spec/controllers/sessions_controller_spec.rb": 16.850635811000075,8337 "spec/requests/projects/merge_requests_discussions_spec.rb": 25.23028830499993,8338 "spec/requests/api/protected_branches_spec.rb": 14.999288062000005,8339 "spec/requests/api/group_milestones_spec.rb": 11.151987036000037,8340 "spec/controllers/projects/discussions_controller_spec.rb": 16.000444986000048,8341 "spec/requests/api/unleash_spec.rb": 5.846014466000042,8342 "spec/requests/api/graphql/project/releases_spec.rb": 11.059940310999991,8343 "spec/requests/api/graphql/project/packages_spec.rb": 10.842522390000113,8344 "spec/requests/api/usage_data_queries_spec.rb": 17.76383439799997,8345 "spec/controllers/oauth/applications_controller_spec.rb": 4.182771365000008,8346 "spec/controllers/projects/artifacts_controller_spec.rb": 8.026038655999855,8347 "spec/controllers/projects/mirrors_controller_spec.rb": 10.180588582000155,8348 "spec/controllers/groups/uploads_controller_spec.rb": 7.965550555999926,8349 "spec/controllers/invites_controller_spec.rb": 3.7691696219999358,8350 "spec/requests/api/graphql/metrics/dashboard_query_spec.rb": 7.567240139999967,8351 "spec/requests/api/protected_tags_spec.rb": 10.105203686000095,8352 "spec/requests/api/graphql/mutations/notes/update/note_spec.rb": 7.587959664999971,8353 "spec/requests/api/graphql_spec.rb": 6.880629182000121,8354 "spec/requests/projects/clusters/integrations_controller_spec.rb": 8.631307688000106,8355 "spec/requests/projects/merge_requests/diffs_spec.rb": 9.46493721600018,8356 "spec/controllers/projects/imports_controller_spec.rb": 6.62924160700004,8357 "spec/requests/api/graphql/mutations/container_repository/destroy_spec.rb": 5.5189492829999836,8358 "spec/controllers/groups/settings/ci_cd_controller_spec.rb": 6.20292675099995,8359 "spec/requests/api/group_variables_spec.rb": 4.861642693000022,8360 "spec/controllers/admin/ci/variables_controller_spec.rb": 2.9597133600000234,8361 "spec/requests/api/api_spec.rb": 2.069538828999839,8362 "spec/controllers/projects/tags/releases_controller_spec.rb": 5.358521812999925,8363 "spec/mailers/emails/pipelines_spec.rb": 4.637290297000163,8364 "spec/requests/api/submodules_spec.rb": 2.8014523930000905,8365 "spec/requests/api/graphql/mutations/merge_requests/set_locked_spec.rb": 4.543180007000046,8366 "spec/requests/api/graphql/mutations/merge_requests/set_wip_spec.rb": 4.677788508000049,8367 "spec/controllers/groups/settings/applications_controller_spec.rb": 2.691448670999989,8368 "spec/requests/api/graphql/packages/composer_spec.rb": 2.3850846909999746,8369 "spec/controllers/projects/error_tracking/stack_traces_controller_spec.rb": 2.3415611030000036,8370 "spec/requests/api/graphql/current_user_todos_spec.rb": 2.0027986830000373,8371 "spec/requests/api/graphql/packages/pypi_spec.rb": 3.055496352000091,8372 "spec/requests/api/graphql/mutations/ci/ci_cd_settings_update_spec.rb": 1.8018963789997997,8373 "spec/requests/api/import_bitbucket_server_spec.rb": 2.564663446000168,8374 "spec/requests/api/graphql/project/project_statistics_spec.rb": 2.391993561999925,8375 "spec/controllers/metrics_controller_spec.rb": 0.5936047430000144,8376 "spec/controllers/projects/blame_controller_spec.rb": 2.845365048000076,8377 "spec/requests/api/graphql/milestone_spec.rb": 0.9583792329999596,8378 "spec/requests/api/graphql/mutations/labels/create_spec.rb": 2.651924744000098,8379 "spec/controllers/abuse_reports_controller_spec.rb": 1.3144024220000574,8380 "spec/controllers/projects/pipelines/stages_controller_spec.rb": 2.8622922880001624,8381 "spec/requests/api/graphql/mutations/boards/lists/create_spec.rb": 0.9030803839998498,8382 "spec/requests/api/graphql/project/alert_management/alert/metrics_dashboard_url_spec.rb": 1.112561587999835,8383 "spec/controllers/groups/dependency_proxy_auth_controller_spec.rb": 0.9338149730001533,8384 "spec/requests/api/appearance_spec.rb": 1.147976326999924,8385 "spec/requests/api/bulk_imports_spec.rb": 1.4166821300000265,8386 "spec/requests/api/statistics_spec.rb": 1.995090571999981,8387 "spec/requests/api/graphql/ci/config_spec.rb": 1.706714891000047,8388 "spec/controllers/concerns/checks_collaboration_spec.rb": 2.581688647000192,8389 "spec/requests/api/graphql/snippets_spec.rb": 3.431797202000098,8390 "spec/requests/api/graphql/mutations/todos/restore_many_spec.rb": 1.780053738999868,8391 "spec/controllers/profiles/gpg_keys_controller_spec.rb": 1.1620942570000352,8392 "spec/requests/api/graphql/issue_status_counts_spec.rb": 1.7453859100000955,8393 "spec/requests/api/graphql/project/error_tracking/sentry_detailed_error_request_spec.rb": 1.4027711399999134,8394 "spec/requests/product_analytics/collector_app_attack_spec.rb": 1.7444262999999864,8395 "spec/controllers/projects/environments/sample_metrics_controller_spec.rb": 0.6417697120000412,8396 "spec/controllers/admin/requests_profiles_controller_spec.rb": 0.4734161660001064,8397 "spec/requests/api/graphql/project/alert_management/alert/issue_spec.rb": 1.2283059849999063,8398 "spec/requests/api/graphql/mutations/ci/job_retry_spec.rb": 1.1674017069999536,8399 "spec/requests/api/graphql/mutations/issues/set_locked_spec.rb": 0.732627058999924,8400 "spec/controllers/profiles/keys_controller_spec.rb": 0.31572530200014626,8401 "spec/requests/api/graphql/mutations/ci/pipeline_destroy_spec.rb": 0.6926656609998645,8402 "spec/requests/api/graphql/mutations/todos/create_spec.rb": 0.8553802149999683,8403 "spec/requests/projects/uploads_spec.rb": 0.7170866789999764,8404 "spec/controllers/admin/plan_limits_controller_spec.rb": 0.31688096200014115,8405 "spec/requests/api/geo_spec.rb": 0.2500315730001148,8406 "spec/requests/runner_setup_controller_spec.rb": 0.2852509909998844,8407 "spec/controllers/admin/health_check_controller_spec.rb": 0.50082239599987598408}8409Knapsack global time execution for tests: 20m 40s8410Finished in 20 minutes 43 seconds (files took 57.33 seconds to load)84113397 examples, 0 failures8412Wed 18 Aug 2021 10:51:37 AM UTC8414Not uploading cache ruby-gems-v1-4 due to policy8415Not uploading cache gitaly-ruby-gems-v1-4 due to policy8417Uploading artifacts...8418coverage/: found 5 matching files and directories 8419WARNING: crystalball/: no matching files 8420deprecations/: found 16 matching files and directories 8421knapsack/: found 3 matching files and directories 8422rspec_flaky/: found 4 matching files and directories 8423rspec_profiling/: found 1 matching files and directories 8424WARNING: tmp/capybara/: no matching files 8425tmp/memory_test/: found 2 matching files and directories 8426log/*.log: found 16 matching files and directories 8427Uploading artifacts as "archive" to coordinator... ok id=1512821944 responseStatus=201 Created token=9yLRJWTd8428Uploading artifacts...8429junit_rspec.xml: found 1 matching files and directories 8430Uploading artifacts as "junit" to coordinator... ok id=1512821944 responseStatus=201 Created token=9yLRJWTd8432Job succeeded