rspec integration pg13 12/12
Passed Started
by
@alipniagov

Aleksei Lipniagov
1Running with gitlab-runner 15.9.0~beta.212.g8ccc65e7 (8ccc65e7)2 on green-1.private.runners-manager.gitlab.com/gitlab.com/gitlab-org 4bq1s9yM, system ID: s_9d15f3e4e7ae3 feature flags: FF_NETWORK_PER_BUILD:true, FF_USE_FASTZIP:true, FF_USE_IMPROVED_URL_MASKING:true6Using Docker executor with image registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-16.14-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-109-yarn-1.22-graphicsmagick-1.3.36 ...7Starting service postgres:13 ...8Pulling docker image postgres:13 ...9Using docker image sha256:ab3945c8cf7160ed1381efd47c6a203ba9a84fc7327a17e4a389601eb3738b3b for postgres:13 with digest postgres@sha256:67edfda7deeecfda8e40c9b00818eae76573a9e9466ba7edbc536662d128173b ...10Starting service redis:6.2-alpine ...11Pulling docker image redis:6.2-alpine ...12Using docker image sha256:3616f0c0705d2a35d30dde109daf3cbe58ae7284121aafa6f5cfa987db98d1a8 for redis:6.2-alpine with digest redis@sha256:63e95f069a7ee668f1fcd0b0f8865e473510f98b56e5db4c8517d6cfbd073470 ...13Waiting for services to be up and running (timeout 30 seconds)...14Authenticating with credentials from job payload (GitLab Registry)15Pulling docker image registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-16.14-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-109-yarn-1.22-graphicsmagick-1.3.36 ...16Using docker image sha256:667531aab48d3d73584a6ae24a2aea1de3972ab11b24d34d65740089d1635940 for registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-16.14-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-109-yarn-1.22-graphicsmagick-1.3.36 with digest registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-16.14-postgresql-13@sha256:32a5178f22d0b62740cacea13dc02b6d5a1c9528c0a9af52124abe4455dd0a15 ...18Running on runner-4bq1s9ym-project-278964-concurrent-0 via runner-4bq1s9ym-private-1681303549-365ea44e...20$ eval "$CI_PRE_CLONE_SCRIPT"21Fetching changes with git depth set to 20...22Initialized empty Git repository in /builds/gitlab-org/gitlab/.git/23Created fresh repository.24remote: Enumerating objects: 141454, done. 25remote: Counting objects: 100% (141454/141454), done. 26remote: Compressing objects: 100% (90405/90405), done. 27remote: Total 141454 (delta 62786), reused 98969 (delta 45741), pack-reused 0 28Receiving objects: 100% (141454/141454), 122.89 MiB | 31.49 MiB/s, done.29Resolving deltas: 100% (62786/62786), done.31 * [new ref] refs/pipelines/835170457 -> refs/pipelines/83517045732Checking out aa21306d as detached HEAD (ref is refs/merge-requests/116974/merge)...33Skipping Git submodules setup34$ git remote set-url origin "${CI_REPOSITORY_URL}"36Checking cache for ruby-gems-debian-bullseye-ruby-3.0-16...37Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/278964/ruby-gems-debian-bullseye-ruby-3.0-16 38Successfully extracted cache39Checking cache for gitaly-ruby-gems-debian-bullseye-ruby-3.0-16...40Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/278964/gitaly-ruby-gems-debian-bullseye-ruby-3.0-16 41Successfully extracted cache43Downloading artifacts for compile-test-assets (4101394559)...44Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4101394559 responseStatus=200 OK token=64_kQ1cy45Downloading artifacts for detect-tests (4101394577)...46Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4101394577 responseStatus=200 OK token=64_kQ1cy47Downloading artifacts for retrieve-tests-metadata (4101394581)...48Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4101394581 responseStatus=200 OK token=64_kQ1cy49Downloading artifacts for setup-test-env (4101394571)...50Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4101394571 responseStatus=200 OK token=64_kQ1cy52Using docker image sha256:667531aab48d3d73584a6ae24a2aea1de3972ab11b24d34d65740089d1635940 for registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-16.14-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-109-yarn-1.22-graphicsmagick-1.3.36 with digest registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-16.14-postgresql-13@sha256:32a5178f22d0b62740cacea13dc02b6d5a1c9528c0a9af52124abe4455dd0a15 ...53$ echo $FOSS_ONLY54$ [ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb55$ export GOPATH=$CI_PROJECT_DIR/.go56$ mkdir -p $GOPATH57$ source scripts/utils.sh58$ source scripts/prepare_build.sh711Using decomposed database config (config/database.yml.decomposed-postgresql)712Geo DB won't be set up.713$ setup_db_user_only714CREATE ROLE715GRANT716==> 'setup_db_user_only' succeeded in 0 seconds.717$ bundle exec rake db:drop db:create db:schema:load db:migrate gitlab:db:lock_writes718Dropped database 'gitlabhq_test'719Dropped database 'gitlabhq_test_ci'720Created database 'gitlabhq_test'721Created database 'gitlabhq_test_ci'722main: == [advisory_lock_connection] object_id: 273860, pg_backend_pid: 101723main: == [advisory_lock_connection] object_id: 273860, pg_backend_pid: 101724ci: == [advisory_lock_connection] object_id: 273960, pg_backend_pid: 103725ci: == [advisory_lock_connection] object_id: 273960, pg_backend_pid: 103726==> 'bundle exec rake db:drop db:create db:schema:load db:migrate gitlab:db:lock_writes' succeeded in 51 seconds.727$ setup_db_praefect728SELECT pg_catalog.set_config('search_path', '', false);729CREATE DATABASE praefect_test ENCODING 'UTF8';730==> 'setup_db_praefect' succeeded in 0 seconds.731$ source ./scripts/rspec_helpers.sh732$ run_timed_command "gem install knapsack --no-document"733$ gem install knapsack --no-document734Successfully installed knapsack-4.0.07351 gem installed736==> 'gem install knapsack --no-document' succeeded in 1 seconds.737$ echo -e "\e[0Ksection_start:`date +%s`:gitaly-test-spawn[collapsed=true]\r\e[0KStarting Gitaly"757$ rspec_paralellized_job "--tag ~quarantine --tag ~level:background_migration"758SKIP_FLAKY_TESTS_AUTOMATICALLY: false759RETRY_FAILED_TESTS_IN_NEW_PROCESS: true760KNAPSACK_GENERATE_REPORT: true761FLAKY_RSPEC_GENERATE_REPORT: true762KNAPSACK_TEST_FILE_PATTERN: spec/{commands,controllers,mailers,requests}{,/**/}*_spec.rb763KNAPSACK_LOG_LEVEL: debug764KNAPSACK_REPORT_PATH: knapsack/rspec_integration_pg13_12_12_report.json765FLAKY_RSPEC_SUITE_REPORT_PATH: rspec/flaky/report-suite.json766FLAKY_RSPEC_REPORT_PATH: rspec/flaky/all_rspec_integration_pg13_12_12_report.json767NEW_FLAKY_RSPEC_REPORT_PATH: rspec/flaky/new_rspec_integration_pg13_12_12_report.json768SKIPPED_FLAKY_TESTS_REPORT_PATH: rspec/flaky/skipped_flaky_tests_rspec_integration_pg13_12_12_report.txt769CRYSTALBALL: 770Knapsack node specs:771spec/requests/api/branches_spec.rb772spec/requests/api/discussions_spec.rb773spec/requests/api/pypi_packages_spec.rb774spec/requests/api/composer_packages_spec.rb775spec/requests/api/usage_data_queries_spec.rb776spec/requests/api/files_spec.rb777spec/requests/api/tags_spec.rb778spec/mailers/emails/profile_spec.rb779spec/requests/api/graphql/mutations/notes/create/note_spec.rb780spec/requests/api/terraform/state_version_spec.rb781spec/requests/api/ci/pipeline_schedules_spec.rb782spec/requests/api/award_emoji_spec.rb783spec/requests/api/graphql/mutations/releases/create_spec.rb784spec/requests/api/deploy_keys_spec.rb785spec/controllers/projects/merge_requests/conflicts_controller_spec.rb786spec/controllers/projects/settings/ci_cd_controller_spec.rb787spec/controllers/projects/tags_controller_spec.rb788spec/requests/api/resource_access_tokens_spec.rb789spec/requests/api/graphql/container_repository/container_repository_details_spec.rb790spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb791spec/controllers/groups/releases_controller_spec.rb792spec/requests/api/draft_notes_spec.rb793spec/requests/api/system_hooks_spec.rb794spec/requests/api/topics_spec.rb795spec/requests/api/graphql/packages/conan_spec.rb796spec/requests/api/admin/ci/variables_spec.rb797spec/requests/projects_controller_spec.rb798spec/requests/api/graphql/project/issue/designs/designs_spec.rb799spec/requests/api/graphql/mutations/packages/destroy_files_spec.rb800spec/requests/projects/merge_requests/diffs_spec.rb801spec/requests/api/graphql/project/incident_management/timeline_events_spec.rb802spec/requests/api/graphql/project/merge_request/diff_notes_spec.rb803spec/controllers/projects/registry/tags_controller_spec.rb804spec/requests/api/graphql/packages/composer_spec.rb805spec/controllers/groups/variables_controller_spec.rb806spec/controllers/jira_connect/subscriptions_controller_spec.rb807spec/requests/api/graphql/mutations/merge_requests/reviewer_rereview_spec.rb808spec/controllers/profiles/accounts_controller_spec.rb809spec/controllers/concerns/metrics_dashboard_spec.rb810spec/controllers/groups/shared_projects_controller_spec.rb811spec/requests/projects/merge_requests/content_spec.rb812spec/requests/api/ci/runner/runners_post_spec.rb813spec/requests/api/graphql/mutations/notes/destroy_spec.rb814spec/requests/projects/releases_controller_spec.rb815spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb816spec/requests/api/graphql/ci/job_spec.rb817spec/controllers/projects/environments/prometheus_api_controller_spec.rb818spec/controllers/import/manifest_controller_spec.rb819spec/requests/api/pages/pages_spec.rb820spec/controllers/concerns/page_limiter_spec.rb821spec/requests/api/graphql/project/branch_rules_spec.rb822spec/requests/api/graphql/mutations/jira_import/start_spec.rb823spec/controllers/groups/boards_controller_spec.rb824spec/requests/api/graphql/project/project_statistics_spec.rb825spec/controllers/projects/analytics/cycle_analytics/summary_controller_spec.rb826spec/requests/api/graphql/project/error_tracking/sentry_detailed_error_request_spec.rb827spec/requests/api/graphql/ci/stages_spec.rb828spec/requests/api/graphql/mutations/ci/pipeline_schedule_create_spec.rb829spec/controllers/concerns/kas_cookie_spec.rb830spec/requests/api/graphql/notes/synthetic_note_resolver_spec.rb831spec/requests/api/graphql/ci/job_artifacts_spec.rb832spec/controllers/projects/ci/pipeline_editor_controller_spec.rb833spec/requests/api/graphql/mutations/achievements/update_spec.rb834spec/requests/api/graphql/mutations/notes/reposition_image_diff_note_spec.rb835spec/requests/api/graphql/crm/contacts_spec.rb836spec/requests/api/graphql/project/jira_service_spec.rb837spec/requests/api/project_statistics_spec.rb838spec/controllers/groups/settings/repository_controller_spec.rb839spec/requests/projects/incident_management/timeline_events_spec.rb840spec/requests/api/graphql/mutations/alert_management/alerts/set_assignees_spec.rb841spec/requests/api/graphql/group/recent_issue_boards_query_spec.rb842spec/controllers/oauth/authorized_applications_controller_spec.rb843spec/controllers/concerns/check_rate_limit_spec.rb844spec/controllers/admin/plan_limits_controller_spec.rb845spec/controllers/concerns/continue_params_spec.rb846spec/requests/jira_connect/oauth_callbacks_controller_spec.rb847spec/requests/sandbox_controller_spec.rb848Filter specs:849Running specs:850Running all node tests without filter851spec/requests/api/branches_spec.rb852spec/requests/api/discussions_spec.rb853spec/requests/api/pypi_packages_spec.rb854spec/requests/api/composer_packages_spec.rb855spec/requests/api/usage_data_queries_spec.rb856spec/requests/api/files_spec.rb857spec/requests/api/tags_spec.rb858spec/mailers/emails/profile_spec.rb859spec/requests/api/graphql/mutations/notes/create/note_spec.rb860spec/requests/api/terraform/state_version_spec.rb861spec/requests/api/ci/pipeline_schedules_spec.rb862spec/requests/api/award_emoji_spec.rb863spec/requests/api/graphql/mutations/releases/create_spec.rb864spec/requests/api/deploy_keys_spec.rb865spec/controllers/projects/merge_requests/conflicts_controller_spec.rb866spec/controllers/projects/settings/ci_cd_controller_spec.rb867spec/controllers/projects/tags_controller_spec.rb868spec/requests/api/resource_access_tokens_spec.rb869spec/requests/api/graphql/container_repository/container_repository_details_spec.rb870spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb871spec/controllers/groups/releases_controller_spec.rb872spec/requests/api/draft_notes_spec.rb873spec/requests/api/system_hooks_spec.rb874spec/requests/api/topics_spec.rb875spec/requests/api/graphql/packages/conan_spec.rb876spec/requests/api/admin/ci/variables_spec.rb877spec/requests/projects_controller_spec.rb878spec/requests/api/graphql/project/issue/designs/designs_spec.rb879spec/requests/api/graphql/mutations/packages/destroy_files_spec.rb880spec/requests/projects/merge_requests/diffs_spec.rb881spec/requests/api/graphql/project/incident_management/timeline_events_spec.rb882spec/requests/api/graphql/project/merge_request/diff_notes_spec.rb883spec/controllers/projects/registry/tags_controller_spec.rb884spec/requests/api/graphql/packages/composer_spec.rb885spec/controllers/groups/variables_controller_spec.rb886spec/controllers/jira_connect/subscriptions_controller_spec.rb887spec/requests/api/graphql/mutations/merge_requests/reviewer_rereview_spec.rb888spec/controllers/profiles/accounts_controller_spec.rb889spec/controllers/concerns/metrics_dashboard_spec.rb890spec/controllers/groups/shared_projects_controller_spec.rb891spec/requests/projects/merge_requests/content_spec.rb892spec/requests/api/ci/runner/runners_post_spec.rb893spec/requests/api/graphql/mutations/notes/destroy_spec.rb894spec/requests/projects/releases_controller_spec.rb895spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb896spec/requests/api/graphql/ci/job_spec.rb897spec/controllers/projects/environments/prometheus_api_controller_spec.rb898spec/controllers/import/manifest_controller_spec.rb899spec/requests/api/pages/pages_spec.rb900spec/controllers/concerns/page_limiter_spec.rb901spec/requests/api/graphql/project/branch_rules_spec.rb902spec/requests/api/graphql/mutations/jira_import/start_spec.rb903spec/controllers/groups/boards_controller_spec.rb904spec/requests/api/graphql/project/project_statistics_spec.rb905spec/controllers/projects/analytics/cycle_analytics/summary_controller_spec.rb906spec/requests/api/graphql/project/error_tracking/sentry_detailed_error_request_spec.rb907spec/requests/api/graphql/ci/stages_spec.rb908spec/requests/api/graphql/mutations/ci/pipeline_schedule_create_spec.rb909spec/controllers/concerns/kas_cookie_spec.rb910spec/requests/api/graphql/notes/synthetic_note_resolver_spec.rb911spec/requests/api/graphql/ci/job_artifacts_spec.rb912spec/controllers/projects/ci/pipeline_editor_controller_spec.rb913spec/requests/api/graphql/mutations/achievements/update_spec.rb914spec/requests/api/graphql/mutations/notes/reposition_image_diff_note_spec.rb915spec/requests/api/graphql/crm/contacts_spec.rb916spec/requests/api/graphql/project/jira_service_spec.rb917spec/requests/api/project_statistics_spec.rb918spec/controllers/groups/settings/repository_controller_spec.rb919spec/requests/projects/incident_management/timeline_events_spec.rb920spec/requests/api/graphql/mutations/alert_management/alerts/set_assignees_spec.rb921spec/requests/api/graphql/group/recent_issue_boards_query_spec.rbKnapsack report generator started!922warning: parser/current is loading parser/ruby30, which recognizes 3.0.5-compliant syntax, but you are running 3.0.6.924WARNING: Shared example group 'creating pypi package files' has been previously defined at:925 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb:4926...and you are now defining it at:927 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb:4928The new definition will overwrite the original one.929WARNING: Shared example group 'creating pypi package files' has been previously defined at:930 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb:4931...and you are now defining it at:932 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb:4933The new definition will overwrite the original one.934WARNING: Shared example group 'creating pypi package files' has been previously defined at:935 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb:4936...and you are now defining it at:937 /builds/gitlab-org/gitlab/spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb:4938The new definition will overwrite the original one.939Run options: exclude {:quarantine=>true, :level=>"background_migration"}940Test environment set up in 1.45838277 seconds941API::Branches942 GET /projects/:id/repository/branches943 when search parameter is passed944 and branch exists945 returns correct branches946 and branch does not exist947 returns an empty array948 when sort parameter is passed949 sorts branches950 when sort value is not supported951 behaves like 400 response952 returns 400953 when unauthenticated and project is public954 behaves like repository branches955 with branch_list_keyset_pagination feature off956 with offset pagination params957 returns the repository branches958 determines only a limited number of merged branch names959 merge status matches reality on paginated input960 recovers pagination headers from cache between consecutive requests961 with gitaly pagination params962 merge status matches reality on paginated input963 with branch_list_keyset_pagination feature on964 with keyset pagination option965 with gitaly pagination params966 returns the repository branches967 determines only a limited number of merged branch names968 merge status matches reality on paginated input969 with offset pagination params970 ignores legacy pagination params971 when repository is disabled972 behaves like 404 response973 returns 404974 caching975 caches the query976 uses the cache up to 60 minutes977 requests for new value after 60 minutes978 when unauthenticated and project is private979 behaves like 404 response980 returns 404981 when authenticated as a maintainer982 does not submit N+1 DB queries983 behaves like repository branches984 with branch_list_keyset_pagination feature off985 with offset pagination params986 returns the repository branches987 determines only a limited number of merged branch names988 merge status matches reality on paginated input989 recovers pagination headers from cache between consecutive requests990 with gitaly pagination params991 merge status matches reality on paginated input992 with branch_list_keyset_pagination feature on993 with keyset pagination option994 with gitaly pagination params995 returns the repository branches996 determines only a limited number of merged branch names997 merge status matches reality on paginated input998 with offset pagination params999 ignores legacy pagination params1000 when repository is disabled1001 behaves like 404 response1002 returns 4041003 requesting with the escaped project full path1004 behaves like repository branches1005 with branch_list_keyset_pagination feature off1006 with offset pagination params1007 returns the repository branches1008 determines only a limited number of merged branch names1009 merge status matches reality on paginated input1010 recovers pagination headers from cache between consecutive requests1011 with gitaly pagination params1012 merge status matches reality on paginated input1013 with branch_list_keyset_pagination feature on1014 with keyset pagination option1015 with gitaly pagination params1016 returns the repository branches1017 determines only a limited number of merged branch names1018 merge status matches reality on paginated input1019 with offset pagination params1020 ignores legacy pagination params1021 when repository is disabled1022 behaves like 404 response1023 returns 4041024 when authenticated as a guest1025 behaves like 403 response1026 returns 4031027 GET /projects/:id/repository/branches/:branch1028 when unauthenticated and project is public1029 returns that the current user cannot push1030 behaves like repository branch1031 returns the repository branch1032 HEAD request1033 returns 204 No Content1034 returns 404 Not Found1035 when branch does not exist1036 behaves like 404 response1037 returns 4041038 when the branch refname is invalid1039 behaves like 400 response1040 returns 4001041 when repository is disabled1042 behaves like 404 response1043 returns 4041044 when branch is ambiguous1045 behaves like 404 response1046 returns 4041047 when repository does not exist1048 behaves like 404 response1049 returns 4041050 when unauthenticated and project is private1051 behaves like 404 response1052 returns 4041053 when authenticated as a maintainer1054 returns that the current user can push1055 behaves like repository branch1056 returns the repository branch1057 HEAD request1058 returns 204 No Content1059 returns 404 Not Found1060 when branch does not exist1061 behaves like 404 response1062 returns 4041063 when the branch refname is invalid1064 behaves like 400 response1065 returns 4001066 when repository is disabled1067 behaves like 404 response1068 returns 4041069 when branch is ambiguous1070 behaves like 404 response1071 returns 4041072 when repository does not exist1073 behaves like 404 response1074 returns 4041075 when branch contains a dot1076 behaves like repository branch1077 returns the repository branch1078 HEAD request1079 returns 204 No Content1080 returns 404 Not Found1081 when branch does not exist1082 behaves like 404 response1083 returns 4041084 when the branch refname is invalid1085 behaves like 400 response1086 returns 4001087 when repository is disabled1088 behaves like 404 response1089 returns 4041090 when branch is ambiguous1091 behaves like 404 response1092 returns 4041093 when repository does not exist1094 behaves like 404 response1095 returns 4041096 when branch contains dot txt1097 behaves like repository branch1098 returns the repository branch1099 HEAD request1100 returns 204 No Content1101 returns 404 Not Found1102 when branch does not exist1103 behaves like 404 response1104 returns 4041105 when the branch refname is invalid1106 behaves like 400 response1107 returns 4001108 when repository is disabled1109 behaves like 404 response1110 returns 4041111 when branch is ambiguous1112 behaves like 404 response1113 returns 4041114 when repository does not exist1115 behaves like 404 response1116 returns 4041117 when branch contains a slash1118 behaves like 404 response1119 returns 4041120 when branch contains an escaped slash1121 behaves like repository branch1122 returns the repository branch1123 HEAD request1124 returns 204 No Content1125 returns 404 Not Found1126 when branch does not exist1127 behaves like 404 response1128 returns 4041129 when the branch refname is invalid1130 behaves like 400 response1131 returns 4001132 when repository is disabled1133 behaves like 404 response1134 returns 4041135 when branch is ambiguous1136 behaves like 404 response1137 returns 4041138 when repository does not exist1139 behaves like 404 response1140 returns 4041141 requesting with the escaped project full path1142 behaves like repository branch1143 returns the repository branch1144 HEAD request1145 returns 204 No Content1146 returns 404 Not Found1147 when branch does not exist1148 behaves like 404 response1149 returns 4041150 when the branch refname is invalid1151 behaves like 400 response1152 returns 4001153 when repository is disabled1154 behaves like 404 response1155 returns 4041156 when branch is ambiguous1157 behaves like 404 response1158 returns 4041159 when repository does not exist1160 behaves like 404 response1161 returns 4041162 when branch contains a dot1163 behaves like repository branch1164 returns the repository branch1165 HEAD request1166 returns 204 No Content1167 returns 404 Not Found1168 when branch does not exist1169 behaves like 404 response1170 returns 4041171 when the branch refname is invalid1172 behaves like 400 response1173 returns 4001174 when repository is disabled1175 behaves like 404 response1176 returns 4041177 when branch is ambiguous1178 behaves like 404 response1179 returns 4041180 when repository does not exist1181 behaves like 404 response1182 returns 4041183 when authenticated as a developer and branch is protected1184 returns that the current user cannot push1185 behaves like repository branch1186 returns the repository branch1187 HEAD request1188 returns 204 No Content1189 returns 404 Not Found1190 when branch does not exist1191 behaves like 404 response1192 returns 4041193 when the branch refname is invalid1194 behaves like 400 response1195 returns 4001196 when repository is disabled1197 behaves like 404 response1198 returns 4041199 when branch is ambiguous1200 behaves like 404 response1201 returns 4041202 when repository does not exist1203 behaves like 404 response1204 returns 4041205 when authenticated as a guest1206 behaves like 403 response1207 returns 4031208 PUT /projects/:id/repository/branches/:branch/protect1209 when unauthenticated and project is private1210 behaves like 404 response1211 returns 4041212 when authenticated as a guest1213 behaves like 403 response1214 returns 4031215 when authenticated as a maintainer1216 when a protected branch doesn't already exist1217 behaves like repository new protected branch1218 protects a single branch1219 protects a single branch and developers can push1220 protects a single branch and developers can merge1221 protects a single branch and developers can push and merge1222 when branch does not exist1223 behaves like 404 response1224 returns 4041225 when the branch refname is invalid1226 behaves like 400 response1227 returns 4001228 when repository is disabled1229 behaves like 404 response1230 returns 4041231 when branch contains a dot1232 behaves like repository new protected branch1233 protects a single branch1234 protects a single branch and developers can push1235 protects a single branch and developers can merge1236 protects a single branch and developers can push and merge1237 when branch does not exist1238 behaves like 404 response1239 returns 4041240 when the branch refname is invalid1241 behaves like 400 response1242 returns 4001243 when repository is disabled1244 behaves like 404 response1245 returns 4041246 when branch contains a slash1247 behaves like 404 response1248 returns 4041249 when branch contains an escaped slash1250 behaves like repository new protected branch1251 protects a single branch1252 protects a single branch and developers can push1253 protects a single branch and developers can merge1254 protects a single branch and developers can push and merge1255 when branch does not exist1256 behaves like 404 response1257 returns 4041258 when the branch refname is invalid1259 behaves like 400 response1260 returns 4001261 when repository is disabled1262 behaves like 404 response1263 returns 4041264 requesting with the escaped project full path1265 behaves like repository new protected branch1266 protects a single branch1267 protects a single branch and developers can push1268 protects a single branch and developers can merge1269 protects a single branch and developers can push and merge1270 when branch does not exist1271 behaves like 404 response1272 returns 4041273 when the branch refname is invalid1274 behaves like 400 response1275 returns 4001276 when repository is disabled1277 behaves like 404 response1278 returns 4041279 when branch contains a dot1280 behaves like repository new protected branch1281 protects a single branch1282 protects a single branch and developers can push1283 protects a single branch and developers can merge1284 protects a single branch and developers can push and merge1285 when branch does not exist1286 behaves like 404 response1287 returns 4041288 when the branch refname is invalid1289 behaves like 400 response1290 returns 4001291 when repository is disabled1292 behaves like 404 response1293 returns 4041294 when protected branch already exists1295 when developers can push and merge1296 updates that a developer cannot push or merge1297 when developers cannot push or merge1298 updates that a developer can push and merge1299 PUT /projects/:id/repository/branches/:branch/unprotect1300 when unauthenticated and project is private1301 behaves like 404 response1302 returns 4041303 when authenticated as a guest1304 behaves like 403 response1305 returns 4031306 when authenticated as a maintainer1307 behaves like repository unprotected branch1308 when branch is protected1309 unprotects a single branch1310 when branch is not protected1311 returns a single branch response1312 when branch does not exist1313 behaves like 404 response1314 returns 4041315 when the branch refname is invalid1316 behaves like 400 response1317 returns 4001318 when repository is disabled1319 behaves like 404 response1320 returns 4041321 when branch contains a dot1322 behaves like repository unprotected branch1323 when branch is protected1324 unprotects a single branch1325 when branch is not protected1326 returns a single branch response1327 when branch does not exist1328 behaves like 404 response1329 returns 4041330 when the branch refname is invalid1331 behaves like 400 response1332 returns 4001333 when repository is disabled1334 behaves like 404 response1335 returns 4041336 when branch contains a slash1337 behaves like 404 response1338 returns 4041339 when branch contains an escaped slash1340 behaves like repository unprotected branch1341 when branch is protected1342 unprotects a single branch1343 when branch is not protected1344 returns a single branch response1345 when branch does not exist1346 behaves like 404 response1347 returns 4041348 when the branch refname is invalid1349 behaves like 400 response1350 returns 4001351 when repository is disabled1352 behaves like 404 response1353 returns 4041354 requesting with the escaped project full path1355 behaves like repository unprotected branch1356 when branch is protected1357 unprotects a single branch1358 when branch is not protected1359 returns a single branch response1360 when branch does not exist1361 behaves like 404 response1362 returns 4041363 when the branch refname is invalid1364 behaves like 400 response1365 returns 4001366 when repository is disabled1367 behaves like 404 response1368 returns 4041369 when branch contains a dot1370 behaves like repository unprotected branch1371 when branch is protected1372 unprotects a single branch1373 when branch is not protected1374 returns a single branch response1375 when branch does not exist1376 behaves like 404 response1377 returns 4041378 when the branch refname is invalid1379 behaves like 400 response1380 returns 4001381 when repository is disabled1382 behaves like 404 response1383 returns 4041384 POST /projects/:id/repository/branches1385 returns 400 if branch name is invalid1386 returns 400 if branch already exists1387 returns 400 if ref name is invalid1388 when unauthenticated and project is private1389 behaves like 404 response1390 returns 4041391 when authenticated as a guest1392 behaves like 403 response1393 returns 4031394 when authenticated as a maintainer1395 when a protected branch doesn't already exist1396 behaves like repository new branch1397 creates a new branch1398 when repository is disabled1399 behaves like 404 response1400 returns 4041401 requesting with the escaped project full path1402 behaves like repository new branch1403 creates a new branch1404 when repository is disabled1405 behaves like 404 response1406 returns 4041407 DELETE /projects/:id/repository/branches/:branch1408 removes branch1409 removes a branch with dots in the branch name1410 returns 404 if branch not exists1411 when the branch refname is invalid1412 behaves like 400 response1413 returns 4001414 behaves like 412 response1415 for a modified ressource1416 returns 412 with a JSON error1417 for an unmodified ressource1418 returns 204 with an empty body1419 DELETE /projects/:id/repository/merged_branches1420 returns 202 with json body1421 returns a 403 error if guest1422API::Discussions1423 when discussions have cross-reference system notes1424 behaves like with cross-reference system notes1425 returns only the note that the user should see1426 avoids Git calls and N+1 SQL queries1427 when noteable is an Issue1428 behaves like discussions API1429 GET /projects/:id/issues/:noteable_id/discussions1430 returns an array of discussions1431 returns a 404 error when noteable id not found1432 returns 404 when not authorized1433 GET /projects/:id/issues/:noteable_id/discussions/:discussion_id1434 returns a discussion by id1435 returns a 404 error if discussion not found1436 POST /projects/:id/issues/:noteable_id/discussions1437 creates a new note1438 returns a 400 bad request error if body not given1439 returns a 401 unauthorized error if user not authenticated1440 tracks a Notes::CreateService event1441 when an admin or owner makes the request1442 accepts the creation date to be set1443 when user does not have access to read the discussion1444 responds with 4041445 when a project is public with private repo access1446 when user is not a team member of private repo1447 creating a new note1448 raises 404 error1449 fetching a discussion1450 raises 404 error1451 POST /projects/:id/issues/:noteable_id/discussions/:discussion_id/notes1452 adds a new note to the discussion1453 returns a 400 bad request error if body not given1454 when the discussion is an individual note1455 creates a new discussion1456 PUT /projects/:id/issues/:noteable_id/discussions/:discussion_id/notes/:note_id1457 returns modified note1458 returns a 404 error when note id not found1459 returns a 400 bad request error if body not given1460 DELETE /projects/:id/issues/:noteable_id/discussions/:discussion_id/notes/:note_id1461 deletes a note1462 returns a 404 error when note id not found1463 behaves like 412 response1464 for a modified ressource1465 returns 412 with a JSON error1466 for an unmodified ressource1467 returns 204 with an empty body1468 when noteable is a WorkItem1469 behaves like discussions API1470 GET /projects/:id/issues/:noteable_id/discussions1471 returns an array of discussions1472 returns a 404 error when noteable id not found1473 returns 404 when not authorized1474 GET /projects/:id/issues/:noteable_id/discussions/:discussion_id1475 returns a discussion by id1476 returns a 404 error if discussion not found1477 POST /projects/:id/issues/:noteable_id/discussions1478 creates a new note1479 returns a 400 bad request error if body not given1480 returns a 401 unauthorized error if user not authenticated1481 tracks a Notes::CreateService event1482 when an admin or owner makes the request1483 accepts the creation date to be set1484 when user does not have access to read the discussion1485 responds with 4041486 when a project is public with private repo access1487 when user is not a team member of private repo1488 creating a new note1489 raises 404 error1490 fetching a discussion1491 raises 404 error1492 POST /projects/:id/issues/:noteable_id/discussions/:discussion_id/notes1493 adds a new note to the discussion1494 returns a 400 bad request error if body not given1495 when the discussion is an individual note1496 creates a new discussion1497 PUT /projects/:id/issues/:noteable_id/discussions/:discussion_id/notes/:note_id1498 returns modified note1499 returns a 404 error when note id not found1500 returns a 400 bad request error if body not given1501 DELETE /projects/:id/issues/:noteable_id/discussions/:discussion_id/notes/:note_id1502 deletes a note1503 returns a 404 error when note id not found1504 behaves like 412 response1505 for a modified ressource1506 returns 412 with a JSON error1507 for an unmodified ressource1508 returns 204 with an empty body1509 with work item without notes widget1510 when fetching discussions1511 returns 4041512 when single fetching discussion by discussion_id1513 returns 4041514 when trying to create a new discussion1515 returns 4041516 when trying to create a new comment on a discussion1517 returns 4041518 when trying to update a new comment on a discussion1519 returns 4041520 when deleting a note1521 returns 4041522 when noteable is a Snippet1523 behaves like discussions API1524 GET /projects/:id/snippets/:noteable_id/discussions1525 returns an array of discussions1526 returns a 404 error when noteable id not found1527 returns 404 when not authorized1528 GET /projects/:id/snippets/:noteable_id/discussions/:discussion_id1529 returns a discussion by id1530 returns a 404 error if discussion not found1531 POST /projects/:id/snippets/:noteable_id/discussions1532 creates a new note1533 returns a 400 bad request error if body not given1534 returns a 401 unauthorized error if user not authenticated1535 tracks a Notes::CreateService event1536 when an admin or owner makes the request1537 accepts the creation date to be set1538 when user does not have access to read the discussion1539 responds with 4041540 when a project is public with private repo access1541 when user is not a team member of private repo1542 creating a new note1543 raises 404 error1544 fetching a discussion1545 raises 404 error1546 POST /projects/:id/snippets/:noteable_id/discussions/:discussion_id/notes1547 adds a new note to the discussion1548 returns a 400 bad request error if body not given1549 when the discussion is an individual note1550 returns 400 bad request1551 PUT /projects/:id/snippets/:noteable_id/discussions/:discussion_id/notes/:note_id1552 returns modified note1553 returns a 404 error when note id not found1554 returns a 400 bad request error if body not given1555 DELETE /projects/:id/snippets/:noteable_id/discussions/:discussion_id/notes/:note_id1556 deletes a note1557 returns a 404 error when note id not found1558 behaves like 412 response1559 for a modified ressource1560 returns 412 with a JSON error1561 for an unmodified ressource1562 returns 204 with an empty body1563 when noteable is a Merge Request1564 behaves like discussions API1565 GET /projects/:id/merge_requests/:noteable_id/discussions1566 returns an array of discussions1567 returns a 404 error when noteable id not found1568 returns 404 when not authorized1569 GET /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id1570 returns a discussion by id1571 returns a 404 error if discussion not found1572 POST /projects/:id/merge_requests/:noteable_id/discussions1573 creates a new note1574 returns a 400 bad request error if body not given1575 returns a 401 unauthorized error if user not authenticated1576 tracks a Notes::CreateService event1577 when an admin or owner makes the request1578 accepts the creation date to be set1579 when user does not have access to read the discussion1580 responds with 4041581 when a project is public with private repo access1582 when user is not a team member of private repo1583 creating a new note1584 raises 404 error1585 fetching a discussion1586 raises 404 error1587 POST /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id/notes1588 adds a new note to the discussion1589 returns a 400 bad request error if body not given1590 when the discussion is an individual note1591 creates a new discussion1592 PUT /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id/notes/:note_id1593 returns modified note1594 returns a 404 error when note id not found1595 returns a 400 bad request error if body not given1596 DELETE /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id/notes/:note_id1597 deletes a note1598 returns a 404 error when note id not found1599 behaves like 412 response1600 for a modified ressource1601 returns 412 with a JSON error1602 for an unmodified ressource1603 returns 204 with an empty body1604 behaves like diff discussions API1605 GET /projects/:id/merge_requests/:noteable_id/discussions1606 includes diff discussions1607 GET /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id1608 returns a discussion by id1609 POST /projects/:id/merge_requests/:noteable_id/discussions1610 creates a new diff note1611 when position is invalid1612 returns a 400 bad request error when position is not plausible1613 returns a 400 bad request error when the position is not valid for this discussion1614 POST /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id/notes1615 adds a new note to the diff discussion1616 behaves like resolvable discussions API1617 PUT /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id1618 resolves discussion if resolved is true1619 unresolves discussion if resolved is false1620 returns a 400 bad request error if resolved parameter is not passed1621 returns a 401 unauthorized error if user is not authenticated1622 returns a 403 error if user resolves discussion of someone else1623 when user does not have access to read the discussion1624 responds with 4041625 PUT /projects/:id/merge_requests/:noteable_id/discussions/:discussion_id/notes/:note_id1626 returns resolved note when resolved parameter is true1627 returns a 404 error when note id not found1628 returns a 400 bad request error if neither body nor resolved parameter is given1629 returns a 403 error if user resolves note of someone else1630 when position is for a previous commit on the merge request1631 returns a 400 bad request error because the line_code is old1632 when a commit parameter is given1633 creates the discussion on that commit within the merge request1634 when noteable is a Commit1635 behaves like discussions API1636 GET /projects/:id/repository/commits/:noteable_id/discussions1637 returns an array of discussions1638 returns a 404 error when noteable id not found1639 returns 404 when not authorized1640 GET /projects/:id/repository/commits/:noteable_id/discussions/:discussion_id1641 returns a discussion by id1642 returns a 404 error if discussion not found1643 POST /projects/:id/repository/commits/:noteable_id/discussions1644 creates a new note1645 returns a 400 bad request error if body not given1646 returns a 401 unauthorized error if user not authenticated1647 tracks a Notes::CreateService event1648 when an admin or owner makes the request1649 accepts the creation date to be set1650 when user does not have access to read the discussion1651 responds with 4041652 when a project is public with private repo access1653 when user is not a team member of private repo1654 creating a new note1655 raises 404 error1656 fetching a discussion1657 raises 404 error1658 POST /projects/:id/repository/commits/:noteable_id/discussions/:discussion_id/notes1659 adds a new note to the discussion1660 returns a 400 bad request error if body not given1661 when the discussion is an individual note1662 returns 400 bad request1663 PUT /projects/:id/repository/commits/:noteable_id/discussions/:discussion_id/notes/:note_id1664 returns modified note1665 returns a 404 error when note id not found1666 returns a 400 bad request error if body not given1667 DELETE /projects/:id/repository/commits/:noteable_id/discussions/:discussion_id/notes/:note_id1668 deletes a note1669 returns a 404 error when note id not found1670 behaves like 412 response1671 for a modified ressource1672 returns 412 with a JSON error1673 for an unmodified ressource1674 returns 204 with an empty body1675 behaves like diff discussions API1676 GET /projects/:id/repository/commits/:noteable_id/discussions1677 includes diff discussions1678 GET /projects/:id/repository/commits/:noteable_id/discussions/:discussion_id1679 returns a discussion by id1680 POST /projects/:id/repository/commits/:noteable_id/discussions1681 creates a new diff note1682 when position is invalid1683 returns a 400 bad request error when position is not plausible1684 returns a 400 bad request error when the position is not valid for this discussion1685 POST /projects/:id/repository/commits/:noteable_id/discussions/:discussion_id/notes1686 adds a new note to the diff discussion1687API::PypiPackages1688 simple index API endpoint1689 GET /api/v4/groups/:id/-/packages/pypi/simple1690 behaves like pypi simple index API endpoint1691 with valid project1692 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1693 behaves like PyPI package index1694 for user type developer1695 returns the package index1696 behaves like returning response status1697 returns success1698 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1699 behaves like PyPI package index1700 for user type guest1701 returns the package index1702 behaves like returning response status1703 returns success1704 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1705 behaves like PyPI package index1706 for user type developer1707 returns the package index1708 behaves like returning response status1709 returns success1710 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1711 behaves like PyPI package index1712 for user type guest1713 returns the package index1714 behaves like returning response status1715 returns success1716 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1717 behaves like PyPI package index1718 for user type developer1719 returns the package index1720 behaves like returning response status1721 returns success1722 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1723 behaves like PyPI package index1724 for user type guest1725 returns the package index1726 behaves like returning response status1727 returns success1728 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1729 behaves like PyPI package index1730 for user type developer1731 returns the package index1732 behaves like returning response status1733 returns success1734 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1735 behaves like PyPI package index1736 for user type guest1737 returns the package index1738 behaves like returning response status1739 returns success1740 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1741 behaves like PyPI package index1742 for user type anonymous1743 returns the package index1744 behaves like returning response status1745 returns success1746 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1747 behaves like PyPI package index1748 for user type developer1749 returns the package index1750 behaves like returning response status1751 returns success1752 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden1753 behaves like process PyPI api request1754 for user type guest1755 behaves like returning response status1756 returns forbidden1757 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1758 behaves like process PyPI api request1759 for user type developer1760 behaves like returning response status1761 returns unauthorized1762 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1763 behaves like process PyPI api request1764 for user type guest1765 behaves like returning response status1766 returns unauthorized1767 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found1768 behaves like process PyPI api request1769 for user type developer1770 behaves like returning response status1771 returns not_found1772 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found1773 behaves like process PyPI api request1774 for user type guest1775 behaves like returning response status1776 returns not_found1777 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1778 behaves like process PyPI api request1779 for user type developer1780 behaves like returning response status1781 returns unauthorized1782 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1783 behaves like process PyPI api request1784 for user type guest1785 behaves like returning response status1786 returns unauthorized1787 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1788 behaves like process PyPI api request1789 for user type anonymous1790 behaves like returning response status1791 returns unauthorized1792 behaves like rejects PyPI access with unknown group id1793 with an unknown project1794 behaves like unknown PyPI scope id1795 as anonymous1796 behaves like process PyPI api request1797 for user type anonymous1798 behaves like returning response status1799 returns not_found1800 as authenticated user1801 behaves like process PyPI api request1802 for user type anonymous1803 behaves like returning response status1804 returns not_found1805 deploy tokens1806 behaves like deploy token for package GET requests1807 with deploy token headers1808 valid token1809 behaves like returning response status1810 returns success1811 invalid token1812 behaves like returning response status1813 returns unauthorized1814 with group path as id1815 behaves like deploy token for package GET requests1816 with deploy token headers1817 valid token1818 behaves like returning response status1819 returns success1820 invalid token1821 behaves like returning response status1822 returns unauthorized1823 job token1824 behaves like job token for package GET requests1825 with job token headers1826 valid token1827 behaves like returning response status1828 returns success1829 invalid token1830 behaves like returning response status1831 returns unauthorized1832 invalid user1833 behaves like returning response status1834 returns unauthorized1835 behaves like a pypi user namespace endpoint1836 visibility_level: :public, user_role: :owner, expected_status: :not_found1837 behaves like returning response status1838 returns not_found1839 visibility_level: :private, user_role: :owner, expected_status: :not_found1840 behaves like returning response status1841 returns not_found1842 visibility_level: :public, user_role: :external, expected_status: :not_found1843 behaves like returning response status1844 returns not_found1845 visibility_level: :private, user_role: :external, expected_status: :not_found1846 behaves like returning response status1847 returns not_found1848 visibility_level: :public, user_role: :anonymous, expected_status: :not_found1849 behaves like returning response status1850 returns not_found1851 visibility_level: :private, user_role: :anonymous, expected_status: :not_found1852 behaves like returning response status1853 returns not_found1854 GET /api/v4/projects/:id/packages/pypi/simple1855 behaves like pypi simple index API endpoint1856 with valid project1857 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1858 behaves like PyPI package index1859 for user type developer1860 returns the package index1861 behaves like returning response status1862 returns success1863 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1864 behaves like PyPI package index1865 for user type guest1866 returns the package index1867 behaves like returning response status1868 returns success1869 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1870 behaves like PyPI package index1871 for user type developer1872 returns the package index1873 behaves like returning response status1874 returns success1875 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1876 behaves like PyPI package index1877 for user type guest1878 returns the package index1879 behaves like returning response status1880 returns success1881 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1882 behaves like PyPI package index1883 for user type developer1884 returns the package index1885 behaves like returning response status1886 returns success1887 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1888 behaves like PyPI package index1889 for user type guest1890 returns the package index1891 behaves like returning response status1892 returns success1893 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1894 behaves like PyPI package index1895 for user type developer1896 returns the package index1897 behaves like returning response status1898 returns success1899 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "PyPI package index", expected_status: :success1900 behaves like PyPI package index1901 for user type guest1902 returns the package index1903 behaves like returning response status1904 returns success1905 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1906 behaves like PyPI package index1907 for user type anonymous1908 returns the package index1909 behaves like returning response status1910 returns success1911 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package index", expected_status: :success1912 behaves like PyPI package index1913 for user type developer1914 returns the package index1915 behaves like returning response status1916 returns success1917 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden1918 behaves like process PyPI api request1919 for user type guest1920 behaves like returning response status1921 returns forbidden1922 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1923 behaves like process PyPI api request1924 for user type developer1925 behaves like returning response status1926 returns unauthorized1927 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1928 behaves like process PyPI api request1929 for user type guest1930 behaves like returning response status1931 returns unauthorized1932 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found1933 behaves like process PyPI api request1934 for user type developer1935 behaves like returning response status1936 returns not_found1937 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found1938 behaves like process PyPI api request1939 for user type guest1940 behaves like returning response status1941 returns not_found1942 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1943 behaves like process PyPI api request1944 for user type developer1945 behaves like returning response status1946 returns unauthorized1947 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1948 behaves like process PyPI api request1949 for user type guest1950 behaves like returning response status1951 returns unauthorized1952 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized1953 behaves like process PyPI api request1954 for user type anonymous1955 behaves like returning response status1956 returns unauthorized1957 behaves like rejects PyPI access with unknown project id1958 with an unknown project1959 behaves like unknown PyPI scope id1960 as anonymous1961 behaves like process PyPI api request1962 for user type anonymous1963 behaves like returning response status1964 returns not_found1965 as authenticated user1966 behaves like process PyPI api request1967 for user type anonymous1968 behaves like returning response status1969 returns not_found1970 behaves like deploy token for package GET requests1971 with deploy token headers1972 valid token1973 behaves like returning response status1974 returns success1975 invalid token1976 behaves like returning response status1977 returns unauthorized1978 behaves like job token for package GET requests1979 with job token headers1980 valid token1981 behaves like returning response status1982 returns success1983 invalid token1984 behaves like returning response status1985 returns unauthorized1986 invalid user1987 behaves like returning response status1988 returns unauthorized1989 behaves like allow access for everyone with public package_registry_access_level1990 with private project but public access to package registry1991 as non-member user1992 behaves like returning response status1993 returns success1994 as anonymous1995 behaves like returning response status1996 returns success1997 with project path as id1998 behaves like deploy token for package GET requests1999 with deploy token headers2000 valid token2001 behaves like returning response status2002 returns success2003 invalid token2004 behaves like returning response status2005 returns unauthorized2006 simple package API endpoint2007 GET /api/v4/groups/:id/-/packages/pypi/simple/:package_name2008 behaves like pypi simple API endpoint2009 with valid project2010 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2011 behaves like PyPI package versions2012 for user type developer2013 returns the package listing2014 behaves like returning response status2015 returns success2016 behaves like a package tracking event2017 creates a gitlab tracking event list_package2018 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2019 behaves like PyPI package versions2020 for user type guest2021 returns the package listing2022 behaves like returning response status2023 returns success2024 behaves like a package tracking event2025 creates a gitlab tracking event list_package2026 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2027 behaves like PyPI package versions2028 for user type developer2029 returns the package listing2030 behaves like returning response status2031 returns success2032 behaves like a package tracking event2033 creates a gitlab tracking event list_package2034 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2035 behaves like PyPI package versions2036 for user type guest2037 returns the package listing2038 behaves like returning response status2039 returns success2040 behaves like a package tracking event2041 creates a gitlab tracking event list_package2042 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2043 behaves like PyPI package versions2044 for user type developer2045 returns the package listing2046 behaves like returning response status2047 returns success2048 behaves like a package tracking event2049 creates a gitlab tracking event list_package2050 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2051 behaves like PyPI package versions2052 for user type guest2053 returns the package listing2054 behaves like returning response status2055 returns success2056 behaves like a package tracking event2057 creates a gitlab tracking event list_package2058 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2059 behaves like PyPI package versions2060 for user type developer2061 returns the package listing2062 behaves like returning response status2063 returns success2064 behaves like a package tracking event2065 creates a gitlab tracking event list_package2066 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2067 behaves like PyPI package versions2068 for user type guest2069 returns the package listing2070 behaves like returning response status2071 returns success2072 behaves like a package tracking event2073 creates a gitlab tracking event list_package2074 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2075 behaves like PyPI package versions2076 for user type anonymous2077 returns the package listing2078 behaves like returning response status2079 returns success2080 behaves like a package tracking event2081 creates a gitlab tracking event list_package2082 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2083 behaves like PyPI package versions2084 for user type developer2085 returns the package listing2086 behaves like returning response status2087 returns success2088 behaves like a package tracking event2089 creates a gitlab tracking event list_package2090 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2091 behaves like process PyPI api request2092 for user type guest2093 behaves like returning response status2094 returns forbidden2095 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2096 behaves like process PyPI api request2097 for user type developer2098 behaves like returning response status2099 returns unauthorized2100 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2101 behaves like process PyPI api request2102 for user type guest2103 behaves like returning response status2104 returns unauthorized2105 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2106 behaves like process PyPI api request2107 for user type developer2108 behaves like returning response status2109 returns not_found2110 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2111 behaves like process PyPI api request2112 for user type guest2113 behaves like returning response status2114 returns not_found2115 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2116 behaves like process PyPI api request2117 for user type developer2118 behaves like returning response status2119 returns unauthorized2120 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2121 behaves like process PyPI api request2122 for user type guest2123 behaves like returning response status2124 returns unauthorized2125 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2126 behaves like process PyPI api request2127 for user type anonymous2128 behaves like returning response status2129 returns unauthorized2130 with a normalized package name2131 behaves like PyPI package versions2132 for user type developer2133 returns the package listing2134 behaves like returning response status2135 returns success2136 behaves like a package tracking event2137 creates a gitlab tracking event list_package2138 package request forward2139 forward: true, package_in_project: true, shared_examples_name: "PyPI package versions", expected_status: :success2140 behaves like PyPI package versions2141 for user type reporter2142 returns the package listing2143 behaves like returning response status2144 returns success2145 behaves like a package tracking event2146 creates a gitlab tracking event list_package2147 forward: true, package_in_project: false, shared_examples_name: "process PyPI api request", expected_status: :redirect2148 behaves like process PyPI api request2149 for user type reporter2150 behaves like returning response status2151 returns redirect2152 forward: false, package_in_project: true, shared_examples_name: "PyPI package versions", expected_status: :success2153 behaves like PyPI package versions2154 for user type reporter2155 returns the package listing2156 behaves like returning response status2157 returns success2158 behaves like a package tracking event2159 creates a gitlab tracking event list_package2160 forward: false, package_in_project: false, shared_examples_name: "process PyPI api request", expected_status: :not_found2161 behaves like process PyPI api request2162 for user type reporter2163 behaves like returning response status2164 returns not_found2165 behaves like rejects PyPI access with unknown group id2166 with an unknown project2167 behaves like unknown PyPI scope id2168 as anonymous2169 behaves like process PyPI api request2170 for user type anonymous2171 behaves like returning response status2172 returns not_found2173 as authenticated user2174 behaves like process PyPI api request2175 for user type anonymous2176 behaves like returning response status2177 returns not_found2178 deploy tokens2179 behaves like deploy token for package GET requests2180 with deploy token headers2181 valid token2182 behaves like returning response status2183 returns success2184 invalid token2185 behaves like returning response status2186 returns unauthorized2187 with group path as id2188 behaves like deploy token for package GET requests2189 with deploy token headers2190 valid token2191 behaves like returning response status2192 returns success2193 invalid token2194 behaves like returning response status2195 returns unauthorized2196 job token2197 behaves like job token for package GET requests2198 with job token headers2199 valid token2200 behaves like returning response status2201 returns success2202 invalid token2203 behaves like returning response status2204 returns unauthorized2205 invalid user2206 behaves like returning response status2207 returns unauthorized2208 behaves like a pypi user namespace endpoint2209 visibility_level: :public, user_role: :owner, expected_status: :not_found2210 behaves like returning response status2211 returns not_found2212 visibility_level: :private, user_role: :owner, expected_status: :not_found2213 behaves like returning response status2214 returns not_found2215 visibility_level: :public, user_role: :external, expected_status: :not_found2216 behaves like returning response status2217 returns not_found2218 visibility_level: :private, user_role: :external, expected_status: :not_found2219 behaves like returning response status2220 returns not_found2221 visibility_level: :public, user_role: :anonymous, expected_status: :not_found2222 behaves like returning response status2223 returns not_found2224 visibility_level: :private, user_role: :anonymous, expected_status: :not_found2225 behaves like returning response status2226 returns not_found2227 GET /api/v4/projects/:id/packages/pypi/simple/:package_name2228 behaves like pypi simple API endpoint2229 with valid project2230 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2231 behaves like PyPI package versions2232 for user type developer2233 returns the package listing2234 behaves like returning response status2235 returns success2236 behaves like a package tracking event2237 creates a gitlab tracking event list_package2238 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2239 behaves like PyPI package versions2240 for user type guest2241 returns the package listing2242 behaves like returning response status2243 returns success2244 behaves like a package tracking event2245 creates a gitlab tracking event list_package2246 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2247 behaves like PyPI package versions2248 for user type developer2249 returns the package listing2250 behaves like returning response status2251 returns success2252 behaves like a package tracking event2253 creates a gitlab tracking event list_package2254 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2255 behaves like PyPI package versions2256 for user type guest2257 returns the package listing2258 behaves like returning response status2259 returns success2260 behaves like a package tracking event2261 creates a gitlab tracking event list_package2262 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2263 behaves like PyPI package versions2264 for user type developer2265 returns the package listing2266 behaves like returning response status2267 returns success2268 behaves like a package tracking event2269 creates a gitlab tracking event list_package2270 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2271 behaves like PyPI package versions2272 for user type guest2273 returns the package listing2274 behaves like returning response status2275 returns success2276 behaves like a package tracking event2277 creates a gitlab tracking event list_package2278 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2279 behaves like PyPI package versions2280 for user type developer2281 returns the package listing2282 behaves like returning response status2283 returns success2284 behaves like a package tracking event2285 creates a gitlab tracking event list_package2286 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "PyPI package versions", expected_status: :success2287 behaves like PyPI package versions2288 for user type guest2289 returns the package listing2290 behaves like returning response status2291 returns success2292 behaves like a package tracking event2293 creates a gitlab tracking event list_package2294 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2295 behaves like PyPI package versions2296 for user type anonymous2297 returns the package listing2298 behaves like returning response status2299 returns success2300 behaves like a package tracking event2301 creates a gitlab tracking event list_package2302 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package versions", expected_status: :success2303 behaves like PyPI package versions2304 for user type developer2305 returns the package listing2306 behaves like returning response status2307 returns success2308 behaves like a package tracking event2309 creates a gitlab tracking event list_package2310 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2311 behaves like process PyPI api request2312 for user type guest2313 behaves like returning response status2314 returns forbidden2315 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2316 behaves like process PyPI api request2317 for user type developer2318 behaves like returning response status2319 returns unauthorized2320 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2321 behaves like process PyPI api request2322 for user type guest2323 behaves like returning response status2324 returns unauthorized2325 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2326 behaves like process PyPI api request2327 for user type developer2328 behaves like returning response status2329 returns not_found2330 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2331 behaves like process PyPI api request2332 for user type guest2333 behaves like returning response status2334 returns not_found2335 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2336 behaves like process PyPI api request2337 for user type developer2338 behaves like returning response status2339 returns unauthorized2340 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2341 behaves like process PyPI api request2342 for user type guest2343 behaves like returning response status2344 returns unauthorized2345 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2346 behaves like process PyPI api request2347 for user type anonymous2348 behaves like returning response status2349 returns unauthorized2350 with a normalized package name2351 behaves like PyPI package versions2352 for user type developer2353 returns the package listing2354 behaves like returning response status2355 returns success2356 behaves like a package tracking event2357 creates a gitlab tracking event list_package2358 package request forward2359 forward: true, package_in_project: true, shared_examples_name: "PyPI package versions", expected_status: :success2360 behaves like PyPI package versions2361 for user type reporter2362 returns the package listing2363 behaves like returning response status2364 returns success2365 behaves like a package tracking event2366 creates a gitlab tracking event list_package2367 forward: true, package_in_project: false, shared_examples_name: "process PyPI api request", expected_status: :redirect2368 behaves like process PyPI api request2369 for user type reporter2370 behaves like returning response status2371 returns redirect2372 forward: false, package_in_project: true, shared_examples_name: "PyPI package versions", expected_status: :success2373 behaves like PyPI package versions2374 for user type reporter2375 returns the package listing2376 behaves like returning response status2377 returns success2378 behaves like a package tracking event2379 creates a gitlab tracking event list_package2380 forward: false, package_in_project: false, shared_examples_name: "process PyPI api request", expected_status: :not_found2381 behaves like process PyPI api request2382 for user type reporter2383 behaves like returning response status2384 returns not_found2385 behaves like rejects PyPI access with unknown project id2386 with an unknown project2387 behaves like unknown PyPI scope id2388 as anonymous2389 behaves like process PyPI api request2390 for user type anonymous2391 behaves like returning response status2392 returns not_found2393 as authenticated user2394 behaves like process PyPI api request2395 for user type anonymous2396 behaves like returning response status2397 returns not_found2398 behaves like deploy token for package GET requests2399 with deploy token headers2400 valid token2401 behaves like returning response status2402 returns success2403 invalid token2404 behaves like returning response status2405 returns unauthorized2406 behaves like job token for package GET requests2407 with job token headers2408 valid token2409 behaves like returning response status2410 returns success2411 invalid token2412 behaves like returning response status2413 returns unauthorized2414 invalid user2415 behaves like returning response status2416 returns unauthorized2417 behaves like allow access for everyone with public package_registry_access_level2418 with private project but public access to package registry2419 as non-member user2420 behaves like returning response status2421 returns success2422 as anonymous2423 behaves like returning response status2424 returns success2425 with project path as id2426 behaves like deploy token for package GET requests2427 with deploy token headers2428 valid token2429 behaves like returning response status2430 returns success2431 invalid token2432 behaves like returning response status2433 returns unauthorized2434 POST /api/v4/projects/:id/packages/pypi/authorize2435 with valid project2436 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :success2437 behaves like process PyPI api request2438 for user type developer2439 behaves like returning response status2440 returns success2441 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2442 behaves like process PyPI api request2443 for user type guest2444 behaves like returning response status2445 returns forbidden2446 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2447 behaves like process PyPI api request2448 for user type developer2449 behaves like returning response status2450 returns unauthorized2451 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2452 behaves like process PyPI api request2453 for user type guest2454 behaves like returning response status2455 returns unauthorized2456 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2457 behaves like process PyPI api request2458 for user type developer2459 behaves like returning response status2460 returns forbidden2461 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2462 behaves like process PyPI api request2463 for user type guest2464 behaves like returning response status2465 returns forbidden2466 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2467 behaves like process PyPI api request2468 for user type developer2469 behaves like returning response status2470 returns unauthorized2471 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2472 behaves like process PyPI api request2473 for user type guest2474 behaves like returning response status2475 returns unauthorized2476 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2477 behaves like process PyPI api request2478 for user type anonymous2479 behaves like returning response status2480 returns unauthorized2481 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :success2482 behaves like process PyPI api request2483 for user type developer2484 behaves like returning response status2485 returns success2486 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2487 behaves like process PyPI api request2488 for user type guest2489 behaves like returning response status2490 returns forbidden2491 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2492 behaves like process PyPI api request2493 for user type developer2494 behaves like returning response status2495 returns unauthorized2496 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2497 behaves like process PyPI api request2498 for user type guest2499 behaves like returning response status2500 returns unauthorized2501 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2502 behaves like process PyPI api request2503 for user type developer2504 behaves like returning response status2505 returns not_found2506 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2507 behaves like process PyPI api request2508 for user type guest2509 behaves like returning response status2510 returns not_found2511 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2512 behaves like process PyPI api request2513 for user type developer2514 behaves like returning response status2515 returns unauthorized2516 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2517 behaves like process PyPI api request2518 for user type guest2519 behaves like returning response status2520 returns unauthorized2521 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2522 behaves like process PyPI api request2523 for user type anonymous2524 behaves like returning response status2525 returns unauthorized2526 behaves like deploy token for package uploads2527 with deploy token headers2528 valid token2529 behaves like returning response status2530 returns success2531 invalid token2532 behaves like returning response status2533 returns unauthorized2534 behaves like job token for package uploads2535 with job token headers2536 valid token2537 behaves like returning response status2538 returns success2539 invalid token2540 behaves like returning response status2541 returns unauthorized2542 invalid user2543 behaves like returning response status2544 returns unauthorized2545 behaves like rejects PyPI access with unknown project id2546 with an unknown project2547 behaves like unknown PyPI scope id2548 as anonymous2549 behaves like process PyPI api request2550 for user type anonymous2551 behaves like returning response status2552 returns not_found2553 as authenticated user2554 behaves like process PyPI api request2555 for user type anonymous2556 behaves like returning response status2557 returns not_found2558 POST /api/v4/projects/:id/packages/pypi2559 with valid project2560 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package creation", expected_status: :created2561 behaves like PyPI package creation2562 for user type developer2563 behaves like creating pypi package files2564 creates package files2565 with a pre-existing file2566 rejects the duplicated file2567 with object storage disabled2568 without a file from workhorse2569 behaves like returning response status2570 returns bad_request2571 with correct params2572 behaves like package workhorse uploads2573 without a workhorse header2574 logs an error2575 behaves like returning response status2576 returns forbidden2577 behaves like creating pypi package files2578 creates package files2579 behaves like a package tracking event2580 creates a gitlab tracking event push_package2581 with object storage enabled2582 and direct upload enabled2583 behaves like creating pypi package files2584 creates package files2585 with invalid remote_id: 1231232586 behaves like returning response status2587 returns forbidden2588 with invalid remote_id: ../../1231232589 behaves like returning response status2590 returns forbidden2591 and direct upload disabled2592 behaves like creating pypi package files2593 creates package files2594 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2595 behaves like process PyPI api request2596 for user type guest2597 behaves like returning response status2598 returns forbidden2599 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2600 behaves like process PyPI api request2601 for user type developer2602 behaves like returning response status2603 returns unauthorized2604 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2605 behaves like process PyPI api request2606 for user type guest2607 behaves like returning response status2608 returns unauthorized2609 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2610 behaves like process PyPI api request2611 for user type developer2612 behaves like returning response status2613 returns forbidden2614 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2615 behaves like process PyPI api request2616 for user type guest2617 behaves like returning response status2618 returns forbidden2619 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2620 behaves like process PyPI api request2621 for user type developer2622 behaves like returning response status2623 returns unauthorized2624 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2625 behaves like process PyPI api request2626 for user type guest2627 behaves like returning response status2628 returns unauthorized2629 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2630 behaves like process PyPI api request2631 for user type anonymous2632 behaves like returning response status2633 returns unauthorized2634 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :created2635 behaves like process PyPI api request2636 for user type developer2637 behaves like returning response status2638 returns created2639 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :forbidden2640 behaves like process PyPI api request2641 for user type guest2642 behaves like returning response status2643 returns forbidden2644 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2645 behaves like process PyPI api request2646 for user type developer2647 behaves like returning response status2648 returns unauthorized2649 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2650 behaves like process PyPI api request2651 for user type guest2652 behaves like returning response status2653 returns unauthorized2654 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2655 behaves like process PyPI api request2656 for user type developer2657 behaves like returning response status2658 returns not_found2659 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :not_found2660 behaves like process PyPI api request2661 for user type guest2662 behaves like returning response status2663 returns not_found2664 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2665 behaves like process PyPI api request2666 for user type developer2667 behaves like returning response status2668 returns unauthorized2669 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2670 behaves like process PyPI api request2671 for user type guest2672 behaves like returning response status2673 returns unauthorized2674 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process PyPI api request", expected_status: :unauthorized2675 behaves like process PyPI api request2676 for user type anonymous2677 behaves like returning response status2678 returns unauthorized2679 without requires_python2680 behaves like PyPI package creation2681 for user type developer2682 behaves like creating pypi package files2683 creates package files2684 with a pre-existing file2685 rejects the duplicated file2686 with object storage disabled2687 without a file from workhorse2688 behaves like returning response status2689 returns bad_request2690 with correct params2691 behaves like package workhorse uploads2692 without a workhorse header2693 logs an error2694 behaves like returning response status2695 returns forbidden2696 behaves like creating pypi package files2697 creates package files2698 behaves like a package tracking event2699 creates a gitlab tracking event push_package2700 with object storage enabled2701 and direct upload enabled2702 behaves like creating pypi package files2703 creates package files2704 with invalid remote_id: 1231232705 behaves like returning response status2706 returns forbidden2707 with invalid remote_id: ../../1231232708 behaves like returning response status2709 returns forbidden2710 and direct upload disabled2711 behaves like creating pypi package files2712 creates package files2713 with FIPS mode2714 behaves like PyPI package creation2715 for user type developer2716 behaves like creating pypi package files2717 creates package files2718 with a pre-existing file2719 rejects the duplicated file2720 with object storage disabled2721 without a file from workhorse2722 behaves like returning response status2723 returns bad_request2724 with correct params2725 behaves like package workhorse uploads2726 without a workhorse header2727 logs an error2728 behaves like returning response status2729 returns forbidden2730 behaves like creating pypi package files2731 creates package files2732 behaves like a package tracking event2733 creates a gitlab tracking event push_package2734 with object storage enabled2735 and direct upload enabled2736 behaves like creating pypi package files2737 creates package files2738 with invalid remote_id: 1231232739 behaves like returning response status2740 returns forbidden2741 with invalid remote_id: ../../1231232742 behaves like returning response status2743 returns forbidden2744 and direct upload disabled2745 behaves like creating pypi package files2746 creates package files2747 without sha256_digest2748 behaves like PyPI package creation2749 for user type developer2750 behaves like creating pypi package files2751 creates package files2752 with a pre-existing file2753 rejects the duplicated file2754 with object storage disabled2755 without a file from workhorse2756 behaves like returning response status2757 returns bad_request2758 with correct params2759 behaves like package workhorse uploads2760 without a workhorse header2761 logs an error2762 behaves like returning response status2763 returns forbidden2764 behaves like creating pypi package files2765 creates package files2766 behaves like a package tracking event2767 creates a gitlab tracking event push_package2768 with object storage enabled2769 and direct upload enabled2770 behaves like creating pypi package files2771 creates package files2772 with invalid remote_id: 1231232773 behaves like returning response status2774 returns forbidden2775 with invalid remote_id: ../../1231232776 behaves like returning response status2777 returns forbidden2778 and direct upload disabled2779 behaves like creating pypi package files2780 creates package files2781 with FIPS mode2782 returns 422 and does not create a package2783 with required_python too big2784 behaves like process PyPI api request2785 for user type developer2786 behaves like returning response status2787 returns bad_request2788 with an invalid package2789 behaves like returning response status2790 returns bad_request2791 with an invalid sha2562792 behaves like returning response status2793 returns bad_request2794 behaves like deploy token for package uploads2795 with deploy token headers2796 valid token2797 behaves like returning response status2798 returns success2799 invalid token2800 behaves like returning response status2801 returns unauthorized2802 behaves like job token for package uploads2803 with job token headers2804 valid token2805 creates a package with build info2806 behaves like returning response status2807 returns success2808 invalid token2809 behaves like returning response status2810 returns unauthorized2811 invalid user2812 behaves like returning response status2813 returns unauthorized2814 behaves like rejects PyPI access with unknown project id2815 with an unknown project2816 behaves like unknown PyPI scope id2817 as anonymous2818 behaves like process PyPI api request2819 for user type anonymous2820 behaves like returning response status2821 returns not_found2822 as authenticated user2823 behaves like process PyPI api request2824 for user type anonymous2825 behaves like returning response status2826 returns not_found2827 file size above maximum limit2828 behaves like returning response status2829 returns bad_request2830 with existing package2831 does not create a new package2832 marked as pending_destruction2833 does create a new package2834 file download endpoint2835 GET /api/v4/groups/:id/-/packages/pypi/files/:sha256/*file_identifier2836 behaves like pypi file download endpoint2837 with valid project2838 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success2839 behaves like PyPI package download2840 for user type developer2841 returns the package listing2842 behaves like returning response status2843 returns success2844 behaves like a package tracking event2845 creates a gitlab tracking event pull_package2846 behaves like bumping the package last downloaded at field2847 bumps last_downloaded_at2848 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success2849 behaves like PyPI package download2850 for user type guest2851 returns the package listing2852 behaves like returning response status2853 returns success2854 behaves like a package tracking event2855 creates a gitlab tracking event pull_package2856 behaves like bumping the package last downloaded at field2857 bumps last_downloaded_at2858 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success2859 behaves like PyPI package download2860 for user type developer2861 returns the package listing2862 behaves like returning response status2863 returns success2864 behaves like a package tracking event2865 creates a gitlab tracking event pull_package2866 behaves like bumping the package last downloaded at field2867 bumps last_downloaded_at2868 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success2869 behaves like PyPI package download2870 for user type guest2871 returns the package listing2872 behaves like returning response status2873 returns success2874 behaves like a package tracking event2875 creates a gitlab tracking event pull_package2876 behaves like bumping the package last downloaded at field2877 bumps last_downloaded_at2878 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success2879 behaves like PyPI package download2880 for user type developer2881 returns the package listing2882 behaves like returning response status2883 returns success2884 behaves like a package tracking event2885 creates a gitlab tracking event pull_package2886 behaves like bumping the package last downloaded at field2887 bumps last_downloaded_at2888 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success2889 behaves like PyPI package download2890 for user type guest2891 returns the package listing2892 behaves like returning response status2893 returns success2894 behaves like a package tracking event2895 creates a gitlab tracking event pull_package2896 behaves like bumping the package last downloaded at field2897 bumps last_downloaded_at2898 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success2899 behaves like PyPI package download2900 for user type developer2901 returns the package listing2902 behaves like returning response status2903 returns success2904 behaves like a package tracking event2905 creates a gitlab tracking event pull_package2906 behaves like bumping the package last downloaded at field2907 bumps last_downloaded_at2908 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success2909 behaves like PyPI package download2910 for user type guest2911 returns the package listing2912 behaves like returning response status2913 returns success2914 behaves like a package tracking event2915 creates a gitlab tracking event pull_package2916 behaves like bumping the package last downloaded at field2917 bumps last_downloaded_at2918 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success2919 behaves like PyPI package download2920 for user type anonymous2921 returns the package listing2922 behaves like returning response status2923 returns success2924 behaves like a package tracking event2925 creates a gitlab tracking event pull_package2926 behaves like bumping the package last downloaded at field2927 bumps last_downloaded_at2928 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success2929 behaves like PyPI package download2930 for user type developer2931 returns the package listing2932 behaves like returning response status2933 returns success2934 behaves like a package tracking event2935 creates a gitlab tracking event pull_package2936 behaves like bumping the package last downloaded at field2937 bumps last_downloaded_at2938 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "rejected package download", expected_status: :forbidden2939 behaves like rejected package download2940 for user type guest2941 behaves like returning response status2942 returns forbidden2943 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized2944 behaves like rejected package download2945 for user type developer2946 behaves like returning response status2947 returns unauthorized2948 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized2949 behaves like rejected package download2950 for user type guest2951 behaves like returning response status2952 returns unauthorized2953 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "rejected package download", expected_status: :not_found2954 behaves like rejected package download2955 for user type developer2956 behaves like returning response status2957 returns not_found2958 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "rejected package download", expected_status: :not_found2959 behaves like rejected package download2960 for user type guest2961 behaves like returning response status2962 returns not_found2963 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized2964 behaves like rejected package download2965 for user type developer2966 behaves like returning response status2967 returns unauthorized2968 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized2969 behaves like rejected package download2970 for user type guest2971 behaves like returning response status2972 returns unauthorized2973 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "rejected package download", expected_status: :unauthorized2974 behaves like rejected package download2975 for user type anonymous2976 behaves like returning response status2977 returns unauthorized2978 with deploy token headers2979 valid token2980 behaves like returning response status2981 returns success2982 invalid token2983 behaves like returning response status2984 returns success2985 with job token headers2986 valid token2987 behaves like returning response status2988 returns success2989 invalid token2990 behaves like returning response status2991 returns unauthorized2992 invalid user2993 behaves like returning response status2994 returns success2995 behaves like rejects PyPI access with unknown group id2996 with an unknown project2997 behaves like unknown PyPI scope id2998 as anonymous2999 behaves like process PyPI api request3000 for user type anonymous3001 behaves like returning response status3002 returns not_found3003 as authenticated user3004 behaves like process PyPI api request3005 for user type anonymous3006 behaves like returning response status3007 returns not_found3008 behaves like a pypi user namespace endpoint3009 visibility_level: :public, user_role: :owner, expected_status: :not_found3010 behaves like returning response status3011 returns not_found3012 visibility_level: :private, user_role: :owner, expected_status: :not_found3013 behaves like returning response status3014 returns not_found3015 visibility_level: :public, user_role: :external, expected_status: :not_found3016 behaves like returning response status3017 returns not_found3018 visibility_level: :private, user_role: :external, expected_status: :not_found3019 behaves like returning response status3020 returns not_found3021 visibility_level: :public, user_role: :anonymous, expected_status: :not_found3022 behaves like returning response status3023 returns not_found3024 visibility_level: :private, user_role: :anonymous, expected_status: :not_found3025 behaves like returning response status3026 returns not_found3027 GET /api/v4/projects/:id/packages/pypi/files/:sha256/*file_identifier3028 behaves like pypi file download endpoint3029 with valid project3030 visibility_level: :public, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success3031 behaves like PyPI package download3032 for user type developer3033 returns the package listing3034 behaves like returning response status3035 returns success3036 behaves like a package tracking event3037 creates a gitlab tracking event pull_package3038 behaves like bumping the package last downloaded at field3039 bumps last_downloaded_at3040 visibility_level: :public, user_role: :guest, member: true, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success3041 behaves like PyPI package download3042 for user type guest3043 returns the package listing3044 behaves like returning response status3045 returns success3046 behaves like a package tracking event3047 creates a gitlab tracking event pull_package3048 behaves like bumping the package last downloaded at field3049 bumps last_downloaded_at3050 visibility_level: :public, user_role: :developer, member: true, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success3051 behaves like PyPI package download3052 for user type developer3053 returns the package listing3054 behaves like returning response status3055 returns success3056 behaves like a package tracking event3057 creates a gitlab tracking event pull_package3058 behaves like bumping the package last downloaded at field3059 bumps last_downloaded_at3060 visibility_level: :public, user_role: :guest, member: true, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success3061 behaves like PyPI package download3062 for user type guest3063 returns the package listing3064 behaves like returning response status3065 returns success3066 behaves like a package tracking event3067 creates a gitlab tracking event pull_package3068 behaves like bumping the package last downloaded at field3069 bumps last_downloaded_at3070 visibility_level: :public, user_role: :developer, member: false, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success3071 behaves like PyPI package download3072 for user type developer3073 returns the package listing3074 behaves like returning response status3075 returns success3076 behaves like a package tracking event3077 creates a gitlab tracking event pull_package3078 behaves like bumping the package last downloaded at field3079 bumps last_downloaded_at3080 visibility_level: :public, user_role: :guest, member: false, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success3081 behaves like PyPI package download3082 for user type guest3083 returns the package listing3084 behaves like returning response status3085 returns success3086 behaves like a package tracking event3087 creates a gitlab tracking event pull_package3088 behaves like bumping the package last downloaded at field3089 bumps last_downloaded_at3090 visibility_level: :public, user_role: :developer, member: false, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success3091 behaves like PyPI package download3092 for user type developer3093 returns the package listing3094 behaves like returning response status3095 returns success3096 behaves like a package tracking event3097 creates a gitlab tracking event pull_package3098 behaves like bumping the package last downloaded at field3099 bumps last_downloaded_at3100 visibility_level: :public, user_role: :guest, member: false, user_token: false, shared_examples_name: "PyPI package download", expected_status: :success3101 behaves like PyPI package download3102 for user type guest3103 returns the package listing3104 behaves like returning response status3105 returns success3106 behaves like a package tracking event3107 creates a gitlab tracking event pull_package3108 behaves like bumping the package last downloaded at field3109 bumps last_downloaded_at3110 visibility_level: :public, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success3111 behaves like PyPI package download3112 for user type anonymous3113 returns the package listing3114 behaves like returning response status3115 returns success3116 behaves like a package tracking event3117 creates a gitlab tracking event pull_package3118 behaves like bumping the package last downloaded at field3119 bumps last_downloaded_at3120 visibility_level: :private, user_role: :developer, member: true, user_token: true, shared_examples_name: "PyPI package download", expected_status: :success3121 behaves like PyPI package download3122 for user type developer3123 returns the package listing3124 behaves like returning response status3125 returns success3126 behaves like a package tracking event3127 creates a gitlab tracking event pull_package3128 behaves like bumping the package last downloaded at field3129 bumps last_downloaded_at3130 visibility_level: :private, user_role: :guest, member: true, user_token: true, shared_examples_name: "rejected package download", expected_status: :forbidden3131 behaves like rejected package download3132 for user type guest3133 behaves like returning response status3134 returns forbidden3135 visibility_level: :private, user_role: :developer, member: true, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized3136 behaves like rejected package download3137 for user type developer3138 behaves like returning response status3139 returns unauthorized3140 visibility_level: :private, user_role: :guest, member: true, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized3141 behaves like rejected package download3142 for user type guest3143 behaves like returning response status3144 returns unauthorized3145 visibility_level: :private, user_role: :developer, member: false, user_token: true, shared_examples_name: "rejected package download", expected_status: :not_found3146 behaves like rejected package download3147 for user type developer3148 behaves like returning response status3149 returns not_found3150 visibility_level: :private, user_role: :guest, member: false, user_token: true, shared_examples_name: "rejected package download", expected_status: :not_found3151 behaves like rejected package download3152 for user type guest3153 behaves like returning response status3154 returns not_found3155 visibility_level: :private, user_role: :developer, member: false, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized3156 behaves like rejected package download3157 for user type developer3158 behaves like returning response status3159 returns unauthorized3160 visibility_level: :private, user_role: :guest, member: false, user_token: false, shared_examples_name: "rejected package download", expected_status: :unauthorized3161 behaves like rejected package download3162 for user type guest3163 behaves like returning response status3164 returns unauthorized3165 visibility_level: :private, user_role: :anonymous, member: false, user_token: true, shared_examples_name: "rejected package download", expected_status: :unauthorized3166 behaves like rejected package download3167 for user type anonymous3168 behaves like returning response status3169 returns unauthorized3170 with deploy token headers3171 valid token3172 behaves like returning response status3173 returns success3174 invalid token3175 behaves like returning response status3176 returns success3177 with job token headers3178 valid token3179 behaves like returning response status3180 returns success3181 invalid token3182 behaves like returning response status3183 returns unauthorized3184 invalid user3185 behaves like returning response status3186 returns success3187 behaves like rejects PyPI access with unknown project id3188 with an unknown project3189 behaves like unknown PyPI scope id3190 as anonymous3191 behaves like process PyPI api request3192 for user type anonymous3193 behaves like returning response status3194 returns not_found3195 as authenticated user3196 behaves like process PyPI api request3197 for user type anonymous3198 behaves like returning response status3199 returns not_found3200 behaves like allow access for everyone with public package_registry_access_level3201 with private project but public access to package registry3202 as non-member user3203 behaves like returning response status3204 returns success3205 as anonymous3206 behaves like returning response status3207 returns success3208API::ComposerPackages3209 GET /api/v4/group/:id/-/packages/composer/packages3210 with valid project3211 with a public group3212 with basic auth3213 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, include_package: :include_package3214 behaves like Composer package index3215 behaves like Composer package index with version3216 returns the package index3217 with version 23218 behaves like Composer package index with version3219 returns the package index3220 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, include_package: :include_package3221 behaves like Composer package index3222 behaves like Composer package index with version3223 returns the package index3224 with version 23225 behaves like Composer package index with version3226 returns the package index3227 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, include_package: :include_package3228 behaves like Composer package index3229 behaves like Composer package index with version3230 returns the package index3231 with version 23232 behaves like Composer package index with version3233 returns the package index3234 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, include_package: :include_package3235 behaves like Composer package index3236 behaves like Composer package index with version3237 returns the package index3238 with version 23239 behaves like Composer package index with version3240 returns the package index3241 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, include_package: :include_package3242 behaves like Composer package index3243 behaves like Composer package index with version3244 returns the package index3245 with version 23246 behaves like Composer package index with version3247 returns the package index3248 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, include_package: :include_package3249 behaves like Composer package index3250 behaves like Composer package index with version3251 returns the package index3252 with version 23253 behaves like Composer package index with version3254 returns the package index3255 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, include_package: :does_not_include_package3256 behaves like Composer package index3257 behaves like Composer package index with version3258 returns the package index3259 with version 23260 behaves like Composer package index with version3261 returns the package index3262 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, include_package: :does_not_include_package3263 behaves like Composer package index3264 behaves like Composer package index with version3265 returns the package index3266 with version 23267 behaves like Composer package index with version3268 returns the package index3269 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, include_package: :does_not_include_package3270 behaves like Composer package index3271 behaves like Composer package index with version3272 returns the package index3273 with version 23274 behaves like Composer package index with version3275 returns the package index3276 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, include_package: :does_not_include_package3277 behaves like Composer package index3278 behaves like Composer package index with version3279 returns the package index3280 with version 23281 behaves like Composer package index with version3282 returns the package index3283 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, include_package: :does_not_include_package3284 behaves like Composer package index3285 behaves like Composer package index with version3286 returns the package index3287 with version 23288 behaves like Composer package index with version3289 returns the package index3290 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, include_package: :does_not_include_package3291 behaves like Composer package index3292 behaves like Composer package index with version3293 returns the package index3294 with version 23295 behaves like Composer package index with version3296 returns the package index3297 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, include_package: :does_not_include_package3298 behaves like Composer package index3299 behaves like Composer package index with version3300 returns the package index3301 with version 23302 behaves like Composer package index with version3303 returns the package index3304 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, include_package: :does_not_include_package3305 behaves like Composer package index3306 behaves like Composer package index with version3307 returns the package index3308 with version 23309 behaves like Composer package index with version3310 returns the package index3311 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, include_package: :include_package3312 behaves like Composer package index3313 behaves like Composer package index with version3314 returns the package index3315 with version 23316 behaves like Composer package index with version3317 returns the package index3318 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, include_package: :include_package3319 behaves like Composer package index3320 behaves like Composer package index with version3321 returns the package index3322 with version 23323 behaves like Composer package index with version3324 returns the package index3325 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, include_package: :include_package3326 behaves like Composer package index3327 behaves like Composer package index with version3328 returns the package index3329 with version 23330 behaves like Composer package index with version3331 returns the package index3332 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, include_package: :include_package3333 behaves like Composer package index3334 behaves like Composer package index with version3335 returns the package index3336 with version 23337 behaves like Composer package index with version3338 returns the package index3339 with private token header auth3340 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, expected_status: :success, include_package: :include_package3341 behaves like Composer package index3342 behaves like Composer package index with version3343 returns the package index3344 with version 23345 behaves like Composer package index with version3346 returns the package index3347 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, expected_status: :success, include_package: :include_package3348 behaves like Composer package index3349 behaves like Composer package index with version3350 returns the package index3351 with version 23352 behaves like Composer package index with version3353 returns the package index3354 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, expected_status: :success, include_package: :include_package3355 behaves like Composer package index3356 behaves like Composer package index with version3357 returns the package index3358 with version 23359 behaves like Composer package index with version3360 returns the package index3361 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, expected_status: :success, include_package: :include_package3362 behaves like Composer package index3363 behaves like Composer package index with version3364 returns the package index3365 with version 23366 behaves like Composer package index with version3367 returns the package index3368 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, expected_status: :success, include_package: :include_package3369 behaves like Composer package index3370 behaves like Composer package index with version3371 returns the package index3372 with version 23373 behaves like Composer package index with version3374 returns the package index3375 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, expected_status: :success, include_package: :include_package3376 behaves like Composer package index3377 behaves like Composer package index with version3378 returns the package index3379 with version 23380 behaves like Composer package index with version3381 returns the package index3382 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, expected_status: :success, include_package: :does_not_include_package3383 behaves like Composer package index3384 behaves like Composer package index with version3385 returns the package index3386 with version 23387 behaves like Composer package index with version3388 returns the package index3389 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, expected_status: :success, include_package: :does_not_include_package3390 behaves like Composer package index3391 behaves like Composer package index with version3392 returns the package index3393 with version 23394 behaves like Composer package index with version3395 returns the package index3396 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, expected_status: :success, include_package: :does_not_include_package3397 behaves like Composer package index3398 behaves like Composer package index with version3399 returns the package index3400 with version 23401 behaves like Composer package index with version3402 returns the package index3403 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, expected_status: :success, include_package: :does_not_include_package3404 behaves like Composer package index3405 behaves like Composer package index with version3406 returns the package index3407 with version 23408 behaves like Composer package index with version3409 returns the package index3410 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, include_package: nil3411 behaves like Composer package index3412 behaves like Composer package index with version3413 returns the package index3414 with version 23415 behaves like Composer package index with version3416 returns the package index3417 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, include_package: nil3418 behaves like Composer package index3419 behaves like Composer package index with version3420 returns the package index3421 with version 23422 behaves like Composer package index with version3423 returns the package index3424 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, include_package: nil3425 behaves like Composer package index3426 behaves like Composer package index with version3427 returns the package index3428 with version 23429 behaves like Composer package index with version3430 returns the package index3431 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, include_package: nil3432 behaves like Composer package index3433 behaves like Composer package index with version3434 returns the package index3435 with version 23436 behaves like Composer package index with version3437 returns the package index3438 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, expected_status: :unauthorized, include_package: nil3439 behaves like Composer package index3440 behaves like Composer package index with version3441 returns the package index3442 with version 23443 behaves like Composer package index with version3444 returns the package index3445 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, expected_status: :unauthorized, include_package: nil3446 behaves like Composer package index3447 behaves like Composer package index with version3448 returns the package index3449 with version 23450 behaves like Composer package index with version3451 returns the package index3452 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, expected_status: :unauthorized, include_package: nil3453 behaves like Composer package index3454 behaves like Composer package index with version3455 returns the package index3456 with version 23457 behaves like Composer package index with version3458 returns the package index3459 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, expected_status: :unauthorized, include_package: nil3460 behaves like Composer package index3461 behaves like Composer package index with version3462 returns the package index3463 with version 23464 behaves like Composer package index with version3465 returns the package index3466 with a private group3467 behaves like Composer access with deploy tokens3468 group deploy token3469 behaves like a deploy token for Composer GET requests3470 with deploy token headers3471 valid token3472 behaves like returning response status3473 returns success3474 invalid token3475 behaves like returning response status3476 returns not_found3477 project deploy token3478 behaves like a deploy token for Composer GET requests3479 with deploy token headers3480 valid token3481 behaves like returning response status3482 returns success3483 invalid token3484 behaves like returning response status3485 returns not_found3486 with access to the api3487 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, include_package: :include_package3488 behaves like Composer package index3489 behaves like Composer package index with version3490 returns the package index3491 with version 23492 behaves like Composer package index with version3493 returns the package index3494 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, include_package: :does_not_include_package3495 behaves like Composer package index3496 behaves like Composer package index with version3497 returns the package index3498 with version 23499 behaves like Composer package index with version3500 returns the package index3501 without access to the api3502 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false3503 behaves like process Composer api request3504 for user type developer3505 behaves like returning response status3506 returns not_found3507 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true3508 behaves like process Composer api request3509 for user type developer3510 behaves like returning response status3511 returns not_found3512 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false3513 behaves like process Composer api request3514 for user type developer3515 behaves like returning response status3516 returns not_found3517 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false3518 behaves like process Composer api request3519 for user type guest3520 behaves like returning response status3521 returns not_found3522 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true3523 behaves like process Composer api request3524 for user type guest3525 behaves like returning response status3526 returns not_found3527 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false3528 behaves like process Composer api request3529 for user type guest3530 behaves like returning response status3531 returns not_found3532 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true3533 behaves like process Composer api request3534 for user type anonymous3535 behaves like returning response status3536 returns not_found3537 behaves like rejects Composer access with unknown group id3538 with an unknown group3539 as anonymous3540 behaves like process Composer api request3541 for user type anonymous3542 behaves like returning response status3543 returns not_found3544 as authenticated user3545 behaves like process Composer api request3546 for user type anonymous3547 behaves like returning response status3548 returns not_found3549 GET /api/v4/group/:id/-/packages/composer/p/:sha.json3550 with valid project3551 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer provider index", expected_status: :success3552 behaves like Composer provider index3553 returns the package index3554 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3555 behaves like process Composer api request3556 for user type developer3557 behaves like returning response status3558 returns unauthorized3559 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, shared_examples_name: "Composer provider index", expected_status: :success3560 behaves like Composer provider index3561 returns the package index3562 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3563 behaves like process Composer api request3564 for user type developer3565 behaves like returning response status3566 returns unauthorized3567 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, shared_examples_name: "Composer provider index", expected_status: :success3568 behaves like Composer provider index3569 returns the package index3570 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3571 behaves like process Composer api request3572 for user type guest3573 behaves like returning response status3574 returns unauthorized3575 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, shared_examples_name: "Composer provider index", expected_status: :success3576 behaves like Composer provider index3577 returns the package index3578 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3579 behaves like process Composer api request3580 for user type guest3581 behaves like returning response status3582 returns unauthorized3583 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "Composer provider index", expected_status: :success3584 behaves like Composer provider index3585 returns the package index3586 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer provider index", expected_status: :success3587 behaves like Composer provider index3588 returns the package index3589 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3590 behaves like process Composer api request3591 for user type developer3592 behaves like returning response status3593 returns unauthorized3594 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3595 behaves like process Composer api request3596 for user type developer3597 behaves like returning response status3598 returns not_found3599 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3600 behaves like process Composer api request3601 for user type developer3602 behaves like returning response status3603 returns unauthorized3604 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, shared_examples_name: "Composer empty provider index", expected_status: :success3605 behaves like Composer empty provider index3606 returns the package index3607 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3608 behaves like process Composer api request3609 for user type guest3610 behaves like returning response status3611 returns unauthorized3612 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3613 behaves like process Composer api request3614 for user type guest3615 behaves like returning response status3616 returns not_found3617 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3618 behaves like process Composer api request3619 for user type guest3620 behaves like returning response status3621 returns unauthorized3622 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3623 behaves like process Composer api request3624 for user type anonymous3625 behaves like returning response status3626 returns not_found3627 behaves like Composer access with deploy tokens3628 group deploy token3629 behaves like a deploy token for Composer GET requests3630 with deploy token headers3631 valid token3632 behaves like returning response status3633 returns success3634 invalid token3635 behaves like returning response status3636 returns not_found3637 project deploy token3638 behaves like a deploy token for Composer GET requests3639 with deploy token headers3640 valid token3641 behaves like returning response status3642 returns success3643 invalid token3644 behaves like returning response status3645 returns not_found3646 behaves like rejects Composer access with unknown group id3647 with an unknown group3648 as anonymous3649 behaves like process Composer api request3650 for user type anonymous3651 behaves like returning response status3652 returns not_found3653 as authenticated user3654 behaves like process Composer api request3655 for user type anonymous3656 behaves like returning response status3657 returns not_found3658 GET /api/v4/group/:id/-/packages/composer/*package_name.json3659 with no packages3660 behaves like returning response status3661 returns not_found3662 with valid project3663 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3664 behaves like Composer package api request3665 returns the package index3666 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3667 behaves like process Composer api request3668 for user type developer3669 behaves like returning response status3670 returns unauthorized3671 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3672 behaves like Composer package api request3673 returns the package index3674 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3675 behaves like process Composer api request3676 for user type developer3677 behaves like returning response status3678 returns unauthorized3679 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3680 behaves like Composer package api request3681 returns the package index3682 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3683 behaves like process Composer api request3684 for user type guest3685 behaves like returning response status3686 returns unauthorized3687 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3688 behaves like Composer package api request3689 returns the package index3690 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3691 behaves like process Composer api request3692 for user type guest3693 behaves like returning response status3694 returns unauthorized3695 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3696 behaves like Composer package api request3697 returns the package index3698 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3699 behaves like Composer package api request3700 returns the package index3701 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3702 behaves like process Composer api request3703 for user type developer3704 behaves like returning response status3705 returns unauthorized3706 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3707 behaves like process Composer api request3708 for user type developer3709 behaves like returning response status3710 returns not_found3711 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3712 behaves like process Composer api request3713 for user type developer3714 behaves like returning response status3715 returns unauthorized3716 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3717 behaves like process Composer api request3718 for user type guest3719 behaves like returning response status3720 returns not_found3721 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3722 behaves like process Composer api request3723 for user type guest3724 behaves like returning response status3725 returns unauthorized3726 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3727 behaves like process Composer api request3728 for user type guest3729 behaves like returning response status3730 returns not_found3731 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3732 behaves like process Composer api request3733 for user type guest3734 behaves like returning response status3735 returns unauthorized3736 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3737 behaves like process Composer api request3738 for user type anonymous3739 behaves like returning response status3740 returns not_found3741 without a sha3742 behaves like process Composer api request3743 for user type developer3744 behaves like returning response status3745 returns not_found3746 behaves like Composer access with deploy tokens3747 group deploy token3748 behaves like a deploy token for Composer GET requests3749 with deploy token headers3750 valid token3751 behaves like returning response status3752 returns success3753 invalid token3754 behaves like returning response status3755 returns not_found3756 project deploy token3757 behaves like a deploy token for Composer GET requests3758 with deploy token headers3759 valid token3760 behaves like returning response status3761 returns success3762 invalid token3763 behaves like returning response status3764 returns not_found3765 behaves like rejects Composer access with unknown group id3766 with an unknown group3767 as anonymous3768 behaves like process Composer api request3769 for user type anonymous3770 behaves like returning response status3771 returns not_found3772 as authenticated user3773 behaves like process Composer api request3774 for user type anonymous3775 behaves like returning response status3776 returns not_found3777 GET /api/v4/group/:id/-/packages/composer/p2/*package_name.json3778 with no packages3779 behaves like returning response status3780 returns not_found3781 with valid project3782 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3783 behaves like Composer package api request3784 returns the package index3785 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3786 behaves like process Composer api request3787 for user type developer3788 behaves like returning response status3789 returns unauthorized3790 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3791 behaves like Composer package api request3792 returns the package index3793 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3794 behaves like process Composer api request3795 for user type developer3796 behaves like returning response status3797 returns unauthorized3798 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3799 behaves like Composer package api request3800 returns the package index3801 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3802 behaves like process Composer api request3803 for user type guest3804 behaves like returning response status3805 returns unauthorized3806 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3807 behaves like Composer package api request3808 returns the package index3809 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3810 behaves like process Composer api request3811 for user type guest3812 behaves like returning response status3813 returns unauthorized3814 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3815 behaves like Composer package api request3816 returns the package index3817 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package api request", expected_status: :success3818 behaves like Composer package api request3819 returns the package index3820 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3821 behaves like process Composer api request3822 for user type developer3823 behaves like returning response status3824 returns unauthorized3825 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3826 behaves like process Composer api request3827 for user type developer3828 behaves like returning response status3829 returns not_found3830 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3831 behaves like process Composer api request3832 for user type developer3833 behaves like returning response status3834 returns unauthorized3835 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3836 behaves like process Composer api request3837 for user type guest3838 behaves like returning response status3839 returns not_found3840 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3841 behaves like process Composer api request3842 for user type guest3843 behaves like returning response status3844 returns unauthorized3845 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3846 behaves like process Composer api request3847 for user type guest3848 behaves like returning response status3849 returns not_found3850 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3851 behaves like process Composer api request3852 for user type guest3853 behaves like returning response status3854 returns unauthorized3855 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3856 behaves like process Composer api request3857 for user type anonymous3858 behaves like returning response status3859 returns not_found3860 behaves like Composer access with deploy tokens3861 group deploy token3862 behaves like a deploy token for Composer GET requests3863 with deploy token headers3864 valid token3865 behaves like returning response status3866 returns success3867 invalid token3868 behaves like returning response status3869 returns not_found3870 project deploy token3871 behaves like a deploy token for Composer GET requests3872 with deploy token headers3873 valid token3874 behaves like returning response status3875 returns success3876 invalid token3877 behaves like returning response status3878 returns not_found3879 behaves like rejects Composer access with unknown group id3880 with an unknown group3881 as anonymous3882 behaves like process Composer api request3883 for user type anonymous3884 behaves like returning response status3885 returns not_found3886 as authenticated user3887 behaves like process Composer api request3888 for user type anonymous3889 behaves like returning response status3890 returns not_found3891 POST /api/v4/projects/:id/packages/composer3892 with existing package3893 does not create a new package3894 marked as pending_destruction3895 does create a new package3896 with no tag or branch params3897 behaves like process Composer api request3898 for user type developer3899 behaves like returning response status3900 returns bad_request3901 with a tag3902 with an existing branch3903 behaves like composer package publish3904 with valid project3905 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package creation", expected_status: :created3906 behaves like Composer package creation3907 for user type developer3908 creates package files3909 behaves like a package tracking event3910 creates a gitlab tracking event push_package3911 when package creation fails3912 behaves like not a package tracking event3913 does not create a gitlab tracking event3914 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3915 behaves like process Composer api request3916 for user type developer3917 behaves like returning response status3918 returns unauthorized3919 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden3920 behaves like process Composer api request3921 for user type developer3922 behaves like returning response status3923 returns forbidden3924 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3925 behaves like process Composer api request3926 for user type developer3927 behaves like returning response status3928 returns unauthorized3929 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden3930 behaves like process Composer api request3931 for user type guest3932 behaves like returning response status3933 returns forbidden3934 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3935 behaves like process Composer api request3936 for user type guest3937 behaves like returning response status3938 returns unauthorized3939 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden3940 behaves like process Composer api request3941 for user type guest3942 behaves like returning response status3943 returns forbidden3944 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3945 behaves like process Composer api request3946 for user type guest3947 behaves like returning response status3948 returns unauthorized3949 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :unauthorized3950 behaves like process Composer api request3951 for user type anonymous3952 behaves like returning response status3953 returns unauthorized3954 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package creation", expected_status: :created3955 behaves like Composer package creation3956 for user type developer3957 creates package files3958 behaves like a package tracking event3959 creates a gitlab tracking event push_package3960 when package creation fails3961 behaves like not a package tracking event3962 does not create a gitlab tracking event3963 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3964 behaves like process Composer api request3965 for user type developer3966 behaves like returning response status3967 returns unauthorized3968 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3969 behaves like process Composer api request3970 for user type developer3971 behaves like returning response status3972 returns not_found3973 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3974 behaves like process Composer api request3975 for user type developer3976 behaves like returning response status3977 returns unauthorized3978 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden3979 behaves like process Composer api request3980 for user type guest3981 behaves like returning response status3982 returns forbidden3983 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3984 behaves like process Composer api request3985 for user type guest3986 behaves like returning response status3987 returns unauthorized3988 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found3989 behaves like process Composer api request3990 for user type guest3991 behaves like returning response status3992 returns not_found3993 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized3994 behaves like process Composer api request3995 for user type guest3996 behaves like returning response status3997 returns unauthorized3998 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :unauthorized3999 behaves like process Composer api request4000 for user type anonymous4001 behaves like returning response status4002 returns unauthorized4003 behaves like Composer publish with deploy tokens4004 group deploy token4005 behaves like a deploy token for Composer publish requests4006 valid token4007 behaves like returning response status4008 returns success4009 invalid token4010 behaves like returning response status4011 returns unauthorized4012 group deploy token4013 behaves like a deploy token for Composer publish requests4014 valid token4015 behaves like returning response status4016 returns success4017 invalid token4018 behaves like returning response status4019 returns unauthorized4020 behaves like rejects Composer access with unknown project id4021 with an unknown project4022 as anonymous4023 behaves like process Composer api request4024 for user type anonymous4025 behaves like returning response status4026 returns unauthorized4027 as authenticated user4028 behaves like process Composer api request4029 for user type anonymous4030 behaves like returning response status4031 returns not_found4032 with a non existing tag4033 behaves like process Composer api request4034 for user type developer4035 behaves like returning response status4036 returns not_found4037 with a branch4038 with an existing branch4039 behaves like composer package publish4040 with valid project4041 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package creation", expected_status: :created4042 behaves like Composer package creation4043 for user type developer4044 creates package files4045 behaves like a package tracking event4046 creates a gitlab tracking event push_package4047 when package creation fails4048 behaves like not a package tracking event4049 does not create a gitlab tracking event4050 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4051 behaves like process Composer api request4052 for user type developer4053 behaves like returning response status4054 returns unauthorized4055 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden4056 behaves like process Composer api request4057 for user type developer4058 behaves like returning response status4059 returns forbidden4060 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4061 behaves like process Composer api request4062 for user type developer4063 behaves like returning response status4064 returns unauthorized4065 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden4066 behaves like process Composer api request4067 for user type guest4068 behaves like returning response status4069 returns forbidden4070 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4071 behaves like process Composer api request4072 for user type guest4073 behaves like returning response status4074 returns unauthorized4075 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden4076 behaves like process Composer api request4077 for user type guest4078 behaves like returning response status4079 returns forbidden4080 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4081 behaves like process Composer api request4082 for user type guest4083 behaves like returning response status4084 returns unauthorized4085 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :unauthorized4086 behaves like process Composer api request4087 for user type anonymous4088 behaves like returning response status4089 returns unauthorized4090 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, shared_examples_name: "Composer package creation", expected_status: :created4091 behaves like Composer package creation4092 for user type developer4093 creates package files4094 behaves like a package tracking event4095 creates a gitlab tracking event push_package4096 when package creation fails4097 behaves like not a package tracking event4098 does not create a gitlab tracking event4099 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4100 behaves like process Composer api request4101 for user type developer4102 behaves like returning response status4103 returns unauthorized4104 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found4105 behaves like process Composer api request4106 for user type developer4107 behaves like returning response status4108 returns not_found4109 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4110 behaves like process Composer api request4111 for user type developer4112 behaves like returning response status4113 returns unauthorized4114 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, shared_examples_name: "process Composer api request", expected_status: :forbidden4115 behaves like process Composer api request4116 for user type guest4117 behaves like returning response status4118 returns forbidden4119 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4120 behaves like process Composer api request4121 for user type guest4122 behaves like returning response status4123 returns unauthorized4124 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :not_found4125 behaves like process Composer api request4126 for user type guest4127 behaves like returning response status4128 returns not_found4129 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, shared_examples_name: "process Composer api request", expected_status: :unauthorized4130 behaves like process Composer api request4131 for user type guest4132 behaves like returning response status4133 returns unauthorized4134 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, shared_examples_name: "process Composer api request", expected_status: :unauthorized4135 behaves like process Composer api request4136 for user type anonymous4137 behaves like returning response status4138 returns unauthorized4139 behaves like Composer publish with deploy tokens4140 group deploy token4141 behaves like a deploy token for Composer publish requests4142 valid token4143 behaves like returning response status4144 returns success4145 invalid token4146 behaves like returning response status4147 returns unauthorized4148 group deploy token4149 behaves like a deploy token for Composer publish requests4150 valid token4151 behaves like returning response status4152 returns success4153 invalid token4154 behaves like returning response status4155 returns unauthorized4156 behaves like rejects Composer access with unknown project id4157 with an unknown project4158 as anonymous4159 behaves like process Composer api request4160 for user type anonymous4161 behaves like returning response status4162 returns unauthorized4163 as authenticated user4164 behaves like process Composer api request4165 for user type anonymous4166 behaves like returning response status4167 returns not_found4168 with a non existing branch4169 behaves like process Composer api request4170 for user type developer4171 behaves like returning response status4172 returns not_found4173 with invalid composer.json4174 with a missing composer.json file4175 behaves like process Composer api request4176 for user type developer4177 behaves like returning response status4178 returns unprocessable_entity4179 with an empty composer.json file4180 behaves like process Composer api request4181 for user type developer4182 behaves like returning response status4183 returns unprocessable_entity4184 with a malformed composer.json file4185 behaves like process Composer api request4186 for user type developer4187 behaves like returning response status4188 returns unprocessable_entity4189 GET /api/v4/projects/:id/packages/composer/archives/*package_name?sha=:sha4190 with valid project4191 when the sha does not match the package name4192 anonymous4193 behaves like process Composer api request4194 for user type anonymous4195 behaves like returning response status4196 returns unauthorized4197 behaves like process Composer api request4198 for user type developer4199 behaves like returning response status4200 returns not_found4201 when the package name does not match the sha4202 anonymous4203 behaves like process Composer api request4204 for user type anonymous4205 behaves like returning response status4206 returns unauthorized4207 behaves like process Composer api request4208 for user type developer4209 behaves like returning response status4210 returns not_found4211 with a match package name and sha4212 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: true, expected_status: :success4213 behaves like process Composer api request4214 for user type developer4215 behaves like returning response status4216 returns success4217 behaves like bumping the package last downloaded at field4218 bumps last_downloaded_at4219 behaves like a package tracking event4220 creates a gitlab tracking event pull_package4221 project_visibility_level: "PUBLIC", user_role: :developer, member: true, user_token: false, expected_status: :success4222 behaves like process Composer api request4223 for user type developer4224 behaves like returning response status4225 returns success4226 behaves like bumping the package last downloaded at field4227 bumps last_downloaded_at4228 behaves like a package tracking event4229 creates a gitlab tracking event pull_package4230 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: true, expected_status: :success4231 behaves like process Composer api request4232 for user type developer4233 behaves like returning response status4234 returns success4235 behaves like bumping the package last downloaded at field4236 bumps last_downloaded_at4237 behaves like a package tracking event4238 creates a gitlab tracking event pull_package4239 project_visibility_level: "PUBLIC", user_role: :developer, member: false, user_token: false, expected_status: :success4240 behaves like process Composer api request4241 for user type developer4242 behaves like returning response status4243 returns success4244 behaves like bumping the package last downloaded at field4245 bumps last_downloaded_at4246 behaves like a package tracking event4247 creates a gitlab tracking event pull_package4248 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: true, expected_status: :success4249 behaves like process Composer api request4250 for user type guest4251 behaves like returning response status4252 returns success4253 behaves like bumping the package last downloaded at field4254 bumps last_downloaded_at4255 behaves like a package tracking event4256 creates a gitlab tracking event pull_package4257 project_visibility_level: "PUBLIC", user_role: :guest, member: true, user_token: false, expected_status: :success4258 behaves like process Composer api request4259 for user type guest4260 behaves like returning response status4261 returns success4262 behaves like bumping the package last downloaded at field4263 bumps last_downloaded_at4264 behaves like a package tracking event4265 creates a gitlab tracking event pull_package4266 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: true, expected_status: :success4267 behaves like process Composer api request4268 for user type guest4269 behaves like returning response status4270 returns success4271 behaves like bumping the package last downloaded at field4272 bumps last_downloaded_at4273 behaves like a package tracking event4274 creates a gitlab tracking event pull_package4275 project_visibility_level: "PUBLIC", user_role: :guest, member: false, user_token: false, expected_status: :success4276 behaves like process Composer api request4277 for user type guest4278 behaves like returning response status4279 returns success4280 behaves like bumping the package last downloaded at field4281 bumps last_downloaded_at4282 behaves like a package tracking event4283 creates a gitlab tracking event pull_package4284 project_visibility_level: "PUBLIC", user_role: :anonymous, member: false, user_token: true, expected_status: :success4285 behaves like process Composer api request4286 for user type anonymous4287 behaves like returning response status4288 returns success4289 behaves like bumping the package last downloaded at field4290 bumps last_downloaded_at4291 behaves like a package tracking event4292 creates a gitlab tracking event pull_package4293 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: true, expected_status: :success4294 behaves like process Composer api request4295 for user type developer4296 behaves like returning response status4297 returns success4298 behaves like bumping the package last downloaded at field4299 bumps last_downloaded_at4300 behaves like a package tracking event4301 creates a gitlab tracking event pull_package4302 project_visibility_level: "PRIVATE", user_role: :developer, member: true, user_token: false, expected_status: :unauthorized4303 behaves like process Composer api request4304 for user type developer4305 behaves like returning response status4306 returns unauthorized4307 behaves like not a package tracking event4308 does not create a gitlab tracking event4309 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: true, expected_status: :not_found4310 behaves like process Composer api request4311 for user type developer4312 behaves like returning response status4313 returns not_found4314 behaves like not a package tracking event4315 does not create a gitlab tracking event4316 project_visibility_level: "PRIVATE", user_role: :developer, member: false, user_token: false, expected_status: :unauthorized4317 behaves like process Composer api request4318 for user type developer4319 behaves like returning response status4320 returns unauthorized4321 behaves like not a package tracking event4322 does not create a gitlab tracking event4323 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: true, expected_status: :forbidden4324 behaves like process Composer api request4325 for user type guest4326 behaves like returning response status4327 returns forbidden4328 behaves like not a package tracking event4329 does not create a gitlab tracking event4330 project_visibility_level: "PRIVATE", user_role: :guest, member: true, user_token: false, expected_status: :unauthorized4331 behaves like process Composer api request4332 for user type guest4333 behaves like returning response status4334 returns unauthorized4335 behaves like not a package tracking event4336 does not create a gitlab tracking event4337 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: true, expected_status: :not_found4338 behaves like process Composer api request4339 for user type guest4340 behaves like returning response status4341 returns not_found4342 behaves like not a package tracking event4343 does not create a gitlab tracking event4344 project_visibility_level: "PRIVATE", user_role: :guest, member: false, user_token: false, expected_status: :unauthorized4345 behaves like process Composer api request4346 for user type guest4347 behaves like returning response status4348 returns unauthorized4349 behaves like not a package tracking event4350 does not create a gitlab tracking event4351 project_visibility_level: "PRIVATE", user_role: :anonymous, member: false, user_token: true, expected_status: :unauthorized4352 behaves like process Composer api request4353 for user type anonymous4354 behaves like returning response status4355 returns unauthorized4356 behaves like not a package tracking event4357 does not create a gitlab tracking event4358 behaves like Composer publish with deploy tokens4359 group deploy token4360 behaves like a deploy token for Composer publish requests4361 valid token4362 behaves like returning response status4363 returns success4364 invalid token4365 behaves like returning response status4366 returns unauthorized4367 group deploy token4368 behaves like a deploy token for Composer publish requests4369 valid token4370 behaves like returning response status4371 returns success4372 invalid token4373 behaves like returning response status4374 returns unauthorized4375 with access to package registry for everyone4376 behaves like returning response status4377 returns success4378 behaves like rejects Composer access with unknown project id4379 with an unknown project4380 as anonymous4381 behaves like process Composer api request4382 for user type anonymous4383 behaves like returning response status4384 returns unauthorized4385 as authenticated user4386 behaves like process Composer api request4387 for user type anonymous4388 behaves like returning response status4389 returns not_found4390API::UsageDataQueries4391 GET /usage_data/usage_data_queries4392 with authentication4393 returns queries if user is admin4394 returns forbidden if user is not admin4395 behaves like GET request permissions for admin mode4396 behaves like when admin4397 behaves like makes request4398 returns4399 behaves like makes request4400 returns4401 behaves like when user4402 returns4403 behaves like makes request4404 returns4405 without authentication4406 returns unauthorized4407 when feature_flag is disabled4408 returns not_found for admin4409 returns forbidden for non-admin4410 when querying sql metrics4411 matches the generated query4412API::Files4413 http headers4414 converts value into string4415 when value is an Enumerable4416 raises an exception4417 HEAD /projects/:id/repository/files/:file_path4418 when unauthenticated4419 and project is public4420 behaves like repository files4421 returns 400 when file path is invalid4422 returns file attributes in headers4423 caches sha256 of the content4424 returns file by commit sha4425 behaves like when path is absolute4426 returns 400 when file path is absolute4427 when mandatory params are not given4428 responds with a 400 status4429 when file_path does not exist4430 responds with a 404 status4431 when file_path does not exist4432 responds with a 403 status4433 and project is private4434 responds with a 404 status4435 when PATs are used4436 behaves like repository files4437 returns 400 when file path is invalid4438 returns file attributes in headers4439 caches sha256 of the content4440 returns file by commit sha4441 behaves like when path is absolute4442 returns 400 when file path is absolute4443 when mandatory params are not given4444 responds with a 400 status4445 when file_path does not exist4446 responds with a 404 status4447 when file_path does not exist4448 responds with a 403 status4449 when authenticated4450 and user is a developer4451 behaves like repository files4452 returns 400 when file path is invalid4453 returns file attributes in headers4454 caches sha256 of the content4455 returns file by commit sha4456 behaves like when path is absolute4457 returns 400 when file path is absolute4458 when mandatory params are not given4459 responds with a 400 status4460 when file_path does not exist4461 responds with a 404 status4462 when file_path does not exist4463 responds with a 403 status4464 and user is a guest4465 behaves like 403 response4466 returns 4034467 GET /projects/:id/repository/files/:file_path4468 when unauthenticated4469 and project is public4470 behaves like repository files4471 returns 400 for invalid file path4472 returns json when file has txt extension4473 returns file by commit sha4474 returns raw file info4475 returns blame file info4476 sets inline content disposition by default4477 behaves like when path is absolute4478 returns 400 when file path is absolute4479 behaves like returns non-executable file attributes as json4480 is expected to eq "require 'fileutils'\n"4481 for executable file4482 returns file attributes as json4483 with filename with pathspec characters4484 returns JSON wth commit SHA4485 when mandatory params are not given4486 behaves like 400 response4487 returns 4004488 when file_path does not exist4489 behaves like 404 response4490 returns 4044491 when repository is disabled4492 behaves like 403 response4493 returns 4034494 and project is private4495 behaves like 404 response4496 returns 4044497 when authenticated4498 and user is a direct project member4499 and project is private4500 and user is a developer4501 behaves like repository files4502 returns 400 for invalid file path4503 returns json when file has txt extension4504 returns file by commit sha4505 returns raw file info4506 returns blame file info4507 sets inline content disposition by default4508 behaves like when path is absolute4509 returns 400 when file path is absolute4510 behaves like returns non-executable file attributes as json4511 is expected to eq "require 'fileutils'\n"4512 for executable file4513 returns file attributes as json4514 with filename with pathspec characters4515 returns JSON wth commit SHA4516 when mandatory params are not given4517 behaves like 400 response4518 returns 4004519 when file_path does not exist4520 behaves like 404 response4521 returns 4044522 when repository is disabled4523 behaves like 403 response4524 returns 4034525 and PATs are used4526 behaves like repository files4527 returns 400 for invalid file path4528 returns json when file has txt extension4529 returns file by commit sha4530 returns raw file info4531 returns blame file info4532 sets inline content disposition by default4533 behaves like when path is absolute4534 returns 400 when file path is absolute4535 behaves like returns non-executable file attributes as json4536 is expected to eq "require 'fileutils'\n"4537 for executable file4538 returns file attributes as json4539 with filename with pathspec characters4540 returns JSON wth commit SHA4541 when mandatory params are not given4542 behaves like 400 response4543 returns 4004544 when file_path does not exist4545 behaves like 404 response4546 returns 4044547 when repository is disabled4548 behaves like 403 response4549 returns 4034550 and user is a guest4551 behaves like 403 response4552 returns 4034553 when authenticated4554 and user is an inherited member from the group4555 when project is public with private repository4556 and user is a guest4557 behaves like returns non-executable file attributes as json4558 is expected to eq "require 'fileutils'\n"4559 and user is a reporter4560 behaves like returns non-executable file attributes as json4561 is expected to eq "require 'fileutils'\n"4562 and user is a developer4563 behaves like returns non-executable file attributes as json4564 is expected to eq "require 'fileutils'\n"4565 when project is private4566 and user is a guest4567 behaves like 403 response4568 returns 4034569 and user is a reporter4570 behaves like returns non-executable file attributes as json4571 is expected to eq "require 'fileutils'\n"4572 and user is a developer4573 behaves like returns non-executable file attributes as json4574 is expected to eq "require 'fileutils'\n"4575 GET /projects/:id/repository/files/:file_path/blame4576 when unauthenticated4577 and project is public4578 behaves like repository blame files4579 returns file attributes in headers4580 returns 400 when file path is invalid4581 returns blame file attributes as json4582 returns blame file info for files with dots4583 returns file by commit sha4584 for executable file4585 returns file attributes in headers4586 behaves like when path is absolute4587 returns 400 when file path is absolute4588 with a range parameter4589 returns file blame attributes as json for the range4590 when start > end4591 returns 400 error4592 when range is incomplete4593 returns 400 error4594 when range contains negative integers4595 returns 400 error4596 when range is missing4597 returns 400 error4598 when mandatory params are not given4599 behaves like 400 response4600 returns 4004601 when file_path does not exist4602 behaves like 404 response4603 returns 4044604 when commit does not exist4605 behaves like 404 response4606 returns 4044607 when repository is disabled4608 behaves like 403 response4609 returns 4034610 and project is private4611 behaves like 404 response4612 returns 4044613 when authenticated4614 and user is a developer4615 behaves like repository blame files4616 returns file attributes in headers4617 returns 400 when file path is invalid4618 returns blame file attributes as json4619 returns blame file info for files with dots4620 returns file by commit sha4621 for executable file4622 returns file attributes in headers4623 behaves like when path is absolute4624 returns 400 when file path is absolute4625 with a range parameter4626 returns file blame attributes as json for the range4627 when start > end4628 returns 400 error4629 when range is incomplete4630 returns 400 error4631 when range contains negative integers4632 returns 400 error4633 when range is missing4634 returns 400 error4635 when mandatory params are not given4636 behaves like 400 response4637 returns 4004638 when file_path does not exist4639 behaves like 404 response4640 returns 4044641 when commit does not exist4642 behaves like 404 response4643 returns 4044644 when repository is disabled4645 behaves like 403 response4646 returns 4034647 and user is a guest4648 behaves like 403 response4649 returns 4034650 when PATs are used4651 returns blame file by commit sha4652 HEAD /projects/:id/repository/files/:file_path/raw4653 response headers4654 and user is a developer4655 responds with blob data4656 when lfs parameter is true and the project has lfs enabled4657 and the file has an lfs object4658 responds with 4044659 and the project has access to the lfs object4660 and lfs uses AWS4661 redirects to the lfs object file with a signed url4662 and user is a guest4663 behaves like 403 response4664 returns 4034665 GET /projects/:id/repository/files/:file_path/raw4666 when unauthenticated4667 and project is public4668 behaves like repository raw files4669 returns 400 when file path is invalid4670 returns raw file info4671 returns raw file info for files with dots4672 returns file by commit sha4673 sets no-cache headers4674 behaves like when path is absolute4675 returns 400 when file path is absolute4676 when ref is not provided4677 returns response :ok4678 when mandatory params are not given4679 behaves like 400 response4680 returns 4004681 when file_path does not exist4682 behaves like 404 response4683 returns 4044684 when repository is disabled4685 behaves like 403 response4686 returns 4034687 when lfs parameter is true and the project has lfs enabled4688 behaves like 404 response4689 returns 4044690 and the file has an lfs object4691 behaves like 404 response4692 returns 4044693 and the project has access to the lfs object4694 and lfs uses local file storage4695 responds with the lfs object file4696 and lfs uses remote object storage4697 redirects to the lfs object file4698 and project is private4699 behaves like 404 response4700 returns 4044701 when authenticated4702 and user is a developer4703 behaves like repository raw files4704 returns 400 when file path is invalid4705 returns raw file info4706 returns raw file info for files with dots4707 returns file by commit sha4708 sets no-cache headers4709 behaves like when path is absolute4710 returns 400 when file path is absolute4711 when ref is not provided4712 returns response :ok4713 when mandatory params are not given4714 behaves like 400 response4715 returns 4004716 when file_path does not exist4717 behaves like 404 response4718 returns 4044719 when repository is disabled4720 behaves like 403 response4721 returns 4034722 when lfs parameter is true and the project has lfs enabled4723 behaves like 404 response4724 returns 4044725 and the file has an lfs object4726 behaves like 404 response4727 returns 4044728 and the project has access to the lfs object4729 and lfs uses local file storage4730 responds with the lfs object file4731 and lfs uses remote object storage4732 redirects to the lfs object file4733 and user is a guest4734 behaves like 403 response4735 returns 4034736 when PATs are used4737 returns file by commit sha4738 POST /projects/:id/repository/files/:file_path4739 when authenticated as a direct project member4740 when project is private4741 and user is a developer4742 returns 400 when file path is invalid4743 creates a new executable file in project repo4744 behaves like when path is absolute4745 returns 400 when file path is absolute4746 behaves like creates a new file in the project repo4747 is expected to eq false4748 when no mandatory params given4749 returns a 400 bad request4750 when the commit message is empty4751 returns a 400 bad request4752 when editor fails to create file4753 returns a 400 bad request4754 and PATs are used4755 returns 403 with `read_repository` scope4756 returns 201 with `api` scope4757 and the repo is empty4758 behaves like creates a new file in the project repo4759 is expected to eq false4760 when specifying an author4761 creates a new file with the specified author4762 when authenticated4763 and user is an inherited member from the group4764 when project is public with private repository4765 and user is a guest4766 behaves like 403 response4767 returns 4034768 and user is a reporter4769 behaves like 403 response4770 returns 4034771 and user is a developer4772 behaves like creates a new file in the project repo4773 is expected to eq false4774 when project is private4775 and user is a guest4776 behaves like 403 response4777 returns 4034778 and user is a reporter4779 behaves like 403 response4780 returns 4034781 and user is a developer4782 behaves like creates a new file in the project repo4783 is expected to eq false4784 PUT /projects/:id/repository/files4785 updates existing file in project repo4786 when the commit message is empty4787 returns a 400 bad request4788 when updating an existing file with stale last commit id4789 returns a 400 bad request4790 with correct last commit id4791 updates existing file in project repo4792 when file path is invalid4793 returns a 400 bad request4794 behaves like when path is absolute4795 returns 400 when file path is absolute4796 when no params given4797 returns a 400 bad request4798 when specifying an author4799 updates a file with the specified author4800 when specifying the execute_filemode4801 updates to executable file mode4802 updates to non-executable file mode4803 DELETE /projects/:id/repository/files4804 when files are deleted4805 deletes existing file in project repo4806 when specifying an author4807 removes a file with the specified author4808 when files are not deleted4809 returns 400 when file path is invalid4810 behaves like when path is absolute4811 returns 400 when file path is absolute4812 when no params given4813 returns a 400 bad request4814 when the commit message is empty4815 returns a 400 bad request4816 when fails to delete file4817 returns a 400 bad request4818 POST /projects/:id/repository/files with binary file4819 remains unchanged4820 POST /projects/:id/repository/files with text encoding4821 returns base64-encoded text file4822API::Tags4823 GET /projects/:id/repository/tags4824 sorting4825 sorts by descending order by default4826 sorts by ascending order if specified4827 sorts by name in descending order when requested4828 sorts by name in ascending order when requested4829 sorts by version in ascending order when requested4830 searching4831 only returns searched tags4832 when unauthenticated and project is public4833 behaves like repository tags4834 returns the repository tags4835 when repository is disabled4836 behaves like 403 response4837 returns 4034838 when repository does not exist4839 behaves like 404 response4840 returns 4044841 and releases are private4842 returns the repository tags without release information4843 when unauthenticated and project is private4844 behaves like 404 response4845 returns 4044846 when authenticated as a maintainer4847 behaves like repository tags4848 returns the repository tags4849 when repository is disabled4850 behaves like 403 response4851 returns 4034852 when repository does not exist4853 behaves like 404 response4854 returns 4044855 requesting with the escaped project full path4856 behaves like repository tags4857 returns the repository tags4858 when repository is disabled4859 behaves like 403 response4860 returns 4034861 when repository does not exist4862 behaves like 404 response4863 returns 4044864 when authenticated as a guest4865 behaves like 403 response4866 returns 4034867 with releases4868 returns an array of project tags with release info4869 with keyset pagination option4870 with gitaly pagination params4871 with high limit4872 returns all repository tags4873 with low limit4874 returns limited repository tags4875 with missing page token4876 behaves like 422 response4877 returns 4224878 cache expiry4879 is cached4880 when protected tag is changed4881 behaves like cache expired4882 isn't cached4883 when release is changed4884 behaves like cache expired4885 isn't cached4886 when project is changed4887 behaves like cache expired4888 isn't cached4889 when user is not allowed to :read_release4890 isn't cached4891 when gitaly is unavailable4892 behaves like 503 response4893 returns 5034894 GET /projects/:id/repository/tags/:tag_name4895 when unauthenticated and project is public4896 behaves like repository tag4897 returns the repository branch4898 when tag does not exist4899 behaves like 404 response4900 returns 4044901 when repository is disabled4902 behaves like 403 response4903 returns 4034904 and releases are private4905 returns the repository tags without release information4906 when unauthenticated and project is private4907 behaves like 404 response4908 returns 4044909 when authenticated as a maintainer4910 behaves like repository tag4911 returns the repository branch4912 when tag does not exist4913 behaves like 404 response4914 returns 4044915 when repository is disabled4916 behaves like 403 response4917 returns 4034918 requesting with the escaped project full path4919 behaves like repository tag4920 returns the repository branch4921 when tag does not exist4922 behaves like 404 response4923 returns 4044924 when repository is disabled4925 behaves like 403 response4926 returns 4034927 when authenticated as a guest4928 behaves like 403 response4929 returns 4034930 with releases4931 returns release information4932 POST /projects/:id/repository/tags4933 when unauthenticated and project is private4934 behaves like 404 response4935 returns 4044936 when authenticated as a guest4937 behaves like 403 response4938 returns 4034939 when authenticated as a maintainer4940 returns 400 if tag name is invalid4941 returns 400 if tag already exists4942 returns 400 if ref name is invalid4943 when a protected branch doesn't already exist4944 behaves like repository new tag4945 creates a new tag4946 when repository is disabled4947 behaves like 403 response4948 returns 4034949 when tag contains a dot4950 behaves like repository new tag4951 creates a new tag4952 when repository is disabled4953 behaves like 403 response4954 returns 4034955 requesting with the escaped project full path4956 behaves like repository new tag4957 creates a new tag4958 when repository is disabled4959 behaves like 403 response4960 returns 4034961 when tag contains a dot4962 behaves like repository new tag4963 creates a new tag4964 when repository is disabled4965 behaves like 403 response4966 returns 4034967 annotated tag4968 creates a new annotated tag4969 DELETE /projects/:id/repository/tags/:tag_name4970 when authenticated as a maintainer4971 behaves like repository delete tag4972 deletes a tag4973 behaves like 412 response4974 for a modified ressource4975 returns 412 with a JSON error4976 for an unmodified ressource4977 returns 204 with an empty body4978 when tag does not exist4979 behaves like 404 response4980 returns 4044981 when repository is disabled4982 behaves like 403 response4983 returns 4034984 requesting with the escaped project full path4985 behaves like repository delete tag4986 deletes a tag4987 behaves like 412 response4988 for a modified ressource4989 returns 412 with a JSON error4990 for an unmodified ressource4991 returns 204 with an empty body4992 when tag does not exist4993 behaves like 404 response4994 returns 4044995 when repository is disabled4996 behaves like 403 response4997 returns 4034998 GET /projects/:id/repository/tags/:tag_name/signature4999 when tag does not exist5000 behaves like 404 response5001 returns 4045002 unsigned tag5003 behaves like 404 response5004 returns 4045005 x509 signed tag5006 returns correct JSON5007Emails::Profile5008 for new users, the email5009 contains the password text5010 includes a link for user to set password5011 explains the reset link expiration5012 behaves like an email sent from GitLab5013 has the characteristics of an email sent from GitLab5014 behaves like a new user email5015 is sent to the new user with the correct subject and body5016 behaves like it should not have Gmail Actions links5017 is expected not to have body including "ViewAction"5018 behaves like a user cannot unsubscribe through footer link5019 does not have a List-Unsubscribe header or a body link5020 for users that signed up, the email5021 does not contain the new user's password5022 behaves like an email sent from GitLab5023 has the characteristics of an email sent from GitLab5024 behaves like a new user email5025 is sent to the new user with the correct subject and body5026 behaves like it should not have Gmail Actions links5027 is expected not to have body including "ViewAction"5028 behaves like a user cannot unsubscribe through footer link5029 does not have a List-Unsubscribe header or a body link5030 user added ssh key5031 is sent to the new user5032 has the correct subject5033 contains the new ssh key title5034 includes a link to ssh keys page5035 behaves like an email sent from GitLab5036 has the characteristics of an email sent from GitLab5037 behaves like it should not have Gmail Actions links5038 is expected not to have body including "ViewAction"5039 behaves like a user cannot unsubscribe through footer link5040 does not have a List-Unsubscribe header or a body link5041 with SSH key that does not exist5042 is expected not to raise Exception5043 user added gpg key5044 is sent to the new user5045 has the correct subject5046 contains the new gpg key title5047 includes a link to gpg keys page5048 behaves like an email sent from GitLab5049 has the characteristics of an email sent from GitLab5050 behaves like it should not have Gmail Actions links5051 is expected not to have body including "ViewAction"5052 behaves like a user cannot unsubscribe through footer link5053 does not have a List-Unsubscribe header or a body link5054 with GPG key that does not exist5055 is expected not to raise Exception5056 user personal access token has been created5057 when valid5058 is sent to the user5059 has the correct subject5060 provides the names of the token5061 includes a link to personal access tokens page5062 includes the email reason5063 behaves like an email sent from GitLab5064 has the characteristics of an email sent from GitLab5065 behaves like it should not have Gmail Actions links5066 is expected not to have body including "ViewAction"5067 behaves like a user cannot unsubscribe through footer link5068 does not have a List-Unsubscribe header or a body link5069 user personal access token is about to expire5070 is sent to the user5071 has the correct subject5072 mentions the access tokens will expire5073 provides the names of expiring tokens5074 includes a link to personal access tokens page5075 includes the email reason5076 behaves like an email sent from GitLab5077 has the characteristics of an email sent from GitLab5078 behaves like it should not have Gmail Actions links5079 is expected not to have body including "ViewAction"5080 behaves like a user cannot unsubscribe through footer link5081 does not have a List-Unsubscribe header or a body link5082 with User does not exist5083 is expected not to raise Exception5084 user personal access token has expired5085 when valid5086 is sent to the user5087 has the correct subject5088 mentions the access token has expired5089 includes a link to personal access tokens page5090 includes the email reason5091 behaves like an email sent from GitLab5092 has the characteristics of an email sent from GitLab5093 behaves like it should not have Gmail Actions links5094 is expected not to have body including "ViewAction"5095 behaves like a user cannot unsubscribe through footer link5096 does not have a List-Unsubscribe header or a body link5097 when invalid5098 when user does not exist5099 is expected not to change `ActionMailer::Base.deliveries.count`5100 when user is not active5101 is expected not to change `ActionMailer::Base.deliveries.count`5102 user personal access token has been revoked5103 when valid5104 is sent to the user5105 has the correct subject5106 provides the names of the token5107 wont include the revocation reason5108 includes the email reason5109 behaves like an email sent from GitLab5110 has the characteristics of an email sent from GitLab5111 behaves like it should not have Gmail Actions links5112 is expected not to have body including "ViewAction"5113 behaves like a user cannot unsubscribe through footer link5114 does not have a List-Unsubscribe header or a body link5115 when source is provided5116 is sent to the user5117 has the correct subject5118 provides the names of the token5119 includes the revocation reason5120 includes the email reason5121 behaves like an email sent from GitLab5122 has the characteristics of an email sent from GitLab5123 behaves like it should not have Gmail Actions links5124 is expected not to have body including "ViewAction"5125 behaves like a user cannot unsubscribe through footer link5126 does not have a List-Unsubscribe header or a body link5127 SSH key notification5128 notification email for expired ssh key5129 when valid5130 behaves like an email sent from GitLab5131 has the characteristics of an email sent from GitLab5132 behaves like it should not have Gmail Actions links5133 is expected not to have body including "ViewAction"5134 behaves like a user cannot unsubscribe through footer link5135 does not have a List-Unsubscribe header or a body link5136 behaves like is sent to the user5137 is expected to be delivered to ["user612@example.org"]5138 behaves like includes a link to ssh key page5139 is expected to have body matching /http:\/\/localhost\/-\/profile\/keys/5140 behaves like includes the email reason5141 is expected to have body matching /You're receiving this email because of your account on <a .*>localhost<\/a>/5142 behaves like has the correct subject5143 is expected to have subject matching /Your SSH key has expired/5144 behaves like has the correct body text5145 is expected to have body matching /SSH keys with the following fingerprints have expired/5146 when invalid5147 when user does not exist5148 behaves like does not send email5149 is expected not to change `ActionMailer::Base.deliveries.count`5150 when user is not active5151 behaves like does not send email5152 is expected not to change `ActionMailer::Base.deliveries.count`5153 notification email for expiring ssh key5154 when valid5155 behaves like an email sent from GitLab5156 has the characteristics of an email sent from GitLab5157 behaves like it should not have Gmail Actions links5158 is expected not to have body including "ViewAction"5159 behaves like a user cannot unsubscribe through footer link5160 does not have a List-Unsubscribe header or a body link5161 behaves like is sent to the user5162 is expected to be delivered to ["user612@example.org"]5163 behaves like includes a link to ssh key page5164 is expected to have body matching /http:\/\/localhost\/-\/profile\/keys/5165 behaves like includes the email reason5166 is expected to have body matching /You're receiving this email because of your account on <a .*>localhost<\/a>/5167 behaves like has the correct subject5168 is expected to have subject matching /Your SSH key is expiring soon/5169 behaves like has the correct body text5170 is expected to have body matching /SSH keys with the following fingerprints are scheduled to expire soon/5171 when invalid5172 when user does not exist5173 behaves like does not send email5174 is expected not to change `ActionMailer::Base.deliveries.count`5175 when user is not active5176 behaves like does not send email5177 is expected not to change `ActionMailer::Base.deliveries.count`5178 user unknown sign in email5179 is sent to the user5180 has the correct subject5181 mentions the username5182 mentions the new sign-in IP5183 mentions the time5184 includes a link to the change password documentation5185 mentions two factor authentication when two factor is not enabled5186 includes a link to two-factor authentication documentation5187 behaves like an email sent from GitLab5188 has the characteristics of an email sent from GitLab5189 behaves like it should not have Gmail Actions links5190 is expected not to have body including "ViewAction"5191 behaves like a user cannot unsubscribe through footer link5192 does not have a List-Unsubscribe header or a body link5193 when two factor authentication is enabled5194 does not mention two factor authentication5195 user attempted sign in with wrong 2FA OTP email5196 is sent to the user5197 has the correct subject5198 mentions the IP address5199 mentioned the time5200 includes a link to the change password documentation5201 behaves like an email sent from GitLab5202 has the characteristics of an email sent from GitLab5203 behaves like it should not have Gmail Actions links5204 is expected not to have body including "ViewAction"5205 behaves like a user cannot unsubscribe through footer link5206 does not have a List-Unsubscribe header or a body link5207 disabled two-factor authentication email5208 is sent to the user5209 has the correct subject5210 includes a link to two-factor authentication settings page5211 behaves like an email sent from GitLab5212 has the characteristics of an email sent from GitLab5213 behaves like it should not have Gmail Actions links5214 is expected not to have body including "ViewAction"5215 behaves like a user cannot unsubscribe through footer link5216 does not have a List-Unsubscribe header or a body link5217 added a new email address5218 is sent to the user5219 has the correct subject5220 includes a link to the email address page5221 behaves like an email sent from GitLab5222 has the characteristics of an email sent from GitLab5223 behaves like it should not have Gmail Actions links5224 is expected not to have body including "ViewAction"5225 behaves like a user cannot unsubscribe through footer link5226 does not have a List-Unsubscribe header or a body link5227 awarded a new achievement5228 is sent to the user5229 has the correct subject5230 includes a link to the profile page5231 includes a link to the awarding group5232 behaves like an email sent from GitLab5233 has the characteristics of an email sent from GitLab5234 behaves like it should not have Gmail Actions links5235 is expected not to have body including "ViewAction"5236 behaves like a user cannot unsubscribe through footer link5237 does not have a List-Unsubscribe header or a body link5238Adding a Note5239 behaves like a Note mutation when the user does not have permission5240 behaves like a Note mutation that does not create a Note5241 is expected not to change `Note.count`5242 behaves like a mutation that returns top-level errors5243 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"5244 when the user has permission5245 returns the note5246 behaves like a working GraphQL mutation5247 with a personal access token5248 behaves like prevents access to the mutation5249 does not resolve the mutation5250 behaves like allows access to the mutation5251 behaves like a working graphql query5252 returns a successful response5253 returns data5254 with an OAuth token5255 behaves like prevents access to the mutation5256 does not resolve the mutation5257 behaves like allows access to the mutation5258 behaves like a working graphql query5259 returns a successful response5260 returns data5261 behaves like a Note mutation that creates a Note5262 is expected to change `Note.count` by 15263 behaves like a Note mutation when there are active record validation errors5264 returns an empty Note5265 behaves like a Note mutation that does not create a Note5266 is expected not to change `Note.count`5267 behaves like a mutation that returns errors in the response5268 is expected to contain exactly "Error 1" and "Error 2"5269 behaves like a Note mutation when the given resource id is not for a Noteable5270 behaves like a Note mutation that does not create a Note5271 is expected not to change `Note.count`5272 behaves like a mutation that returns top-level errors5273 is expected to include / does not represent an instance of Noteable/5274 behaves like a Note mutation when there are rate limit validation errors5275 with rate limiter5276 behaves like a Note mutation that does not create a Note5277 is expected not to change `Note.count`5278 behaves like a mutation that returns top-level errors5279 is expected to contain exactly "This endpoint has been requested too many times. Try again later."5280 when the user is in the allowlist5281 behaves like a Note mutation that creates a Note5282 is expected to change `Note.count` by 15283 creating Notes in reply to a discussion5284 when the user does not have permission to create notes on the discussion5285 behaves like a mutation that returns top-level errors5286 is expected to contain exactly "The discussion does not exist or you don't have permission to perform this action"5287 when the user has permission to create notes on the discussion5288 creates a Note in a discussion5289 when the discussion_id is not for a Discussion5290 behaves like a mutation that returns top-level errors5291 is expected to include / does not represent an instance of Discussion/5292 for an issue5293 when using internal param5294 behaves like a Note mutation with confidential notes5295 returns a Note with confidentiality enabled5296 behaves like a Note mutation that creates a Note5297 is expected to change `Note.count` by 15298 when using deprecated confidential param5299 behaves like a Note mutation with confidential notes5300 returns a Note with confidentiality enabled5301 behaves like a Note mutation that creates a Note5302 is expected to change `Note.count` by 15303 as work item5304 when using internal param5305 behaves like a Note mutation with confidential notes5306 returns a Note with confidentiality enabled5307 behaves like a Note mutation that creates a Note5308 is expected to change `Note.count` by 15309 when using deprecated confidential param5310 behaves like a Note mutation with confidential notes5311 returns a Note with confidentiality enabled5312 behaves like a Note mutation that creates a Note5313 is expected to change `Note.count` by 15314 without notes widget5315 behaves like a Note mutation that does not create a Note5316 is expected not to change `Note.count`5317 behaves like a mutation that returns top-level errors5318 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"5319 when body contains quick actions5320 behaves like work item supports labels widget updates via quick actions5321 when only removing labels5322 behaves like work item labels are updated5323 is expected to contain exactly5324 when only adding labels5325 behaves like work item labels are updated5326 is expected to contain exactly #<ProjectLabel id:4 namespace322/project461~4>, #<ProjectLabel id:5 namespace322/project461~5>, and #<ProjectLabel id:3 namespace322/project461~3>5327 when adding and removing labels5328 behaves like work item labels are updated5329 is expected to contain exactly #<ProjectLabel id:4 namespace322/project461~4> and #<ProjectLabel id:5 namespace322/project461~5>5330 behaves like work item does not support labels widget updates via quick actions5331 ignores the quick action5332 behaves like work item supports assignee widget updates via quick actions5333 when assigning a user5334 updates the work item assignee5335 when unassigning a user5336 updates the work item assignee5337 behaves like work item does not support assignee widget updates via quick actions5338 ignores the quick action5339 behaves like work item supports start and due date widget updates via quick actions5340 updates start and due date5341 behaves like work item does not support start and due date widget updates via quick actions5342 ignores the quick action5343 when body only contains quick actions5344 returns a nil note and info about the command in errors5345 starts the merge process5346API::Terraform::StateVersion5347 GET /projects/:id/terraform/state/:name/versions/:serial5348 behaves like it depends on value of the `terraform_state.enabled` config5349 when terraform_state.enabled=false5350 returns `forbidden` response5351 when terraform_state.enabled=true5352 returns a successful response5353 with invalid authentication5354 returns unauthorized status5355 with no authentication5356 returns unauthorized status5357 personal acceess token authentication5358 with maintainer permissions5359 returns the state contents at the given version5360 for a project that does not exist5361 returns not found status5362 with developer permissions5363 returns the state contents at the given version5364 with no permissions5365 returns not found status5366 job token authentication5367 with maintainer permissions5368 returns the state contents at the given version5369 returns unauthorized status if the the job is not running5370 for a project that does not exist5371 returns not found status5372 with developer permissions5373 returns the state contents at the given version5374 with no permissions5375 returns not found status5376 DELETE /projects/:id/terraform/state/:name/versions/:serial5377 behaves like it depends on value of the `terraform_state.enabled` config5378 when terraform_state.enabled=false5379 returns `forbidden` response5380 when terraform_state.enabled=true5381 returns a successful response5382 with invalid authentication5383 returns unauthorized status5384 with no authentication5385 returns unauthorized status5386 with maintainer permissions5387 deletes the version5388 version does not exist5389 does not delete a version5390 with developer permissions5391 returns forbidden status5392 with no permissions5393 returns not found status5394API::Ci::PipelineSchedules5395 GET /projects/:id/pipeline_schedules5396 authenticated user with valid permissions5397 returns list of pipeline_schedules5398 avoids N + 1 queries5399 when scope is active5400 returns matched pipeline schedules5401 when scope is inactive5402 returns matched pipeline schedules5403 authenticated user with invalid permissions5404 does not return pipeline_schedules list5405 unauthenticated user5406 does not return pipeline_schedules list5407 GET /projects/:id/pipeline_schedules/:pipeline_schedule_id5408 with private project5409 behaves like request with schedule ownership5410 authenticated user with pipeline schedule ownership5411 returns pipeline_schedule details5412 behaves like request with project permissions5413 authenticated user with project permisions5414 returns pipeline_schedule details5415 behaves like request with unauthenticated user5416 with unauthenticated user5417 does not return pipeline_schedule5418 behaves like request with non-existing pipeline_schedule5419 responds with 404 Not Found if requesting non-existing pipeline_schedule5420 authenticated user with no project permissions5421 does not return pipeline_schedule5422 authenticated user with insufficient project permissions5423 does not return pipeline_schedule5424 with public project5425 behaves like request with schedule ownership5426 authenticated user with pipeline schedule ownership5427 returns pipeline_schedule details5428 behaves like request with project permissions5429 authenticated user with project permisions5430 returns pipeline_schedule details5431 behaves like request with unauthenticated user5432 with unauthenticated user5433 does not return pipeline_schedule5434 behaves like request with non-existing pipeline_schedule5435 responds with 404 Not Found if requesting non-existing pipeline_schedule5436 authenticated user with no project permissions5437 returns pipeline_schedule with no variables5438 authenticated user with insufficient project permissions5439 returns pipeline_schedule with no variables5440 GET /projects/:id/pipeline_schedules/:pipeline_schedule_id/pipelines5441 with private project5442 behaves like request with schedule ownership5443 authenticated user with pipeline schedule ownership5444 returns the details of pipelines triggered from the pipeline schedule5445 behaves like request with project permissions5446 authenticated user with project permissions5447 returns the details of pipelines triggered from the pipeline schedule5448 behaves like request with unauthenticated user5449 with unauthenticated user5450 does not return the details of pipelines triggered from the pipeline schedule5451 behaves like request with non-existing pipeline_schedule5452 responds with 404 Not Found if requesting for a non-existing pipeline schedule's pipelines5453 authenticated user with no project permissions5454 does not return the details of pipelines triggered from the pipeline schedule5455 authenticated user with insufficient project permissions5456 does not return the details of pipelines triggered from the pipeline schedule5457 with public project5458 behaves like request with schedule ownership5459 authenticated user with pipeline schedule ownership5460 returns the details of pipelines triggered from the pipeline schedule5461 behaves like request with project permissions5462 authenticated user with project permissions5463 returns the details of pipelines triggered from the pipeline schedule5464 behaves like request with unauthenticated user5465 with unauthenticated user5466 does not return the details of pipelines triggered from the pipeline schedule5467 behaves like request with non-existing pipeline_schedule5468 responds with 404 Not Found if requesting for a non-existing pipeline schedule's pipelines5469 authenticated user with no project permissions5470 returns the details of pipelines triggered from the pipeline schedule5471 POST /projects/:id/pipeline_schedules5472 authenticated user with valid permissions5473 with required parameters5474 creates pipeline_schedule5475 without required parameters5476 does not create pipeline_schedule5477 when cron has validation error5478 does not create pipeline_schedule5479 authenticated user with invalid permissions5480 does not create pipeline_schedule5481 unauthenticated user5482 does not create pipeline_schedule5483 PUT /projects/:id/pipeline_schedules/:pipeline_schedule_id5484 authenticated user with valid permissions5485 updates cron5486 when cron has validation error5487 does not update pipeline_schedule5488 authenticated user with invalid permissions5489 as a project maintainer5490 does not update pipeline_schedule5491 as a project owner5492 does not update pipeline_schedule5493 with no special role5494 does not update pipeline_schedule5495 unauthenticated user5496 does not update pipeline_schedule5497 POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/take_ownership5498 as an authenticated user with valid permissions5499 updates owner5500 as an authenticated user with invalid permissions5501 does not update owner5502 as an unauthenticated user5503 does not update owner5504 as the existing owner of the schedule5505 accepts the request and leaves the schedule unchanged5506 DELETE /projects/:id/pipeline_schedules/:pipeline_schedule_id5507 authenticated user with valid permissions5508 deletes pipeline_schedule5509 responds with 404 Not Found if requesting non-existing pipeline_schedule5510 behaves like 412 response5511 for a modified ressource5512 returns 412 with a JSON error5513 for an unmodified ressource5514 returns 204 with an empty body5515 authenticated user with invalid permissions5516 does not delete pipeline_schedule5517 unauthenticated user5518 does not delete pipeline_schedule5519 POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/play5520 authenticated user with `:play_pipeline_schedule` permission5521 schedules a pipeline worker5522 renders an error if scheduling failed5523 authenticated user with insufficient access5524 responds with not found5525 unauthenticated user5526 responds with unauthorized5527 POST /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables5528 authenticated user with valid permissions5529 with required parameters5530 creates pipeline_schedule_variable5531 without required parameters5532 does not create pipeline_schedule_variable5533 when key has validation error5534 does not create pipeline_schedule_variable5535 authenticated user with invalid permissions5536 does not create pipeline_schedule_variable5537 unauthenticated user5538 does not create pipeline_schedule_variable5539 PUT /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key5540 authenticated user with valid permissions5541 updates pipeline_schedule_variable5542 authenticated user with invalid permissions5543 does not update pipeline_schedule_variable5544 unauthenticated user5545 does not update pipeline_schedule_variable5546 DELETE /projects/:id/pipeline_schedules/:pipeline_schedule_id/variables/:key5547 authenticated user with valid permissions5548 deletes pipeline_schedule_variable5549 responds with 404 Not Found if requesting non-existing pipeline_schedule_variable5550 authenticated user with invalid permissions5551 does not delete pipeline_schedule_variable5552 unauthenticated user5553 does not delete pipeline_schedule_variable5554API::AwardEmoji5555 GET /projects/:id/awardable/:awardable_id/award_emoji5556 on an issue5557 returns an array of award_emoji5558 includes custom emoji attributes5559 returns a 404 error when issue id not found5560 behaves like unauthenticated request to public awardable5561 returns the awarded emoji5562 behaves like request with insufficient permissions5563 when user is not signed in5564 returns 4045565 when user does not have access5566 returns 4045567 on a merge request5568 returns an array of award_emoji5569 on a snippet5570 returns the awarded emoji5571 GET /projects/:id/awardable/:awardable_id/notes/:note_id/award_emoji5572 returns an array of award emoji5573 behaves like unauthenticated request to public awardable5574 returns the awarded emoji5575 behaves like request with insufficient permissions5576 when user is not signed in5577 returns 4045578 when user does not have access5579 returns 4045580 GET /projects/:id/awardable/:awardable_id/award_emoji/:award_id5581 on an issue5582 returns the award emoji5583 returns a 404 error if the award is not found5584 behaves like unauthenticated request to public awardable5585 returns the awarded emoji5586 behaves like request with insufficient permissions5587 when user is not signed in5588 returns 4045589 when user does not have access5590 returns 4045591 on a merge request5592 returns the award emoji5593 on a snippet5594 returns the awarded emoji5595 GET /projects/:id/awardable/:awardable_id/notes/:note_id/award_emoji/:award_id5596 returns an award emoji5597 when a confidential note5598 with sufficient persmissions5599 returns an award emoji5600 with insufficient permissions5601 returns 4045602 behaves like unauthenticated request to public awardable5603 returns the awarded emoji5604 behaves like request with insufficient permissions5605 when user is not signed in5606 returns 4045607 when user does not have access5608 returns 4045609 POST /projects/:id/awardable/:awardable_id/award_emoji5610 on an issue5611 creates a new award emoji5612 marks Todos on the Issue as done5613 returns a 400 bad request error if the name is not given5614 normalizes +1 as thumbsup award5615 when the emoji already has been awarded5616 returns a 404 status code5617 on a snippet5618 creates a new award emoji5619 behaves like request with insufficient permissions5620 when user is not signed in5621 returns 4045622 when user does not have access5623 returns 4045624 POST /projects/:id/awardable/:awardable_id/notes/:note_id/award_emoji5625 creates a new award emoji5626 marks Todos on the Noteable as done5627 normalizes +1 as thumbsup award5628 when the emoji already has been awarded5629 returns a 404 status code5630 behaves like request with insufficient permissions5631 when user is not signed in5632 returns 4045633 when user does not have access5634 returns 4045635 DELETE /projects/:id/awardable/:awardable_id/award_emoji/:award_id5636 when the awardable is an Issue5637 deletes the award5638 returns a 404 error when the award emoji can not be found5639 behaves like 412 response5640 for a modified ressource5641 returns 412 with a JSON error5642 for an unmodified ressource5643 returns 204 with an empty body5644 when the awardable is a Merge Request5645 deletes the award5646 returns a 404 error when note id not found5647 behaves like 412 response5648 for a modified ressource5649 returns 412 with a JSON error5650 for an unmodified ressource5651 returns 204 with an empty body5652 when the awardable is a Snippet5653 deletes the award5654 behaves like 412 response5655 for a modified ressource5656 returns 412 with a JSON error5657 for an unmodified ressource5658 returns 204 with an empty body5659 behaves like request with insufficient permissions5660 when user is not signed in5661 returns 4045662 when user does not have access5663 returns 4045664 DELETE /projects/:id/awardable/:awardable_id/notes/:note_id/award_emoji/:award_id5665 deletes the award5666 behaves like 412 response5667 for a modified ressource5668 returns 412 with a JSON error5669 for an unmodified ressource5670 returns 204 with an empty body5671 behaves like request with insufficient permissions5672 when user is not signed in5673 returns 4045674 when user does not have access5675 returns 4045676Creation of a new release5677 when the current user has access to create releases5678 when all available mutation arguments are provided5679 returns the new release data5680 behaves like no errors5681 returns no errors5682 when only the required mutation arguments are provided5683 returns the new release data5684 behaves like no errors5685 returns no errors5686 when the provided tag already exists5687 does not create a new tag5688 behaves like no errors5689 returns no errors5690 when the provided tag does not already exist5691 creates a new lightweight tag5692 behaves like no errors5693 returns no errors5694 and tag_message is provided5695 creates a new annotated tag with the message5696 behaves like no errors5697 returns no errors5698 when a local timezone is provided for releasedAt5699 returns the correct releasedAt date in UTC5700 behaves like no errors5701 returns no errors5702 when no releasedAt is provided5703 sets releasedAt to the current time5704 behaves like no errors5705 returns no errors5706 when a release asset doesn't include an explicit linkType5707 defaults the linkType to OTHER5708 behaves like no errors5709 returns no errors5710 when a release asset doesn't include a directAssetPath5711 returns the provided url as the directAssetUrl5712 behaves like no errors5713 returns no errors5714 empty milestones5715 when the milestones parameter is not provided5716 behaves like no associated milestones5717 creates a release with no associated milestones5718 behaves like no errors5719 returns no errors5720 when the milestones parameter is null5721 behaves like no associated milestones5722 creates a release with no associated milestones5723 behaves like no errors5724 returns no errors5725 when the milestones parameter is an empty array5726 behaves like no associated milestones5727 creates a release with no associated milestones5728 behaves like no errors5729 returns no errors5730 validation5731 when a release is already associated to the specified tag5732 behaves like errors-as-data with message5733 returns an error-as-data with message5734 when a provided milestone doesn't exist5735 behaves like errors-as-data with message5736 returns an error-as-data with message5737 when a provided milestone belongs to a different project than the release5738 behaves like errors-as-data with message5739 returns an error-as-data with message5740 when two release assets share the same name5741 behaves like errors-as-data with message5742 returns an error-as-data with message5743 when two release assets share the same URL5744 behaves like errors-as-data with message5745 returns an error-as-data with message5746 when the provided tag name is HEAD5747 behaves like errors-as-data with message5748 returns an error-as-data with message5749 when the provided tag name is empty5750 behaves like errors-as-data with message5751 returns an error-as-data with message5752 when the provided tag doesn't already exist, and no ref parameter was provided5753 behaves like errors-as-data with message5754 returns an error-as-data with message5755 when the current user doesn't have access to create releases5756 when the current user is a Reporter5757 behaves like top-level error with message5758 returns a top-level error with message5759 when the current user is a Guest5760 behaves like top-level error with message5761 returns a top-level error with message5762 when the current user is a public user5763 behaves like top-level error with message5764 returns a top-level error with message5765API::DeployKeys5766 GET /deploy_keys5767 behaves like GET request permissions for admin mode5768 behaves like when admin5769 behaves like makes request5770 returns5771 behaves like makes request5772 returns5773 behaves like when user5774 returns5775 behaves like makes request5776 returns5777 when unauthenticated5778 returns authentication error5779 when authenticated as admin5780 returns all deploy keys5781 avoids N+1 database queries5782 when `public` parameter is `true`5783 only returns public deploy keys5784 projects_with_write_access5785 returns projects with write access5786 GET /projects/:id/deploy_keys5787 returns array of ssh keys5788 returns multiple deploy keys without N + 15789 behaves like GET request permissions for admin mode5790 behaves like when admin5791 behaves like makes request5792 returns5793 behaves like makes request5794 returns5795 behaves like when user5796 returns5797 behaves like makes request5798 returns5799 GET /projects/:id/deploy_keys/:key_id5800 returns a single key5801 returns 404 Not Found with invalid ID5802 behaves like GET request permissions for admin mode5803 behaves like when admin5804 behaves like makes request5805 returns5806 behaves like makes request5807 returns5808 behaves like when user5809 returns5810 behaves like makes request5811 returns5812 POST /projects/:id/deploy_keys5813 does not create an invalid ssh key5814 does not create a key without title5815 creates new ssh key5816 returns an existing ssh key when attempting to add a duplicate5817 joins an existing ssh key to a new project5818 accepts can_push parameter5819 behaves like POST request permissions for admin mode5820 behaves like when admin5821 behaves like makes request5822 returns5823 behaves like makes request5824 returns5825 behaves like when user5826 returns5827 behaves like makes request5828 returns5829 PUT /projects/:id/deploy_keys/:key_id5830 behaves like PUT request permissions for admin mode5831 behaves like when admin5832 behaves like makes request5833 returns5834 behaves like makes request5835 returns5836 behaves like when user5837 returns5838 behaves like makes request5839 returns5840 with non-admin5841 does not update a public deploy key5842 with admin5843 public deploy key attached to project5844 updates the title of the deploy key5845 updates can_push of deploy_keys_project5846 private deploy key5847 updates the title of the deploy key5848 updates can_push of deploy_keys_project5849 invalid title5850 does not update the title of the deploy key5851 with admin as project maintainer5852 public deploy key attached to project5853 updates can_push of deploy_keys_project5854 with admin mode on5855 updates the title of the deploy key5856 with maintainer5857 public deploy key attached to project5858 does not update the title of the deploy key5859 updates can_push of deploy_keys_project5860 DELETE /projects/:id/deploy_keys/:key_id5861 removes existing key from project5862 returns 404 Not Found with invalid ID5863 behaves like DELETE request permissions for admin mode5864 behaves like when admin5865 behaves like makes request5866 returns5867 behaves like makes request5868 returns5869 behaves like when user5870 returns5871 behaves like makes request5872 returns5873 when the deploy key is public5874 does not delete the deploy key5875 when the deploy key is not public5876 when the deploy key is only used by this project5877 deletes the deploy key5878 when the deploy key is used by other projects5879 does not delete the deploy key5880 behaves like 412 response5881 for a modified ressource5882 returns 412 with a JSON error5883 for an unmodified ressource5884 returns 204 with an empty body5885 POST /projects/:id/deploy_keys/:key_id/enable5886 behaves like POST request permissions for admin mode5887 behaves like when admin5888 behaves like makes request5889 returns5890 behaves like makes request5891 returns5892 behaves like when user5893 returns5894 behaves like makes request5895 returns5896 when the user can admin the project5897 enables the key5898 when authenticated as non-admin user5899 returns a 404 error5900Projects::MergeRequests::ConflictsController5901 GET show5902 when the request is html5903 does tracks the resolve call5904 when the conflicts cannot be resolved in the UI5905 returns a 200 status code5906 returns JSON with a message5907 does not track the resolve call5908 with valid conflicts5909 matches the schema5910 includes meta info about the MR5911 includes each file that has conflicts5912 splits files into sections with lines5913 has unique section IDs across files5914 GET conflict_for_path5915 when the conflicts cannot be resolved in the UI5916 returns a 404 status code5917 when the file does not exist cannot be resolved in the UI5918 returns a 404 status code5919 with an existing file5920 returns a 200 and the file in JSON format5921 POST resolve_conflicts5922 with valid params5923 handles the success case5924 when sections are missing5925 handles the error case5926 when files are missing5927 handles the error case5928 when a file has identical content to the conflict5929 handles the error case5930Projects::Settings::CiCdController5931 as a maintainer5932 GET show5933 renders show with 200 status code5934 with CI/CD disabled5935 renders show with 404 status code5936 with assignable project runners5937 sets assignable project runners5938 with project runners5939 sets project runners5940 with group runners5941 sets group runners5942 with instance runners5943 sets shared runners5944 prevents N+1 queries for tags5945 has the same number of queries with one tag or with many tags5946 #reset_cache5947 calls reset project cache service5948 when service returns successfully5949 returns a success header5950 when service does not return successfully5951 returns an error header5952 PUT #reset_registration_token5953 resets runner registration token5954 redirects the user to admin runners page5955 PATCH update5956 redirects to the settings page5957 when updating the auto_devops settings5958 following the instance default5959 allows enabled to be set to nil5960 when run_auto_devops_pipeline is true5961 when the project repository is empty5962 sets a notice flash5963 does not queue a CreatePipelineWorker5964 when the project repository is not empty5965 displays a toast message5966 queues a CreatePipelineWorker5967 creates a pipeline5968 when run_auto_devops_pipeline is not true5969 does not queue a CreatePipelineWorker5970 when updating general settings5971 when build_timeout_human_readable is not specified5972 set default timeout5973 when build_timeout_human_readable is specified5974 set specified timeout5975 when build_timeout_human_readable is invalid5976 set specified timeout5977 when default_git_depth is not specified5978 set specified git depth5979 when forward_deployment_enabled is not specified5980 sets forward deployment enabled5981 when max_artifacts_size is specified5982 and user is not an admin5983 does not set max_artifacts_size5984 and user is an admin5985 with admin mode disabled5986 does not set max_artifacts_size5987 with admin mode enabled5988 sets max_artifacts_size5989 GET #runner_setup_scripts5990 renders the setup scripts5991 renders errors if they occur5992 as a developer5993 responds with 4045994 as a reporter5995 responds with 4045996 as an unauthenticated user5997 redirects to sign in5998Projects::TagsController5999 GET index6000 returns the tags for the page6001 returns releases matching those tags6002 default sort for tags6003 sorts tags by recently updated6004 when Gitaly is unavailable6005 format: :html6006 returns 503 status code6007 format: :atom6008 returns 503 status code6009 @tag_pipeline_status6010 when no pipelines exist6011 is empty6012 when multiple tags exist6013 all relevant commit statuses are received6014 when a tag has multiple pipelines6015 chooses the latest to determine status6016 GET show6017 valid tag6018 is expected to respond with 2006019 invalid tag6020 is expected to respond with 4046021 POST #create6022 creates tag6023 when release description is set6024 creates tag and release6025 passes the last pipeline for evidence creation6026 DELETE #destroy6027 deletes tag and redirects to tags path6028API::ResourceAccessTokens6029 when the resource is a project6030 behaves like resource access token API6031 GET projects/:id/access_tokens6032 when the user has valid permissions6033 gets a list of access tokens for the specified project6034 exposes the correct token information6035 when using a project access token to GET other project access tokens6036 gets a list of access tokens for the specified project6037 when tokens belong to a different project6038 does not return tokens from a different project6039 when the project has no access tokens6040 returns an empty array6041 when trying to get the tokens of a different project6042 returns 4046043 when the project does not exist6044 returns 4046045 when the user does not have valid permissions6046 returns 4016047 GET projects/:id/access_tokens/:token_id6048 when the user has valid permissions6049 gets the project access token from the project6050 when using project access token to GET other project access token6051 gets the project access token from the project6052 when attempting to get a non-existent project access token6053 does not get the token, and returns 4046054 when attempting to get a token that does not belong to the specified project6055 does not get the token, and returns 4046056 when the user does not have valid permissions6057 returns 4016058 DELETE projects/:id/access_tokens/:token_id6059 when the user has valid permissions6060 deletes the project access token from the project6061 when using project access token to DELETE other project access token6062 deletes the project access token from the project6063 when attempting to delete a non-existent project access token6064 does not delete the token, and returns 4046065 when attempting to delete a token that does not belong to the specified project6066 does not delete the token, and returns 4046067 when the user does not have valid permissions6068 does not delete the token, and returns 4006069 POST projects/:id/access_tokens6070 when the user has valid permissions6071 with valid params6072 with full params6073 creates a project access token with the params6074 when 'expires_at' is not set6075 creates a project access token with the params6076 when 'access_level' is not set6077 creates a project access token with the default access level6078 with invalid params6079 when missing the 'name' param6080 does not create a project access token without 'name'6081 when missing the 'scopes' param6082 does not create a project access token without 'scopes'6083 when using invalid 'scopes'6084 does not create a project access token with invalid 'scopes'6085 when using invalid 'access_level'6086 does not create a project access token with invalid 'access_level'6087 when trying to create a token in a different project6088 does not create the token, and returns the project not found error6089 when the user does not have valid permissions6090 when the user role is too low6091 does not create the token, and returns the permission error6092 when a project access token tries to create another project access token6093 does not allow a project access token to create another project access token6094 when the resource is a group6095 behaves like resource access token API6096 GET groups/:id/access_tokens6097 when the user has valid permissions6098 gets a list of access tokens for the specified group6099 exposes the correct token information6100 when using a group access token to GET other group access tokens6101 gets a list of access tokens for the specified group6102 when tokens belong to a different group6103 does not return tokens from a different group6104 when the group has no access tokens6105 returns an empty array6106 when trying to get the tokens of a different group6107 returns 4046108 when the group does not exist6109 returns 4046110 when the user does not have valid permissions6111 returns 4016112 GET groups/:id/access_tokens/:token_id6113 when the user has valid permissions6114 gets the group access token from the group6115 when using group access token to GET other group access token6116 gets the group access token from the group6117 when attempting to get a non-existent group access token6118 does not get the token, and returns 4046119 when attempting to get a token that does not belong to the specified group6120 does not get the token, and returns 4046121 when the user does not have valid permissions6122 returns 4016123 DELETE groups/:id/access_tokens/:token_id6124 when the user has valid permissions6125 deletes the group access token from the group6126 when using group access token to DELETE other group access token6127 deletes the group access token from the group6128 when attempting to delete a non-existent group access token6129 does not delete the token, and returns 4046130 when attempting to delete a token that does not belong to the specified group6131 does not delete the token, and returns 4046132 when the user does not have valid permissions6133 does not delete the token, and returns 4006134 POST groups/:id/access_tokens6135 when the user has valid permissions6136 with valid params6137 with full params6138 creates a group access token with the params6139 when 'expires_at' is not set6140 creates a group access token with the params6141 when 'access_level' is not set6142 creates a group access token with the default access level6143 with invalid params6144 when missing the 'name' param6145 does not create a group access token without 'name'6146 when missing the 'scopes' param6147 does not create a group access token without 'scopes'6148 when using invalid 'scopes'6149 does not create a group access token with invalid 'scopes'6150 when using invalid 'access_level'6151 does not create a group access token with invalid 'access_level'6152 when trying to create a token in a different group6153 does not create the token, and returns the group not found error6154 when the user does not have valid permissions6155 when the user role is too low6156 does not create the token, and returns the permission error6157 when a group access token tries to create another group access token6158 does not allow a group access token to create another group access token6159container repository details6160 behaves like a working graphql query6161 returns a successful response6162 matches the JSON schema6163 with different permissions6164 project_visibility: :private, role: :maintainer, access_granted: true, can_delete: true6165 return the proper response6166 project_visibility: :private, role: :developer, access_granted: true, can_delete: true6167 return the proper response6168 project_visibility: :private, role: :reporter, access_granted: true, can_delete: false6169 return the proper response6170 project_visibility: :private, role: :guest, access_granted: false, can_delete: false6171 return the proper response6172 project_visibility: :private, role: :anonymous, access_granted: false, can_delete: false6173 return the proper response6174 project_visibility: :public, role: :maintainer, access_granted: true, can_delete: true6175 return the proper response6176 project_visibility: :public, role: :developer, access_granted: true, can_delete: true6177 return the proper response6178 project_visibility: :public, role: :reporter, access_granted: true, can_delete: false6179 return the proper response6180 project_visibility: :public, role: :guest, access_granted: true, can_delete: false6181 return the proper response6182 project_visibility: :public, role: :anonymous, access_granted: true, can_delete: false6183 return the proper response6184 with a giant size tag6185 returns the expected value as a string6186 limiting the number of tags6187 only returns n tags6188 sorting the tags6189 sorts the tags6190 invalid sort6191 behaves like returning an invalid value error6192 returns an error6193 filtering by name6194 sorts the tags6195 invalid filter6196 behaves like returning an invalid value error6197 returns an error6198 size field6199 returns the size6200 with a network error6201 returns an error6202 with not supporting the gitlab api6203 returns nil6204 not on .com6205 returns nil6206 with an older container repository6207 returns nil6208 with tags with a manifest containing nil fields6209 returns a list of tags with a nil digest6210 returns a list of tags with a nil revision6211 returns a list of tags with a nil short_revision6212 returns a list of tags with a nil total_size6213 returns a list of tags with a nil created_at6214 behaves like handling graphql network errors with the container registry6215 returns a connection error6216Toggling an AwardEmoji6217 when the user has permission6218 when the given awardable is not an Awardable6219 behaves like a mutation that does not create or destroy an AwardEmoji6220 is expected not to change `AwardEmoji.count`6221 behaves like a mutation that returns top-level errors6222 is expected to include /was provided invalid value for awardableId/6223 when the given awardable is an Awardable but still cannot be awarded an emoji6224 behaves like a mutation that does not create or destroy an AwardEmoji6225 is expected not to change `AwardEmoji.count`6226 behaves like a mutation that returns top-level errors6227 is expected to contain exactly "You cannot award emoji to this resource."6228 when the given awardable is an Awardable6229 when no emoji has been awarded by the current_user yet6230 creates an emoji6231 returns the emoji6232 returns toggledOn as true6233 marking Todos as done6234 type: :issue, expectation: true6235 is expected to eq true6236 type: :merge_request, expectation: true6237 is expected to eq true6238 type: :project_snippet, expectation: false6239 is expected to eq false6240 for notes6241 regular Notes6242 marks the Todo as done6243 PersonalSnippet Notes6244 does not mark the Todo as done6245 when there were active record validation errors6246 returns an empty awardEmoji6247 behaves like a mutation that does not create or destroy an AwardEmoji6248 is expected not to change `AwardEmoji.count`6249 behaves like a mutation that returns errors in the response6250 is expected to contain exactly "Error 1" and "Error 2"6251 when an emoji has been awarded by the current_user6252 removes the emoji6253 returns no errors6254 returns an empty awardEmoji6255 returns toggledOn as false6256 when the user does not have permission6257 behaves like a mutation that does not create or destroy an AwardEmoji6258 is expected not to change `AwardEmoji.count`6259 behaves like a mutation that returns a top-level access error6260 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"6261Groups::ReleasesController6262 GET #index6263 as json6264 json_response6265 returns an application/json content_type6266 returns OK6267 the user is not authorized6268 does not return any releases6269 returns OK6270 the user is authorized6271 returns all group's public and private project's releases as JSON, ordered by released_at6272 N+1 queries6273 avoids N+1 database queries6274API::DraftNotes6275 # order random6276 Get a list of merge request draft notes6277 returns 200 OK status6278 returns only draft notes authored by the current user6279 delete a draft note6280 when deleting an existing draft note by the user6281 returns 204 No Content status6282 deletes the specified draft note6283 when deleting a non-existent draft note6284 returns a 404 Not Found6285 when deleting a draft note by a different user6286 returns a 404 Not Found6287 Bulk publishing draft notes6288 when publishing an existing draft note by the user6289 returns 204 No Content status6290 publishes the specified draft notes6291 only publishes the user's draft notes6292 when DraftNotes::PublishService returns a non-success6293 returns an :internal_server_error and a message6294 Create a new draft note6295 when creating a new draft note6296 with required params6297 returns 201 Created status6298 creates a new draft note with the submitted params6299 without required params6300 returns 400 Bad Request status6301 when providing a non-existing commit_id6302 returns a 400 Bad Request6303 when targeting a merge request the user doesn't have access to6304 returns a 404 Not Found6305 when attempting to resolve a disscussion6306 when providing a non-existant ID6307 returns a 400 Bad Request6308 when not providing an ID6309 returns a 400 Bad Request6310 returns a validation error message6311 Update a draft note6312 when updating an existing draft note6313 with required params6314 returns 200 Success status6315 updates draft note with the new content6316 without including an update to the note body6317 returns the draft note with no changes6318 when updating a non-existent draft note6319 returns a 404 Not Found6320 when updating a draft note by a different user6321 returns a 404 Not Found6322 Publishing a draft note6323 when publishing an existing draft note by the user6324 returns 204 No Content status6325 publishes the specified draft note6326 when publishing a non-existent draft note6327 returns a 404 Not Found6328 when publishing a draft note by a different user6329 returns a 404 Not Found6330 when DraftNotes::PublishService returns a non-success6331 returns an :internal_server_error and a message6332 Get a single draft note6333 when requesting an existing draft note by the user6334 returns 200 OK status6335 returns the requested draft note6336 when requesting a non-existent draft note6337 returns a 404 Not Found response6338 when requesting an existing draft note by another user6339 returns a 404 Not Found response6340API::SystemHooks6341 behaves like web-hook API endpoints6342 GET /hooks6343 authorized user6344 returns all hooks6345 when user is forbidden6346 prevents access to hooks6347 when user is unauthorized6348 prevents access to hooks6349 the hook has URL variables6350 returns the names of the url variables6351 GET /hooks/:hook_id6352 authorized user6353 returns a project hook6354 returns a 404 error if hook id is not available6355 the hook is disabled6356 has the correct alert status6357 the hook is backed-off6358 has the correct alert status6359 when user is forbidden6360 does not access an existing hook6361 when user is unauthorized6362 does not access an existing hook6363 POST /hooks6364WARNING: ignoring the provided expectation message argument (:push_events) since it is not a string or a proc.6365WARNING: ignoring the provided expectation message argument (:tag_push_events) since it is not a string or a proc.6366WARNING: ignoring the provided expectation message argument (:merge_requests_events) since it is not a string or a proc.6367WARNING: ignoring the provided expectation message argument (:repository_update_events) since it is not a string or a proc.6368 adds hook6369 adds the token without including it in the response6370 returns a 400 error if url not given6371 returns a 400 error if no parameters are provided6372WARNING: ignoring the provided expectation message argument (:push_events) since it is not a string or a proc.6373WARNING: ignoring the provided expectation message argument (:tag_push_events) since it is not a string or a proc.6374WARNING: ignoring the provided expectation message argument (:merge_requests_events) since it is not a string or a proc.6375WARNING: ignoring the provided expectation message argument (:repository_update_events) since it is not a string or a proc.6376 sets default values for events6377 returns a 422 error if token not valid6378 returns a 422 error if url not valid6379 PUT /hooks/:hook_id6380 updates an existing hook6381 updates the URL variables6382 adds the token without including it in the response6383 returns 404 error if hook id not found6384 returns 400 error if no parameters are provided6385 returns a 422 error if url is not valid6386 returns a 422 error if token is not valid6387 DELETE /projects/:id/hooks/:hook_id6388 deletes hook from project6389 returns a 404 error when deleting non existent hook6390 returns a 404 error if hook id not given6391 returns forbidden if a user attempts to delete hooks they do not own6392 behaves like 412 response6393 for a modified ressource6394 returns 412 with a JSON error6395 for an unmodified ressource6396 returns 204 with an empty body6397 PUT /hooks/:hook_id/url_variables/:key6398 sets the variable6399 overwrites existing values6400 returns a 404 error when editing non existent hook6401 returns a 422 error when the key is illegal6402 returns a 422 error when the value is illegal6403 DELETE /hooks/:hook_id/url_variables/:key6404 unsets the variable6405 returns 404 for keys that do not exist6406 returns a 404 error when deleting a variable from a non existent hook6407 behaves like web-hook API endpoints test hook6408 POST /:hook_id6409 tests the hook6410API::Topics6411 GET /topics6412 returns topics ordered by total_projects_count6413 with without_projects6414 returns topics without assigned projects6415 returns topics without assigned projects6416 with search6417 search: "", result: ["other-topic", "GitLab", "Git"]6418 returns filtered topics6419 search: "g", result: []6420 returns filtered topics6421 search: "gi", result: []6422 returns filtered topics6423 search: "git", result: ["Git", "GitLab"]6424 returns filtered topics6425 search: "x", result: []6426 returns filtered topics6427 search: 0, result: []6428 returns filtered topics6429 with pagination6430 params: {:page=>0}, result: ["other-topic", "GitLab", "Git"]6431 returns paginated topics6432 params: {:page=>1}, result: ["other-topic", "GitLab", "Git"]6433 returns paginated topics6434 params: {:page=>2}, result: []6435 returns paginated topics6436 params: {:per_page=>1}, result: ["other-topic"]6437 returns paginated topics6438 params: {:per_page=>2}, result: ["other-topic", "GitLab"]6439 returns paginated topics6440 params: {:per_page=>3}, result: ["other-topic", "GitLab", "Git"]6441 returns paginated topics6442 params: {:page=>0, :per_page=>1}, result: ["other-topic"]6443 returns paginated topics6444 params: {:page=>0, :per_page=>2}, result: ["other-topic", "GitLab"]6445 returns paginated topics6446 params: {:page=>1, :per_page=>1}, result: ["other-topic"]6447 returns paginated topics6448 params: {:page=>1, :per_page=>2}, result: ["other-topic", "GitLab"]6449 returns paginated topics6450 params: {:page=>2, :per_page=>1}, result: ["GitLab"]6451 returns paginated topics6452 params: {:page=>2, :per_page=>2}, result: ["Git"]6453 returns paginated topics6454 params: {:page=>3, :per_page=>1}, result: ["Git"]6455 returns paginated topics6456 params: {:page=>3, :per_page=>2}, result: []6457 returns paginated topics6458 params: {:page=>4, :per_page=>1}, result: []6459 returns paginated topics6460 params: {:page=>4, :per_page=>2}, result: []6461 returns paginated topics6462 GET /topic/:id6463 returns topic6464 returns 404 for non existing id6465 returns 400 for invalid `id` parameter6466 POST /topics6467 behaves like POST request permissions for admin mode6468 behaves like when admin6469 behaves like makes request6470 returns6471 behaves like makes request6472 returns6473 behaves like when user6474 returns6475 behaves like makes request6476 returns6477 as administrator6478 creates a topic6479 creates a topic with avatar and description6480 returns 400 if name is missing6481 returns 400 if name is not unique (case insensitive)6482 returns 400 if title is missing6483 as normal user6484 returns 403 Forbidden6485 as anonymous6486 returns 401 Unauthorized6487 PUT /topics6488 behaves like PUT request permissions for admin mode6489 behaves like when admin6490 behaves like makes request6491 returns6492 behaves like makes request6493 returns6494 behaves like when user6495 returns6496 behaves like makes request6497 returns6498 as administrator6499 updates a topic6500 updates a topic with avatar and description6501 keeps avatar when updating other fields6502 returns 404 for non existing id6503 returns 400 for invalid `id` parameter6504 with blank avatar6505 removes avatar6506 removes avatar besides other changes6507 does not remove avatar in case of other errors6508 as normal user6509 returns 403 Forbidden6510 as anonymous6511 returns 401 Unauthorized6512 DELETE /topics/:id6513 as administrator6514 deletes a topic with admin mode6515 deletes a topic without admin mode6516 returns 404 for non existing id6517 returns 400 for invalid `id` parameter6518 as normal user6519 returns 403 Forbidden6520 as anonymous6521 returns 401 Unauthorized6522 POST /topics/merge6523 behaves like POST request permissions for admin mode6524 behaves like when admin6525 behaves like makes request6526 returns6527 behaves like makes request6528 returns6529 behaves like when user6530 returns6531 behaves like makes request6532 returns6533 as administrator6534 merge topics6535 returns 404 for non existing source topic id6536 returns 404 for non existing target topic id6537 returns 400 for identical topic ids6538 returns 400 if merge failed6539 as normal user6540 returns 403 Forbidden6541 as anonymous6542 returns 401 Unauthorized6543conan package details6544 has the correct metadata6545 has the correct file metadata6546 behaves like a package detail6547 behaves like a working graphql query6548 returns a successful response6549 behaves like matching the package details schema6550 matches the JSON schema6551 with pipelines6552 behaves like a working graphql query6553 returns a successful response6554 behaves like matching the package details schema6555 matches the JSON schema6556 behaves like a package with files6557 has the right amount of files6558 has the basic package files data6559 with package files pending destruction6560 does not return them6561API::Admin::Ci::Variables6562 GET /admin/ci/variables6563 returns instance-level variables for admins6564 does not return instance-level variables for unauthorized users6565 behaves like GET request permissions for admin mode6566 behaves like when admin6567 behaves like makes request6568 returns6569 behaves like makes request6570 returns6571 behaves like when user6572 returns6573 behaves like makes request6574 returns6575 GET /admin/ci/variables/:key6576 returns instance-level variable details for admins6577 responds with 404 Not Found if requesting non-existing variable6578 does not return instance-level variable details for unauthorized users6579 behaves like GET request permissions for admin mode6580 behaves like when admin6581 behaves like makes request6582 returns6583 behaves like makes request6584 returns6585 behaves like when user6586 returns6587 behaves like makes request6588 returns6589 POST /admin/ci/variables6590 behaves like POST request permissions for admin mode6591 behaves like when admin6592 behaves like makes request6593 returns6594 behaves like makes request6595 returns6596 behaves like when user6597 returns6598 behaves like makes request6599 returns6600 authorized user with proper permissions6601 creates variable for admins6602 masks the new value when logging6603 creates variable with optional attributes6604 does not allow to duplicate variable key6605 does not allow values above 10,000 characters6606 unauthorized user6607 does not create variable6608 PUT /admin/ci/variables/:key6609 behaves like PUT request permissions for admin mode6610 behaves like when admin6611 behaves like makes request6612 returns6613 behaves like makes request6614 returns6615 behaves like when user6616 returns6617 behaves like makes request6618 returns6619 authorized user with proper permissions6620 updates variable data6621 masks the new value when logging6622 responds with 404 Not Found if requesting non-existing variable6623 unauthorized user6624 does not update variable6625 DELETE /admin/ci/variables/:key6626 behaves like DELETE request permissions for admin mode6627 behaves like when admin6628 behaves like makes request6629 returns6630 behaves like makes request6631 returns6632 behaves like when user6633 returns6634 behaves like makes request6635 returns6636 authorized user with proper permissions6637 deletes variable6638 responds with 404 Not Found if requesting non-existing variable6639 unauthorized user6640 does not delete variable6641ProjectsController6642 token authentication6643 when public project6644 behaves like authenticates sessionless user for the request spec6645 show atom6646 when the 'private_token' param is populated with the personal access token6647 when valid token6648 when resource is public6649 authenticates user and returns response with ok status6650 when user with expired password6651 does not authenticate user and returns response with ok status6652 when the personal access token has no api scope6653 when resource is public6654 does not authenticate user and returns response with ok status6655 when invalid token6656 when resource is public6657 does not authenticate user and returns response with ok status6658 when the 'PRIVATE-TOKEN' header is populated with the personal access token6659 when valid token6660 when resource is public6661 authenticates user and returns response with ok status6662 when user with expired password6663 does not authenticate user and returns response with ok status6664 when the personal access token has no api scope6665 when resource is public6666 does not authenticate user and returns response with ok status6667 when invalid token6668 when resource is public6669 does not authenticate user and returns response with ok status6670 when the 'feed_token' param is populated with the feed token6671 when valid token6672 when resource is public6673 authenticates user and returns response with ok status6674 when user with expired password6675 does not authenticate user and returns response with ok status6676 when invalid token6677 when resource is public6678 does not authenticate user and returns response with ok status6679 when private project6680 behaves like authenticates sessionless user for the request spec6681 show atom6682 when the 'private_token' param is populated with the personal access token6683 when valid token6684 when resource is private6685 authenticates user and returns response with ok status6686 when user with expired password6687 does not return response with ok status6688 when password expiration is not applicable6689 when ldap user6690 authenticates user and returns response with ok status6691 when the personal access token has no api scope6692 when resource is private6693 does not return response with ok status6694 when invalid token6695 when resource is private6696 does not return response with ok status6697 when the 'PRIVATE-TOKEN' header is populated with the personal access token6698 when valid token6699 when resource is private6700 authenticates user and returns response with ok status6701 when user with expired password6702 does not return response with ok status6703 when password expiration is not applicable6704 when ldap user6705 authenticates user and returns response with ok status6706 when the personal access token has no api scope6707 when resource is private6708 does not return response with ok status6709 when invalid token6710 when resource is private6711 does not return response with ok status6712 when the 'feed_token' param is populated with the feed token6713 when valid token6714 when resource is private6715 authenticates user and returns response with ok status6716 when user with expired password6717 does not return response with ok status6718 when password expiration is not applicable6719 when ldap user6720 authenticates user and returns response with ok status6721 when invalid token6722 when resource is private6723 does not return response with ok status6724Getting designs related to an issue6725 when the feature is available6726 returns the design properties correctly6727 when the v432x230-sized design image has not been processed6728 returns nil for the v432x230-sized design image6729 pagination6730 sorts designs for reliable pagination6731 with versions6732 includes the version id6733 includes the version sha6734 viewing a design board at a particular version6735 viewing the original version, when one design was created6736 only returns the first design6737 returns the correct full-sized design image6738 returns the correct v432x230-sized design image6739 returns the correct event for the design in this version6740 only returns one version record for the design (the original version)6741 viewing the second version, when one design was created6742 only returns the first two designs6743 returns the correct full-sized design images6744 returns the correct v432x230-sized design images6745 returns the correct events for the designs in this version6746 returns the correct versions records for both designs6747 viewing the last version, when one design was deleted and one was updated6748 does not include the deleted design6749 returns the correct full-sized design images6750 returns the correct v432x230-sized design images6751 returns the correct events for the designs in this version6752 returns all versions records for the designs6753 a design with note annotations6754 returns the notes for the design6755 returns a note_count for the design6756Destroying multiple package files6757 post graphql mutation6758 with valid params6759 user_role: :maintainer, shared_examples_name: "destroying the package files"6760 behaves like destroying the package files6761 marks the package file as pending destruction6762 behaves like returning response status6763 returns success6764 user_role: :developer, shared_examples_name: "denying the mutation request"6765 behaves like denying the mutation request6766 does not mark the package file as pending destruction6767 behaves like returning response status6768 returns success6769 user_role: :reporter, shared_examples_name: "denying the mutation request"6770 behaves like denying the mutation request6771 does not mark the package file as pending destruction6772 behaves like returning response status6773 returns success6774 user_role: :guest, shared_examples_name: "denying the mutation request"6775 behaves like denying the mutation request6776 does not mark the package file as pending destruction6777 behaves like returning response status6778 returns success6779 user_role: :anonymous, shared_examples_name: "denying the mutation request"6780 behaves like denying the mutation request6781 does not mark the package file as pending destruction6782 behaves like returning response status6783 returns success6784 with more than 100 files6785 behaves like denying the mutation request6786 does not mark the package file as pending destruction6787 behaves like returning response status6788 returns success6789 with files outside of the project6790 behaves like denying the mutation request6791 does not mark the package file as pending destruction6792 behaves like returning response status6793 returns success6794 with invalid params6795 behaves like denying the mutation request6796 does not mark the package file as pending destruction6797 behaves like returning response status6798 returns success6799Merge Requests Diffs6800 GET diffs_batch6801 without caching6802 behaves like serializes diffs with expected arguments6803 serializes paginated merge request diff collection6804 with caching6805 does not serialize diffs6806 with the different user6807 behaves like serializes diffs with expected arguments6808 serializes paginated merge request diff collection6809 with a new unfoldable diff position6810 behaves like serializes diffs with expected arguments6811 serializes paginated merge request diff collection6812 with diff_head option6813 behaves like serializes diffs with expected arguments6814 serializes paginated merge request diff collection6815 with the different pagination option6816 behaves like serializes diffs with expected arguments6817 serializes paginated merge request diff collection6818 with the different diff_view6819 behaves like serializes diffs with expected arguments6820 serializes paginated merge request diff collection6821 with the different expanded option6822 behaves like serializes diffs with expected arguments6823 serializes paginated merge request diff collection6824 with the different ignore_whitespace_change option6825 behaves like serializes diffs with expected arguments6826 serializes paginated merge request diff collection6827 when the paths is given6828 when using ETag caching6829 does not serialize diffs6830 when not using ETag caching6831 does not use cache6832getting incident timeline events6833 # order random6834 returns the correct number of timeline events6835 returns the correct properties of the incident timeline events6836 when filtering by id6837 returns a single timeline event6838 behaves like a working graphql query6839 returns a successful response6840 behaves like a working graphql query6841 returns a successful response6842 when timelineEvent tags are linked6843 returns the set tags6844 behaves like a working graphql query6845 returns a successful response6846 when different timeline events are loaded6847 avoids N+1 queries6848getting notes for a merge request6849 behaves like exposing regular notes on a noteable in GraphQL6850 for regular notes6851 includes the note6852 behaves like a working graphql query6853 returns a successful response6854 for discussions6855 includes all discussion notes6856 behaves like a working graphql query6857 returns a successful response6858 diff notes on a merge request6859 includes the note6860 behaves like a working graphql query6861 returns a successful response6862 the position of the diffnote6863 includes a correct position6864 with a note on an image6865 includes a correct position6866Projects::Registry::TagsController6867 GET index6868 when user can control the registry6869 receive a list of tags6870 tracks the event6871 when user can read the registry6872 receive a list of tags6873 when user does not have access to registry6874 does not receive a list of tags6875 POST destroy6876 when user has access to registry6877 when there is matching tag present6878 makes it possible to delete regular tag6879 makes it possible to delete a tag that ends with a dot6880 tracks the event6881 POST bulk_destroy6882 when user has access to registry6883 when there is matching tag present6884 makes it possible to delete tags in bulk6885 tracks the event6886package details6887 has the correct metadata6888 does not have files6889 behaves like a package detail6890 behaves like a working graphql query6891 returns a successful response6892 behaves like matching the package details schema6893 matches the JSON schema6894 with pipelines6895 behaves like a working graphql query6896 returns a successful response6897 behaves like matching the package details schema6898 matches the JSON schema6899Groups::VariablesController6900 GET #show6901 renders the variables as json6902 has only one variable6903 when the user is a maintainer6904 returns not found response6905 PATCH #update6906 with invalid new variable parameters6907 does not update the existing variable6908 does not create the new variable6909 returns a bad request response6910 with duplicate new variable parameters6911 does not update the existing variable6912 does not create the new variable6913 returns a bad request response6914 with valid new variable parameters6915 updates the existing variable6916 creates the new variable6917 returns a successful response6918 has all variables in response6919 with a deleted variable6920 destroys the variable6921 returns a successful response6922 has all variables in response6923 with missing variable6924 returns not found response6925 for variables of type file6926 creates new variable of type file6927 when the user is a maintainer6928 returns not found response6929 with external authorization enabled6930 GET #show6931 is successful6932 PATCH #update6933 is successful6934JiraConnect::SubscriptionsController6935 #index6936 without JWT6937 returns 4036938 with valid JWT6939 returns 2006940 removes X-Frame-Options to allow rendering in iframe6941 with JSON format6942 renders the relevant data as JSON6943 when not signed in to GitLab6944 contains a login path6945 when signed in to GitLab6946 does not contain a login path6947 with context qsh6948 is expected to respond with numeric status code ok6949 #create6950 without JWT6951 returns 4036952 with valid JWT6953 signed in to GitLab6954 dev panel integration is available6955 creates a subscription6956 returns 2006957 when the Jira user is not a site-admin6958 returns forbidden6959 not signed in to GitLab6960 returns 4016961 #destroy6962 without JWT6963 returns 4036964 with valid JWT6965 deletes the subscription6966 when the Jira user is not a site admin6967 does not delete the subscription6968Setting assignees of a merge request6969 returns an error if the user is not allowed to update the merge request6970 reviewer does not exist6971 returns an error6972 reviewer exists6973 does not return an error6974Profiles::AccountsController6975 DELETE unlink6976 renders 404 if someone tries to unlink a non existent provider6977 saml provider6978 does not allow to unlink connected account6979 cas3 provider6980 does not allow to unlink connected account6981 twitter provider6982 allows to unlink connected account6983 facebook provider6984 allows to unlink connected account6985 google_oauth2 provider6986 allows to unlink connected account6987 gitlab provider6988 allows to unlink connected account6989 github provider6990 allows to unlink connected account6991 bitbucket provider6992 allows to unlink connected account6993 crowd provider6994 allows to unlink connected account6995 auth0 provider6996 allows to unlink connected account6997 dingtalk provider6998 allows to unlink connected account6999 alicloud provider7000 allows to unlink connected account7001 atlassian_oauth2 provider7002 allows a user to unlink a connected account7003MetricsDashboard7004 GET #metrics_dashboard7005 when no parameters are provided7006 returns an error json_response7007 when params are provided7008 returns the specified dashboard7009 when the params are in an alternate format7010 returns the specified dashboard7011 when environment for dashboard is available7012 returns the specified dashboard7013 when dashboard path includes encoded characters7014 decodes dashboard path7015 when parameters are provided and the list of all dashboards is required7016 returns a dashboard in addition to the list of dashboards7017 in all_dashboard list7018 includes project_blob_path only for project dashboards7019 allows editing only for project dashboards7020 includes out_of_the_box_dashboard key7021 project permissions7022 can_collaborate: false, system_can_edit: false, project_can_edit: false7023 sets can_edit appropriately7024 can_collaborate: true, system_can_edit: false, project_can_edit: true7025 sets can_edit appropriately7026 starred dashboards7027 adds starred dashboard information and sorts the list7028Groups::SharedProjectsController7029 GET #index7030 returns only projects shared with the group7031 allows filtering shared projects7032 allows sorting projects7033 does not include archived projects7034merge request content spec7035 GET cached_widget7036 behaves like cached widget request7037 avoids N+1 queries when multiple job artifacts are present7038 with non_public_artifacts disabled7039 behaves like cached widget request7040 avoids N+1 queries when multiple job artifacts are present7041API::Ci::Runner7042 /api/v4/runners7043 POST /api/v4/runners7044 when no token is provided7045 returns 400 error7046 when invalid token is provided7047 returns 403 error7048 when valid parameters are provided7049 when token_expires_at is nil7050 creates runner7051 when token_expires_at is a valid date7052 creates runner7053 behaves like storing arguments in the application context for the API7054 places the expected params in the application context7055 behaves like not executing any extra queries for the application context7056 does not execute more queries than without adding anything to the application context7057 when deprecated maintainer_note field is provided7058 converts to maintenance_note param7059 when deprecated active parameter is provided7060 uses active value in registration7061 calling actual register service7062 sets the runner's ip_address7063 when info parameter 'name' info is present7064 updates provided Runner's parameter7065 when info parameter 'version' info is present7066 updates provided Runner's parameter7067 when info parameter 'revision' info is present7068 updates provided Runner's parameter7069 when info parameter 'platform' info is present7070 updates provided Runner's parameter7071 when info parameter 'architecture' info is present7072 updates provided Runner's parameter7073 when tags parameter is provided7074 with number of tags above limit7075 uses tag_list value in registration and returns error7076 with number of tags below limit7077 uses tag_list value in registration and successfully creates runner7078Destroying a Note7079 when the user does not have permission7080 does not destroy the Note7081 behaves like a mutation that returns a top-level access error7082 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"7083 when the user has permission7084 destroys the Note7085 returns an empty Note7086 behaves like a Note mutation when the given resource id is not for a Note7087 behaves like a mutation that returns top-level errors7088 is expected to include /does not represent an instance of Note/7089 when note is system7090 does not destroy system note7091 without notes widget7092 does not update the Note7093 behaves like a mutation that returns top-level errors7094 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"7095Projects::ReleasesController7096 GET #downloads7097 filepath redirection7098 valid filepath7099 redirects to the asset direct link7100 redirects with a status of 3027101 invalid filepath7102 is not found7103 sessionless download authentication7104 will allow sessionless users to download the file7105 invalid filepath7106 cannot create an invalid filepath7107rendering namespace statistics7108 behaves like a working namespace with storage statistics query7109 includes the packages size if the user can read the statistics7110 includes uploads size if the user can read the statistics7111 behaves like a working graphql query7112 returns a successful response7113 when the namespace is a group7114 behaves like a working namespace with storage statistics query7115 includes the packages size if the user can read the statistics7116 includes uploads size if the user can read the statistics7117 behaves like a working graphql query7118 returns a successful response7119 when the namespace is public7120 hides statistics for unauthenticated requests7121Query.project(fullPath).pipelines.job(id)7122 scalar fields7123 retrieves scalar fields7124 when fetching by name7125 retrieves scalar fields7126 .detailedStatus7127 retrieves detailed status7128 .stage7129 returns appropriate data7130Projects::Environments::PrometheusApiController7131 GET #prometheus_proxy7132 behaves like metrics dashboard prometheus api proxy7133 with valid requests7134 with success result7135 returns prometheus response7136 with nil query7137 does not raise error7138 with nil result7139 returns 204 no_content7140 with 404 result7141 returns body7142 with error result7143 with http_status7144 sets the http response status code7145 without http_status7146 returns bad_request7147 with inappropriate requests7148 without correct permissions7149 returns 4047150 with invalid proxyable id7151 returns 4047152 with variables7153 replaces variables with values7154 with invalid variables7155 returns 4007156 with anonymous user7157 redirects to signin page7158 with a public project7159 with guest user7160 returns 4047161Import::ManifestController7162 POST upload7163 with a valid manifest7164 saves the manifest and redirects to the status page7165 with an invalid manifest7166 displays an error7167 when the user cannot create projects in the group7168 displays an error7169 GET status7170 when the data is stored via Gitlab::ManifestImport::Metadata7171 returns variables for json request7172 when the data is stored in the user session7173 returns variables for json request7174API::Pages7175 DELETE /projects/:id/pages7176 behaves like DELETE request permissions for admin mode7177 behaves like when admin7178 behaves like makes request7179 returns7180 behaves like makes request7181 returns7182 behaves like when user7183 returns7184 behaves like makes request7185 returns7186 when Pages is disabled7187 behaves like 404 response7188 returns 4047189 when Pages is enabled7190 when Pages are deployed7191 returns 2047192 removes the pages7193 when pages are not deployed7194 returns 2047195 when there is no project7196 returns 4047197PageLimiter7198 #limit_pages7199 max_page: 2, actual_page: 1, result: nil7200 returns the expected result7201 max_page: 2, actual_page: 2, result: nil7202 returns the expected result7203 max_page: 2, actual_page: 3, result: PageLimiter::PageOutOfBoundsError7204 returns the expected result7205 max_page: nil, actual_page: 1, result: PageLimiter::PageLimitNotANumberError7206 returns the expected result7207 max_page: 0, actual_page: 1, result: PageLimiter::PageLimitNotSensibleError7208 returns the expected result7209 max_page: -1, actual_page: 1, result: PageLimiter::PageLimitNotSensibleError7210 returns the expected result7211 #default_page_out_of_bounds_response7212 returns a bad_request header7213 #record_page_limit_interception7214 creates a metric counter7215 increments the counter7216getting list of branch rules for a project7217 # order random7218 when the user does have read_protected_branch abilities7219 queries7220 avoids N+1 queries7221 response7222 includes all fields7223 behaves like a working graphql query7224 returns a successful response7225 when limiting the number of results7226 returns pagination information7227 behaves like a working graphql query7228 returns a successful response7229 when no limit is provided7230 returns all branch_rules7231 when the user does not have read_protected_branch abilities7232 hides branch rules data7233 behaves like a working graphql query7234 returns a successful response7235Starting a Jira Import7236 when the user does not have permission7237 with anonymous user7238 behaves like Jira import does not start7239 does not start the Jira import7240 behaves like a mutation that returns top-level errors7241 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"7242 with user without permissions7243 behaves like Jira import does not start7244 does not start the Jira import7245 behaves like a mutation that returns top-level errors7246 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"7247 when the user has permission7248 with project7249 when the project path is invalid7250 returns an an error7251 when project has no Jira integration7252 behaves like a mutation that returns errors in the response7253 is expected to contain exactly "Jira integration not configured."7254 when when project has Jira integration7255 when issues feature are disabled7256 behaves like a mutation that returns errors in the response7257 is expected to contain exactly "Cannot import because issues are not available in this project."7258 when jira_project_key not provided7259 behaves like a mutation that returns errors in the response7260 is expected to contain exactly "Unable to find Jira project to import data from."7261 when Jira import successfully scheduled7262 schedules a Jira import7263Groups::BoardsController7264 GET index7265 creates a new board when group does not have one7266 when format is HTML7267 renders template7268 with unauthorized user7269 returns a not found 404 response7270 when user is signed out7271 renders template7272 behaves like disabled when using an external authorization service7273 works when the feature is not enabled7274 renders a 404 with a message when the feature is enabled7275 GET show7276 when format is HTML7277 renders template7278 with unauthorized user7279 returns a not found 404 response7280 when user is signed out7281 does not save visit7282 when board does not belong to group7283 returns a not found 404 response7284 behaves like disabled when using an external authorization service7285 works when the feature is not enabled7286 renders a 404 with a message when the feature is enabled7287rendering project statistics7288 includes the packages size if the user can read the statistics7289 includes uploads size if the user can read the statistics7290 behaves like a working graphql query7291 returns a successful response7292 when the project is public7293 hides statistics for unauthenticated requests7294Projects::Analytics::CycleAnalytics::SummaryController7295 GET "show"7296 succeeds7297 when analytics_disabled features are disabled7298 renders 4047299 when user is not part of the project7300 renders 4047301 when filters are applied7302 filters by author username7303 filters by milestone title7304getting a detailed sentry error7305 behaves like a working graphql query7306 returns a successful response7307 when data is loading via reactive cache7308 is expected to return an empty error7309 reactive cache returns data7310 is expected to return a valid error7311 is expected to return the frequency correctly7312Query.project.pipeline.stages7313 returns the stage of a pipeline7314 behaves like a working graphql query7315 returns a successful response7316 job pagination7317 returns up to default limit jobs per stage7318 when the limit is manually set7319 returns up to custom limit jobs per stage7320PipelineSchedulecreate7321 # order random7322 when authorized7323 when success7324 is expected to eq []7325 when failure7326 when params are invalid7327 is expected to contain exactly "Cron is invalid syntax" and "Cron timezone is invalid syntax"7328 when variables have duplicate name7329 returns error7330 when unauthorized7331 returns an error7332KasCookie7333 # order random7334 #content_security_policy7335 when feature flag is disabled7336 does not add KAS url to connect-src directives7337 when feature flag is enabled7338 when KAS is on same domain as rails7339 does not add KAS url to CSP connect-src directive7340 when KAS is on subdomain7341 adds KAS url to CSP connect-src directive7342 when KAS tunnel url is configured without trailing slash7343 adds KAS url to CSP connect-src directive with trailing slash7344 #set_kas_cookie7345 when user is signed out7346 is expected to be blank7347 when user is signed in7348 sets the KAS cookie7349 when feature flag is disabled7350 is expected to be blank7351Query.synthetic_note(noteable_id, sha)7352 # order random7353 when the user does not have access to read the note7354 returns nil7355 when the user has access to read the note7356 returns synthetic note7357 and notes widget is not available7358 returns nil7359Query.project(fullPath).pipelines.jobs.artifacts7360 returns the fields for the artifacts7361Projects::Ci::PipelineEditorController7362 GET #show7363 with enough privileges7364 is expected to respond with numeric status code ok7365 renders show page7366 without enough privileges7367 responds with 4047368Mutations::Achievements::Update7369 # order random7370 when the user does not have permission7371 does not update the achievement7372 behaves like a mutation that returns a top-level access error7373 is expected to contain exactly "The resource that you are attempting to access does not exist or you don't have permission to perform this action"7374 when the user has permission7375 when the params are invalid7376 returns the validation error7377 when the achievement_id is invalid7378 returns the validation error7379 when the feature flag is disabled7380 returns the relevant permission error7381 with a new avatar7382 updates the achievement7383Repositioning an ImageDiffNote7384 updates the note7385 when the note is not a DiffNote7386 behaves like a mutation that returns top-level errors7387 is expected to include /does not represent an instance of DiffNote/7388 when a position arg is nil7389 does not set the property to nil7390 when all position args are nil7391 behaves like a mutation that returns top-level errors7392 is expected to include /At least one property of `UpdateDiffImagePositionInput` must be set/7393getting CRM contacts7394 behaves like sorted paginated query7395 behaves like requires variables7396 shared example requires variables to be set7398 when sorting7399 sorts correctly7400 when paginating7401 paginates correctly7402query Jira service7403 behaves like unauthorized users cannot read services7404 when anonymous user7405 is expected to equal nil7406 when user developer7407 is expected to equal nil7408 when user can access project services7409 returns list of jira integrations7410 behaves like a working graphql query7411 returns a successful response7412API::ProjectStatistics7413 GET /projects/:id/statistics7414 returns the fetch statistics of the last 30 days7415 excludes the fetch statistics older than 30 days7416 responds with 403 when the user is not a reporter of the repository7417Groups::Settings::RepositoryController7418 POST create_deploy_token7419 a good request7420 creates the deploy token7421 a bad request7422 does not create the deploy token7423 an invalid request7424 raises a validation error7425Timeline Events7426 # order random7427 POST /preview_markdown7428 when authorized7429 renders JSON in a correct format7430 when not authorized7431 returns 3027432Setting assignees of an alert7433 updates the assignee of the alert7434 with operation_mode specified7435 updates the assignee of the alert7436getting group recent issue boards7437 behaves like querying a GraphQL type recent boards7438 Get list of recently visited boards7439 when the request is correct7440 returns recent boards for user successfully7441 behaves like a working graphql query7442 returns a successful response7443 when requests has errors7444 when there are no recently visited boards7445 returns empty result7446Oauth::AuthorizedApplicationsController7447 includes Two-factor enforcement concern7448 GET #index7449 responds with 4047450 DELETE #destroy7451 revokes both access grants and tokens7452CheckRateLimit7453 #check_rate_limit!7454 calls ApplicationRateLimiter#throttled_request? with the right arguments7455 renders error and logs request if throttled7456 redirects back if throttled and redirect_back option is set to true7457 when the bypass header is set7458 skips rate limit if set to "1"7459 does not skip rate limit if set to something else than "1"7460Admin::PlanLimitsController7461 POST create7462 with an authenticated admin user7463 updates the plan limits7464 when pipeline_hierarchy_size is passed in params7465 updates the pipeline_hierarchy_size plan limit7466 without admin access7467 returns `not_found`7468ContinueParams7469 returns an empty hash if params are not present7470 cleans up any params that are not allowed7471 does not allow cross host redirection7472 allows redirecting to a path with querystring7473JiraConnect::OauthCallbacksController7474 GET /-/jira_connect/oauth_callbacks7475 when logged in7476 renders a page prompting the user to close the window7477SandboxController7478 GET #mermaid7479 renders page without template7480Knapsack report was generated. Preview:7481{7482 "spec/requests/api/branches_spec.rb": 352.91586351800015,7483 "spec/requests/api/discussions_spec.rb": 251.79012422699998,7484 "spec/requests/api/pypi_packages_spec.rb": 120.31840475899935,7485 "spec/requests/api/composer_packages_spec.rb": 104.7955441389995,7486 "spec/requests/api/usage_data_queries_spec.rb": 89.58619136900052,7487 "spec/requests/api/files_spec.rb": 53.38577093500044,7488 "spec/requests/api/tags_spec.rb": 93.50359873199977,7489 "spec/mailers/emails/profile_spec.rb": 26.19180945900007,7490 "spec/requests/api/graphql/mutations/notes/create/note_spec.rb": 64.23550674199942,7491 "spec/requests/api/terraform/state_version_spec.rb": 38.91858207699988,7492 "spec/requests/api/ci/pipeline_schedules_spec.rb": 25.554713043999982,7493 "spec/requests/api/award_emoji_spec.rb": 31.22352180500002,7494 "spec/requests/api/graphql/mutations/releases/create_spec.rb": 26.209074086999863,7495 "spec/requests/api/deploy_keys_spec.rb": 14.073137318999215,7496 "spec/controllers/projects/merge_requests/conflicts_controller_spec.rb": 31.85685311100042,7497 "spec/controllers/projects/settings/ci_cd_controller_spec.rb": 21.210416476999853,7498 "spec/controllers/projects/tags_controller_spec.rb": 19.513081853000585,7499 "spec/requests/api/resource_access_tokens_spec.rb": 15.731970285999523,7500 "spec/requests/api/graphql/container_repository/container_repository_details_spec.rb": 14.717170236000129,7501 "spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb": 14.045304821000173,7502 "spec/controllers/groups/releases_controller_spec.rb": 17.800744662000398,7503 "spec/requests/api/draft_notes_spec.rb": 12.997690383999725,7504 "spec/requests/api/system_hooks_spec.rb": 6.267054594999536,7505 "spec/requests/api/topics_spec.rb": 6.853973786999632,7506 "spec/requests/api/graphql/packages/conan_spec.rb": 9.192225758000859,7507 "spec/requests/api/admin/ci/variables_spec.rb": 5.039897055000438,7508 "spec/requests/projects_controller_spec.rb": 8.105985243999385,7509 "spec/requests/api/graphql/project/issue/designs/designs_spec.rb": 10.115020187000482,7510 "spec/requests/api/graphql/mutations/packages/destroy_files_spec.rb": 8.493602496000676,7511 "spec/requests/projects/merge_requests/diffs_spec.rb": 8.985733388000881,7512 "spec/requests/api/graphql/project/incident_management/timeline_events_spec.rb": 6.417300639999667,7513 "spec/requests/api/graphql/project/merge_request/diff_notes_spec.rb": 8.814217844999803,7514 "spec/controllers/projects/registry/tags_controller_spec.rb": 7.33729029999995,7515 "spec/requests/api/graphql/packages/composer_spec.rb": 7.968549427998369,7516 "spec/controllers/groups/variables_controller_spec.rb": 8.550560710000354,7517 "spec/controllers/jira_connect/subscriptions_controller_spec.rb": 4.6173854770004255,7518 "spec/requests/api/graphql/mutations/merge_requests/reviewer_rereview_spec.rb": 6.772410993999074,7519 "spec/controllers/profiles/accounts_controller_spec.rb": 3.8592906609992497,7520 "spec/controllers/concerns/metrics_dashboard_spec.rb": 6.752312417000212,7521 "spec/controllers/groups/shared_projects_controller_spec.rb": 5.727054926999699,7522 "spec/requests/projects/merge_requests/content_spec.rb": 6.364726895999411,7523 "spec/requests/api/ci/runner/runners_post_spec.rb": 2.0423674899993784,7524 "spec/requests/api/graphql/mutations/notes/destroy_spec.rb": 7.752723038000113,7525 "spec/requests/projects/releases_controller_spec.rb": 3.729702192998957,7526 "spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb": 3.505317095999999,7527 "spec/requests/api/graphql/ci/job_spec.rb": 4.718765477000488,7528 "spec/controllers/projects/environments/prometheus_api_controller_spec.rb": 4.0140972759982105,7529 "spec/controllers/import/manifest_controller_spec.rb": 1.9623293069998908,7530 "spec/requests/api/pages/pages_spec.rb": 3.116525724000894,7531 "spec/controllers/concerns/page_limiter_spec.rb": 1.0937273029994685,7532 "spec/requests/api/graphql/project/branch_rules_spec.rb": 4.507300367999051,7533 "spec/requests/api/graphql/mutations/jira_import/start_spec.rb": 3.8780152590006765,7534 "spec/controllers/groups/boards_controller_spec.rb": 2.905146645000059,7535 "spec/requests/api/graphql/project/project_statistics_spec.rb": 3.418099284001073,7536 "spec/controllers/projects/analytics/cycle_analytics/summary_controller_spec.rb": 2.3534352390015556,7537 "spec/requests/api/graphql/project/error_tracking/sentry_detailed_error_request_spec.rb": 2.304703793999579,7538 "spec/requests/api/graphql/ci/stages_spec.rb": 3.123797113001274,7539 "spec/requests/api/graphql/mutations/ci/pipeline_schedule_create_spec.rb": 2.708074124000632,7540 "spec/controllers/concerns/kas_cookie_spec.rb": 2.2727304069994716,7541 "spec/requests/api/graphql/notes/synthetic_note_resolver_spec.rb": 3.3810130679994472,7542 "spec/requests/api/graphql/ci/job_artifacts_spec.rb": 2.3887175250001746,7543 "spec/controllers/projects/ci/pipeline_editor_controller_spec.rb": 2.4578433590013447,7544 "spec/requests/api/graphql/mutations/achievements/update_spec.rb": 2.1787929460006126,7545 "spec/requests/api/graphql/mutations/notes/reposition_image_diff_note_spec.rb": 2.8252134619997378,7546 "spec/requests/api/graphql/crm/contacts_spec.rb": 1.7312375399997109,7547 "spec/requests/api/graphql/project/jira_service_spec.rb": 1.9652602370006207,7548 "spec/requests/api/project_statistics_spec.rb": 1.919893881000462,7549 "spec/controllers/groups/settings/repository_controller_spec.rb": 1.8690384370001993,7550 "spec/requests/projects/incident_management/timeline_events_spec.rb": 1.521286279999913,7551 "spec/requests/api/graphql/mutations/alert_management/alerts/set_assignees_spec.rb": 1.956686047000403,7552 "spec/requests/api/graphql/group/recent_issue_boards_query_spec.rb": 1.4491334579997783,7553 "spec/controllers/oauth/authorized_applications_controller_spec.rb": 1.0620374459995219,7554 "spec/controllers/concerns/check_rate_limit_spec.rb": 0.7460095670012379,7555 "spec/controllers/admin/plan_limits_controller_spec.rb": 1.2318107790015347,7556 "spec/controllers/concerns/continue_params_spec.rb": 0.6051596310007881,7557 "spec/requests/jira_connect/oauth_callbacks_controller_spec.rb": 0.6084218599989981,7558 "spec/requests/sandbox_controller_spec.rb": 0.65956459500011997559}7560Knapsack global time execution for tests: 27m 46s7561Finished in 27 minutes 51 seconds (files took 47.13 seconds to load)75622450 examples, 0 failures7563Randomized with seed 58237564[TEST PROF INFO] Time spent in factories: 13:48.946 (49.47% of total time)7565RSpec exited with 0.7566No examples to retry, congrats!7568Not uploading cache ruby-gems-debian-bullseye-ruby-3.0-16 due to policy7569Not uploading cache gitaly-ruby-gems-debian-bullseye-ruby-3.0-16 due to policy7571Uploading artifacts...7572coverage/: found 5 matching artifact files and directories 7573crystalball/: found 2 matching artifact files and directories 7574WARNING: deprecations/: no matching files. Ensure that the artifact path is relative to the working directory (/builds/gitlab-org/gitlab) 7575knapsack/: found 3 matching artifact files and directories 7576WARNING: query_recorder/: no matching files. Ensure that the artifact path is relative to the working directory (/builds/gitlab-org/gitlab) 7577rspec/: found 14 matching artifact files and directories 7578WARNING: tmp/capybara/: no matching files. Ensure that the artifact path is relative to the working directory (/builds/gitlab-org/gitlab) 7579log/*.log: found 13 matching artifact files and directories 7580WARNING: Upload request redirected location=https://gitlab.com/api/v4/jobs/4101394822/artifacts?artifact_format=zip&artifact_type=archive&expire_in=31d new-url=https://gitlab.com7581WARNING: Retrying... context=artifacts-uploader error=request redirected7582Uploading artifacts as "archive" to coordinator... 201 Created id=4101394822 responseStatus=201 Created token=64_kQ1cy7583Uploading artifacts...7584rspec/junit_rspec.xml: found 1 matching artifact files and directories 7585WARNING: Upload request redirected location=https://gitlab.com/api/v4/jobs/4101394822/artifacts?artifact_format=gzip&artifact_type=junit&expire_in=31d new-url=https://gitlab.com7586WARNING: Retrying... context=artifacts-uploader error=request redirected7587Uploading artifacts as "junit" to coordinator... 201 Created id=4101394822 responseStatus=201 Created token=64_kQ1cy7589Job succeeded