Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
6b1ba27ef7
commit
2ee5991b42
|
@ -36,9 +36,16 @@ Personas are described at https://about.gitlab.com/handbook/marketing/product-ma
|
|||
Add all known Documentation Requirements here, per https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements
|
||||
If this feature requires changing permissions, this document https://docs.gitlab.com/ee/user/permissions.html must be updated accordingly. -->
|
||||
|
||||
### Testing
|
||||
### Availability & Testing
|
||||
|
||||
<!-- What risks does this change pose? How might it affect the quality of the product? What additional test coverage or changes to tests will be needed? Will it require cross-browser testing? See the test engineering process for further help: https://about.gitlab.com/handbook/engineering/quality/test-engineering/ -->
|
||||
<!-- What risks does this change pose to our availability? How might it affect the quality of the product? What additional test coverage or changes to tests will be needed? Will it require cross-browser testing?
|
||||
|
||||
Please list the test areas (unit, integration and end-to-end) that needs to be added or updated to ensure that this feature will work as intended. Plese use the list below as guidance.
|
||||
* Unit test changes
|
||||
* Integration test changes
|
||||
* End-to-end test change
|
||||
|
||||
See the test engineering planning process and reach out to your counterpart Software Engineer in Test for assistance : https://about.gitlab.com/handbook/engineering/quality/test-engineering/#test-planning -->
|
||||
|
||||
### What does success look like, and how can we measure that?
|
||||
|
||||
|
|
23
.rubocop.yml
23
.rubocop.yml
|
@ -301,24 +301,6 @@ RSpec/AnyInstanceOf:
|
|||
Enabled: false
|
||||
|
||||
# Cops for upgrade to gitlab-styles 3.1.0
|
||||
Rails/SafeNavigationWithBlank:
|
||||
Enabled: false
|
||||
|
||||
Rails/ApplicationController:
|
||||
Enabled: false
|
||||
|
||||
Rails/ApplicationMailer:
|
||||
Enabled: false
|
||||
|
||||
Rails/RakeEnvironment:
|
||||
Enabled: false
|
||||
|
||||
Rails/HelperInstanceVariable:
|
||||
Enabled: false
|
||||
|
||||
Rails/EnumHash:
|
||||
Enabled: false
|
||||
|
||||
RSpec/ReceiveCounts:
|
||||
Enabled: false
|
||||
|
||||
|
@ -362,10 +344,13 @@ RSpec/UnspecifiedException:
|
|||
Enabled: false
|
||||
|
||||
RSpec/HaveGitlabHttpStatus:
|
||||
Enabled: false
|
||||
Enabled: true
|
||||
Include:
|
||||
- 'spec/support/shared_examples/**/*'
|
||||
|
||||
Style/MultilineWhenThen:
|
||||
Enabled: false
|
||||
|
||||
Style/FloatDivision:
|
||||
Enabled: false
|
||||
|
|
@ -1,25 +1,26 @@
|
|||
# This configuration was generated by
|
||||
# `rubocop --auto-gen-config`
|
||||
# on 2019-05-04 16:01:00 +0000 using RuboCop version 0.68.1.
|
||||
# on 2020-01-16 11:53:06 -0800 using RuboCop version 0.74.0.
|
||||
# The point is for the user to remove these configuration records
|
||||
# one by one as the offenses are removed from the code base.
|
||||
# Note that changes in the inspected code, or installation of new
|
||||
# versions of RuboCop, may require this file to be generated again.
|
||||
|
||||
# Offense count: 264
|
||||
# Offense count: 299
|
||||
# Cop supports --auto-correct.
|
||||
Capybara/CurrentPathExpectation:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 1097
|
||||
# Offense count: 1432
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
||||
# SupportedStyles: with_first_argument, with_fixed_indentation
|
||||
Layout/AlignArguments:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 824
|
||||
# Offense count: 1630
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
|
||||
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
|
||||
# SupportedHashRocketStyles: key, separator, table
|
||||
# SupportedColonStyles: key, separator, table
|
||||
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
|
||||
|
@ -32,39 +33,32 @@ Layout/ClosingHeredocIndentation:
|
|||
Exclude:
|
||||
- 'app/graphql/mutations/merge_requests/set_wip.rb'
|
||||
- 'ee/db/geo/migrate/20180322062741_migrate_ci_job_artifacts_to_separate_registry.rb'
|
||||
- 'ee/db/migrate/20160204190809_update_jenkins_service_category.rb'
|
||||
- 'ee/lib/gitlab/background_migration/prune_orphaned_geo_events.rb'
|
||||
- 'ee/lib/gitlab/geo/health_check.rb'
|
||||
- 'lib/gitlab/background_migration/populate_untracked_uploads.rb'
|
||||
- 'qa/qa/service/kubernetes_cluster.rb'
|
||||
- 'spec/features/merge_request/user_sees_diff_spec.rb'
|
||||
- 'spec/lib/gitlab/asciidoc_spec.rb'
|
||||
- 'spec/lib/gitlab/checks/project_moved_spec.rb'
|
||||
- 'spec/rubocop/cop/active_record_association_reload_spec.rb'
|
||||
- 'spec/services/task_list_toggle_service_spec.rb'
|
||||
|
||||
# Offense count: 14
|
||||
# Offense count: 9
|
||||
# Cop supports --auto-correct.
|
||||
Layout/ClosingParenthesisIndentation:
|
||||
Exclude:
|
||||
- 'db/post_migrate/20180704145007_update_project_indexes.rb'
|
||||
- 'ee/db/geo/migrate/20180405074130_add_partial_index_project_repository_verification.rb'
|
||||
- 'ee/db/migrate/20180308234102_add_partial_index_to_project_repository_states_checksum_columns.rb'
|
||||
- 'ee/db/post_migrate/20180605213516_fix_partial_index_to_project_repository_states_checksum_columns.rb'
|
||||
- 'ee/lib/ee/gitlab/usage_data.rb'
|
||||
- 'spec/services/issues/resolve_discussions_spec.rb'
|
||||
- 'spec/services/projects/update_service_spec.rb'
|
||||
- 'spec/support/helpers/stub_object_storage.rb'
|
||||
- 'spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: leading, trailing
|
||||
Layout/DotPosition:
|
||||
Exclude:
|
||||
- 'app/models/concerns/relative_positioning.rb'
|
||||
- 'app/models/group.rb'
|
||||
|
||||
# Offense count: 69
|
||||
# Cop supports --auto-correct.
|
||||
|
@ -81,74 +75,67 @@ Layout/EmptyLinesAroundArguments:
|
|||
- 'lib/banzai/pipeline/single_line_pipeline.rb'
|
||||
- 'spec/features/markdown/copy_as_gfm_spec.rb'
|
||||
|
||||
# Offense count: 160
|
||||
# Offense count: 305
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
||||
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
|
||||
Layout/IndentFirstArrayElement:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 631
|
||||
# Offense count: 1005
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
||||
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
||||
Layout/IndentFirstHashElement:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 5
|
||||
# Offense count: 4
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
||||
# SupportedStyles: consistent, align_parentheses
|
||||
Layout/IndentFirstParameter:
|
||||
Exclude:
|
||||
- 'app/models/ci/pipeline_schedule.rb'
|
||||
- 'lib/gitlab/cross_project_access.rb'
|
||||
- 'lib/gitlab/data_builder/push.rb'
|
||||
- 'spec/support/helpers/repo_helpers.rb'
|
||||
- 'spec/support/helpers/stub_object_storage.rb'
|
||||
|
||||
# Offense count: 5
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
Layout/LeadingBlankLines:
|
||||
Exclude:
|
||||
- 'app/workers/update_project_statistics_worker.rb'
|
||||
- 'db/migrate/20161007073613_create_user_activities.rb'
|
||||
- 'ee/spec/helpers/boards_helper_spec.rb'
|
||||
- 'lib/tasks/yarn.rake'
|
||||
- 'spec/javascripts/fixtures/merge_requests_diffs.rb'
|
||||
|
||||
# Offense count: 30
|
||||
# Offense count: 54
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
||||
# SupportedStyles: aligned, indented
|
||||
Layout/MultilineOperationIndentation:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 13
|
||||
# Offense count: 10
|
||||
# Cop supports --auto-correct.
|
||||
Layout/RescueEnsureAlignment:
|
||||
Exclude:
|
||||
- 'app/models/blob_viewer/dependency_manager.rb'
|
||||
- 'app/models/ci/pipeline.rb'
|
||||
- 'app/models/project.rb'
|
||||
- 'app/services/prometheus/proxy_service.rb'
|
||||
- 'app/workers/delete_stored_files_worker.rb'
|
||||
- 'app/workers/reactive_caching_worker.rb'
|
||||
- 'config/initializers/1_settings.rb'
|
||||
- 'config/initializers/trusted_proxies.rb'
|
||||
- 'ee/db/migrate/20151113115819_canonicalize_kerberos_identities.rb'
|
||||
- 'lib/gitlab/background_migration/archive_legacy_traces.rb'
|
||||
- 'lib/gitlab/highlight.rb'
|
||||
- 'lib/tasks/gitlab/lfs/migrate.rake'
|
||||
|
||||
# Offense count: 344
|
||||
# Offense count: 522
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: require_no_space, require_space
|
||||
Layout/SpaceInLambdaLiteral:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 583
|
||||
# Offense count: 796
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
|
||||
# SupportedStyles: space, no_space
|
||||
|
@ -156,7 +143,7 @@ Layout/SpaceInLambdaLiteral:
|
|||
Layout/SpaceInsideBlockBraces:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 255
|
||||
# Offense count: 315
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: space, no_space
|
||||
|
@ -185,13 +172,13 @@ Lint/DuplicateMethods:
|
|||
- 'lib/gitlab/git/tree.rb'
|
||||
- 'lib/gitlab/git/wiki_page.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Offense count: 3
|
||||
Lint/InterpolationCheck:
|
||||
Exclude:
|
||||
- 'spec/features/issues/filtered_search/filter_issues_spec.rb'
|
||||
- 'spec/services/quick_actions/interpret_service_spec.rb'
|
||||
|
||||
# Offense count: 326
|
||||
# Offense count: 122
|
||||
# Configuration parameters: MaximumRangeSize.
|
||||
Lint/MissingCopEnableDirective:
|
||||
Enabled: false
|
||||
|
@ -211,14 +198,13 @@ Lint/ToJSON:
|
|||
- 'lib/gitlab/cycle_analytics/usage_data.rb'
|
||||
- 'lib/gitlab/template/base_template.rb'
|
||||
|
||||
# Offense count: 7
|
||||
# Offense count: 6
|
||||
Lint/UriEscapeUnescape:
|
||||
Exclude:
|
||||
- 'app/controllers/application_controller.rb'
|
||||
- 'app/models/project_services/drone_ci_service.rb'
|
||||
- 'spec/lib/google_api/auth_spec.rb'
|
||||
- 'spec/requests/api/files_spec.rb'
|
||||
- 'spec/requests/api/internal/base_spec.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Configuration parameters: CheckForMethodsWithNoSideEffects.
|
||||
|
@ -226,14 +212,14 @@ Lint/Void:
|
|||
Exclude:
|
||||
- 'lib/gitlab/git/diff_collection.rb'
|
||||
|
||||
# Offense count: 158
|
||||
# Offense count: 165
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
||||
# URISchemes: http, https
|
||||
Metrics/LineLength:
|
||||
Max: 176
|
||||
|
||||
# Offense count: 94
|
||||
# Offense count: 143
|
||||
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
||||
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
||||
Naming/FileName:
|
||||
|
@ -250,32 +236,32 @@ Naming/HeredocDelimiterCase:
|
|||
- 'spec/support/helpers/repo_helpers.rb'
|
||||
- 'spec/support/helpers/seed_repo.rb'
|
||||
|
||||
# Offense count: 197
|
||||
# Offense count: 211
|
||||
# Configuration parameters: Blacklist.
|
||||
# Blacklist: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
|
||||
Naming/HeredocDelimiterNaming:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 125
|
||||
# Offense count: 139
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: PreferredName.
|
||||
Naming/RescuedExceptionsVariableName:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 7081
|
||||
# Offense count: 9913
|
||||
# Configuration parameters: Prefixes.
|
||||
# Prefixes: when, with, without
|
||||
RSpec/ContextWording:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 719
|
||||
# Offense count: 879
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: method_call, block
|
||||
RSpec/ExpectChange:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 512
|
||||
# Offense count: 660
|
||||
RSpec/ExpectInHook:
|
||||
Enabled: false
|
||||
|
||||
|
@ -317,40 +303,38 @@ RSpec/MultipleSubjects:
|
|||
Exclude:
|
||||
- 'spec/services/merge_requests/create_from_issue_service_spec.rb'
|
||||
|
||||
# Offense count: 4
|
||||
# Offense count: 3
|
||||
RSpec/OverwritingSetup:
|
||||
Exclude:
|
||||
- 'spec/lib/gitlab/background_migration/migrate_events_to_push_event_payloads_spec.rb'
|
||||
- 'spec/models/email_spec.rb'
|
||||
- 'spec/services/merge_requests/add_todo_when_build_fails_service_spec.rb'
|
||||
- 'spec/services/notes/quick_actions_service_spec.rb'
|
||||
|
||||
# Offense count: 1828
|
||||
# Offense count: 2018
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: Strict, EnforcedStyle.
|
||||
# Configuration parameters: Strict, EnforcedStyle, AllowedExplicitMatchers.
|
||||
# SupportedStyles: inflected, explicit
|
||||
RSpec/PredicateMatcher:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 57
|
||||
# Offense count: 69
|
||||
RSpec/RepeatedExample:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 474
|
||||
# Offense count: 584
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: and_return, block
|
||||
RSpec/ReturnFromStub:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 188
|
||||
# Offense count: 380
|
||||
RSpec/ScatteredLet:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 10
|
||||
# Offense count: 8
|
||||
RSpec/ScatteredSetup:
|
||||
Exclude:
|
||||
- 'spec/controllers/projects/templates_controller_spec.rb'
|
||||
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
|
||||
- 'spec/requests/api/jobs_spec.rb'
|
||||
- 'spec/services/projects/create_service_spec.rb'
|
||||
|
@ -369,6 +353,27 @@ RSpec/VoidExpect:
|
|||
- 'spec/models/ci/runner_spec.rb'
|
||||
- 'spec/services/users/destroy_service_spec.rb'
|
||||
|
||||
# Offense count: 10
|
||||
# Cop supports --auto-correct.
|
||||
Rails/ApplicationController:
|
||||
Exclude:
|
||||
- 'app/controllers/acme_challenges_controller.rb'
|
||||
- 'app/controllers/chaos_controller.rb'
|
||||
- 'app/controllers/health_controller.rb'
|
||||
- 'app/controllers/metrics_controller.rb'
|
||||
- 'ee/app/controllers/oauth/geo_auth_controller.rb'
|
||||
- 'ee/spec/helpers/ee/services_helper_spec.rb'
|
||||
- 'lib/gitlab/base_doorkeeper_controller.rb'
|
||||
- 'lib/gitlab/request_forgery_protection.rb'
|
||||
- 'spec/controllers/concerns/continue_params_spec.rb'
|
||||
- 'spec/lib/marginalia_spec.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
Rails/ApplicationMailer:
|
||||
Exclude:
|
||||
- 'app/mailers/base_mailer.rb'
|
||||
|
||||
# Offense count: 8
|
||||
# Cop supports --auto-correct.
|
||||
Rails/BelongsTo:
|
||||
|
@ -378,39 +383,37 @@ Rails/BelongsTo:
|
|||
- 'ee/app/models/prometheus_alert.rb'
|
||||
- 'ee/app/models/prometheus_alert_event.rb'
|
||||
|
||||
# Offense count: 80
|
||||
# Offense count: 151
|
||||
# Configuration parameters: Include.
|
||||
# Include: db/migrate/*.rb
|
||||
Rails/CreateTableWithTimestamps:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 222
|
||||
# Offense count: 266
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: slashes, arguments
|
||||
Rails/FilePath:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 167
|
||||
# Offense count: 211
|
||||
# Configuration parameters: Include.
|
||||
# Include: app/models/**/*.rb
|
||||
Rails/HasManyOrHasOneDependent:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 2
|
||||
# Offense count: 431
|
||||
# Configuration parameters: Include.
|
||||
# Include: app/controllers/**/*.rb
|
||||
Rails/IgnoredSkipActionFilterOption:
|
||||
Exclude:
|
||||
- 'app/controllers/projects/snippets_controller.rb'
|
||||
- 'app/controllers/snippets_controller.rb'
|
||||
# Include: app/helpers/**/*.rb
|
||||
Rails/HelperInstanceVariable:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 87
|
||||
# Offense count: 103
|
||||
# Configuration parameters: Include.
|
||||
# Include: app/models/**/*.rb
|
||||
Rails/InverseOf:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 46
|
||||
# Offense count: 51
|
||||
# Configuration parameters: Include.
|
||||
# Include: app/controllers/**/*.rb
|
||||
Rails/LexicallyScopedActionFilter:
|
||||
|
@ -425,6 +428,12 @@ Rails/LinkToBlank:
|
|||
- 'ee/app/helpers/ee/user_callouts_helper.rb'
|
||||
- 'ee/app/helpers/license_helper.rb'
|
||||
|
||||
# Offense count: 35
|
||||
# Configuration parameters: Include.
|
||||
# Include: **/Rakefile, **/*.rake
|
||||
Rails/RakeEnvironment:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: Include.
|
||||
|
@ -433,31 +442,16 @@ Rails/RedundantAllowNil:
|
|||
Exclude:
|
||||
- 'app/models/application_setting.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: Include.
|
||||
# Include: db/migrate/*.rb
|
||||
Rails/ReversibleMigration:
|
||||
Exclude:
|
||||
- 'db/migrate/20160824103857_drop_unused_ci_tables.rb'
|
||||
|
||||
# Offense count: 860
|
||||
# Offense count: 868
|
||||
# Configuration parameters: Blacklist, Whitelist.
|
||||
# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
|
||||
Rails/SkipsModelValidations:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 1
|
||||
# Configuration parameters: Environments.
|
||||
# Environments: development, test, production
|
||||
Rails/UnknownEnv:
|
||||
Exclude:
|
||||
- 'db/migrate/20171124125748_populate_missing_merge_request_statuses.rb'
|
||||
|
||||
# Offense count: 11
|
||||
# Offense count: 8
|
||||
# Cop supports --auto-correct.
|
||||
Security/YAMLLoad:
|
||||
Exclude:
|
||||
- 'lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits.rb'
|
||||
- 'lib/gitlab/redis/wrapper.rb'
|
||||
- 'lib/system_check/incoming_email/imap_authentication_check.rb'
|
||||
- 'spec/config/mail_room_spec.rb'
|
||||
|
@ -470,7 +464,7 @@ Security/YAMLLoad:
|
|||
Style/AccessModifierDeclarations:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 121
|
||||
# Offense count: 127
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: percent_q, bare_percent
|
||||
|
@ -489,19 +483,18 @@ Style/Dir:
|
|||
Exclude:
|
||||
- 'qa/qa.rb'
|
||||
|
||||
# Offense count: 7
|
||||
# Offense count: 6
|
||||
# Cop supports --auto-correct.
|
||||
Style/EachWithObject:
|
||||
Exclude:
|
||||
- 'lib/expand_variables.rb'
|
||||
- 'lib/gitlab/ci/ansi2html.rb'
|
||||
- 'lib/gitlab/ee_compat_check.rb'
|
||||
- 'lib/gitlab/hook_data/issuable_builder.rb'
|
||||
- 'lib/gitlab/i18n/po_linter.rb'
|
||||
- 'lib/gitlab/import_export/members_mapper.rb'
|
||||
- 'lib/gitlab/import_export/relation_factory.rb'
|
||||
|
||||
# Offense count: 34
|
||||
# Offense count: 41
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: empty, nil, both
|
||||
|
@ -515,7 +508,7 @@ Style/EmptyLambdaParameter:
|
|||
- 'app/models/ci/build.rb'
|
||||
- 'app/models/ci/runner.rb'
|
||||
|
||||
# Offense count: 9
|
||||
# Offense count: 8
|
||||
# Cop supports --auto-correct.
|
||||
Style/EmptyLiteral:
|
||||
Exclude:
|
||||
|
@ -523,40 +516,40 @@ Style/EmptyLiteral:
|
|||
- 'lib/gitlab/git/diff_collection.rb'
|
||||
- 'lib/gitlab/gitaly_client.rb'
|
||||
- 'spec/helpers/merge_requests_helper_spec.rb'
|
||||
- 'spec/lib/gitlab/request_context_spec.rb'
|
||||
- 'spec/lib/gitlab/workhorse_spec.rb'
|
||||
- 'spec/requests/api/jobs_spec.rb'
|
||||
- 'spec/support/shared_examples/chat_slash_commands_shared_examples.rb'
|
||||
|
||||
# Offense count: 180
|
||||
# Offense count: 148
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: compact, expanded
|
||||
Style/EmptyMethod:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 203
|
||||
# Offense count: 346
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: format, sprintf, percent
|
||||
Style/FormatString:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 669
|
||||
# Offense count: 692
|
||||
# Configuration parameters: MinBodyLength.
|
||||
Style/GuardClause:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 27
|
||||
# Configuration parameters: AllowIfModifier.
|
||||
Style/IfInsideElse:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 1346
|
||||
# Offense count: 1474
|
||||
# Cop supports --auto-correct.
|
||||
Style/IfUnlessModifier:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 186
|
||||
# Offense count: 314
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: line_count_dependent, lambda, literal
|
||||
|
@ -570,11 +563,11 @@ Style/LineEndConcatenation:
|
|||
- 'spec/lib/gitlab/gfm/reference_rewriter_spec.rb'
|
||||
- 'spec/lib/gitlab/incoming_email_spec.rb'
|
||||
|
||||
# Offense count: 18
|
||||
# Offense count: 17
|
||||
Style/MethodMissingSuper:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 18
|
||||
# Offense count: 17
|
||||
Style/MissingRespondToMissing:
|
||||
Enabled: false
|
||||
|
||||
|
@ -597,35 +590,28 @@ Style/MultilineIfModifier:
|
|||
- 'app/services/ci/process_pipeline_service.rb'
|
||||
- 'lib/api/commit_statuses.rb'
|
||||
|
||||
# Offense count: 72
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: literals, strict
|
||||
Style/MutableConstant:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 28
|
||||
# Offense count: 34
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: Whitelist.
|
||||
# Whitelist: be, be_a, be_an, be_between, be_falsey, be_kind_of, be_instance_of, be_truthy, be_within, eq, eql, end_with, include, match, raise_error, respond_to, start_with
|
||||
Style/NestedParenthesizedCalls:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 31
|
||||
# Offense count: 25
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, MinBodyLength.
|
||||
# SupportedStyles: skip_modifier_ifs, always
|
||||
Style/Next:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 67
|
||||
# Offense count: 71
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedOctalStyle.
|
||||
# SupportedOctalStyles: zero_with_o, zero_only
|
||||
Style/NumericLiteralPrefix:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 186
|
||||
# Offense count: 234
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
|
||||
# SupportedStyles: predicate, comparison
|
||||
|
@ -639,12 +625,12 @@ Style/OrAssignment:
|
|||
- 'lib/api/commit_statuses.rb'
|
||||
- 'lib/gitlab/project_transfer.rb'
|
||||
|
||||
# Offense count: 79
|
||||
# Offense count: 106
|
||||
# Cop supports --auto-correct.
|
||||
Style/ParallelAssignment:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 1390
|
||||
# Offense count: 1692
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: PreferredDelimiters.
|
||||
Style/PercentLiteralDelimiters:
|
||||
|
@ -666,7 +652,7 @@ Style/PerlBackrefs:
|
|||
- 'lib/gitlab/search_results.rb'
|
||||
- 'lib/gitlab/sherlock/query.rb'
|
||||
|
||||
# Offense count: 129
|
||||
# Offense count: 165
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: compact, exploded
|
||||
|
@ -687,7 +673,7 @@ Style/RedundantConditional:
|
|||
Exclude:
|
||||
- 'lib/system_check/helpers.rb'
|
||||
|
||||
# Offense count: 360
|
||||
# Offense count: 221
|
||||
# Cop supports --auto-correct.
|
||||
Style/RedundantFreeze:
|
||||
Enabled: false
|
||||
|
@ -707,31 +693,31 @@ Style/RedundantReturn:
|
|||
- 'lib/gitlab/utils.rb'
|
||||
- 'lib/google_api/auth.rb'
|
||||
|
||||
# Offense count: 700
|
||||
# Offense count: 739
|
||||
# Cop supports --auto-correct.
|
||||
Style/RedundantSelf:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 28
|
||||
# Offense count: 80
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
|
||||
# SupportedStyles: slashes, percent_r, mixed
|
||||
Style/RegexpLiteral:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 41
|
||||
# Offense count: 42
|
||||
# Cop supports --auto-correct.
|
||||
Style/RescueModifier:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 197
|
||||
# Offense count: 237
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: implicit, explicit
|
||||
Style/RescueStandardError:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 5
|
||||
# Offense count: 4
|
||||
# Cop supports --auto-correct.
|
||||
Style/SelfAssignment:
|
||||
Exclude:
|
||||
|
@ -746,7 +732,7 @@ Style/SingleLineMethods:
|
|||
Exclude:
|
||||
- 'lib/gitlab/ci/ansi2html.rb'
|
||||
|
||||
# Offense count: 91
|
||||
# Offense count: 94
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: .
|
||||
# SupportedStyles: use_perl_names, use_english_names
|
||||
|
@ -759,14 +745,14 @@ Style/StderrPuts:
|
|||
Exclude:
|
||||
- 'config/initializers/rspec_profiling.rb'
|
||||
|
||||
# Offense count: 65
|
||||
# Offense count: 75
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle.
|
||||
# SupportedStyles: single_quotes, double_quotes
|
||||
Style/StringLiteralsInInterpolation:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 187
|
||||
# Offense count: 216
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: IgnoredMethods.
|
||||
# IgnoredMethods: respond_to, define_method
|
||||
|
@ -793,24 +779,22 @@ Style/TrailingCommaInArguments:
|
|||
Exclude:
|
||||
- 'spec/features/markdown/copy_as_gfm_spec.rb'
|
||||
|
||||
# Offense count: 10
|
||||
# Offense count: 2
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyleForMultiline.
|
||||
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
|
||||
Style/TrailingCommaInArrayLiteral:
|
||||
Exclude:
|
||||
- 'ee/spec/models/project_spec.rb'
|
||||
- 'spec/lib/gitlab/diff/position_tracer_spec.rb'
|
||||
- 'spec/lib/gitlab/metrics/dashboard/processor_spec.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyleForMultiline.
|
||||
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
|
||||
Style/TrailingCommaInHashLiteral:
|
||||
Exclude:
|
||||
- 'lib/gitlab/ci/ansi2html.rb'
|
||||
- 'lib/gitlab/kubernetes.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Cop supports --auto-correct.
|
||||
|
@ -819,7 +803,7 @@ Style/UnlessElse:
|
|||
- 'lib/backup/manager.rb'
|
||||
- 'lib/gitlab/project_search_results.rb'
|
||||
|
||||
# Offense count: 10
|
||||
# Offense count: 8
|
||||
# Cop supports --auto-correct.
|
||||
Style/UnneededCondition:
|
||||
Exclude:
|
||||
|
@ -827,12 +811,10 @@ Style/UnneededCondition:
|
|||
- 'app/helpers/environment_helper.rb'
|
||||
- 'app/models/project.rb'
|
||||
- 'app/services/issuable/clone/base_service.rb'
|
||||
- 'app/services/prometheus/adapter_service.rb'
|
||||
- 'lib/gitlab/email/message/repository_push.rb'
|
||||
- 'lib/gitlab/prometheus_client.rb'
|
||||
- 'spec/lib/rspec_flaky/flaky_example_spec.rb'
|
||||
|
||||
# Offense count: 73
|
||||
# Offense count: 99
|
||||
# Cop supports --auto-correct.
|
||||
Style/UnneededInterpolation:
|
||||
Enabled: false
|
||||
|
|
|
@ -8,6 +8,9 @@ export default {
|
|||
},
|
||||
},
|
||||
computed: {
|
||||
displayAsCell() {
|
||||
return !(this.line.rich_text || this.line.text);
|
||||
},
|
||||
lineType() {
|
||||
return this.line.type;
|
||||
},
|
||||
|
@ -23,11 +26,9 @@ export default {
|
|||
<td class="diff-line-num new_line border-top-0 border-bottom-0" :class="lineType">
|
||||
{{ line.new_line }}
|
||||
</td>
|
||||
<td class="line_content" :class="lineType">
|
||||
<td class="line_content" :class="[{ 'd-table-cell': displayAsCell }, lineType]">
|
||||
<span v-if="line.rich_text" v-html="line.rich_text"></span>
|
||||
<span v-else-if="line.text">{{ line.text }}</span>
|
||||
<!-- TODO: replace this hack with zero-width whitespace when we have rich_text from BE -->
|
||||
<span v-else>​</span>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
.mh-50vh { max-height: 50vh; }
|
||||
|
||||
.gl-w-64 { width: px-to-rem($grid-size * 8); }
|
||||
.gl-h-32 { height: px-to-rem($grid-size * 4); }
|
||||
.gl-h-64 { height: px-to-rem($grid-size * 8); }
|
||||
|
||||
.gl-text-purple { color: $purple; }
|
||||
|
@ -59,4 +60,3 @@
|
|||
.gl-text-red-700 { @include gl-text-red-700; }
|
||||
.gl-text-orange-700 { @include gl-text-orange-700; }
|
||||
.gl-text-green-700 { @include gl-text-green-700; }
|
||||
|
||||
|
|
|
@ -223,19 +223,19 @@ class User < ApplicationRecord
|
|||
after_initialize :set_projects_limit
|
||||
|
||||
# User's Layout preference
|
||||
enum layout: [:fixed, :fluid]
|
||||
enum layout: { fixed: 0, fluid: 1 }
|
||||
|
||||
# User's Dashboard preference
|
||||
# Note: When adding an option, it MUST go on the end of the array.
|
||||
enum dashboard: [:projects, :stars, :project_activity, :starred_project_activity, :groups, :todos, :issues, :merge_requests, :operations]
|
||||
enum dashboard: { projects: 0, stars: 1, project_activity: 2, starred_project_activity: 3, groups: 4, todos: 5, issues: 6, merge_requests: 7, operations: 8 }
|
||||
|
||||
# User's Project preference
|
||||
# Note: When adding an option, it MUST go on the end of the array.
|
||||
enum project_view: [:readme, :activity, :files]
|
||||
enum project_view: { readme: 0, activity: 1, files: 2 }
|
||||
|
||||
# User's role
|
||||
# Note: When adding an option, it MUST go on the end of the array.
|
||||
enum role: [:software_developer, :development_team_lead, :devops_engineer, :systems_administrator, :security_analyst, :data_analyst, :product_manager, :product_designer, :other], _suffix: true
|
||||
enum role: { software_developer: 0, development_team_lead: 1, devops_engineer: 2, systems_administrator: 3, security_analyst: 4, data_analyst: 5, product_manager: 6, product_designer: 7, other: 8 }, _suffix: true
|
||||
|
||||
delegate :path, to: :namespace, allow_nil: true, prefix: true
|
||||
delegate :notes_filter_for, to: :user_preference
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
Enable version check
|
||||
.form-text.text-muted
|
||||
GitLab will inform you if a new version is available.
|
||||
= link_to 'Learn more', help_page_path("user/admin_area/settings/usage_statistics", anchor: "version-check")
|
||||
= link_to 'Learn more', help_page_path('user/admin_area/settings/usage_statistics', anchor: 'version-check-core-only')
|
||||
about what information is shared with GitLab Inc.
|
||||
.form-group
|
||||
- can_be_configured = @application_setting.usage_ping_can_be_configured?
|
||||
|
@ -21,7 +21,7 @@
|
|||
- if can_be_configured
|
||||
%p.mb-2= _('To help improve GitLab and its user experience, GitLab will periodically collect usage information.')
|
||||
|
||||
- usage_ping_path = help_page_path('user/admin_area/settings/usage_statistics', anchor: 'usage-ping')
|
||||
- usage_ping_path = help_page_path('user/admin_area/settings/usage_statistics', anchor: 'usage-ping-core-only')
|
||||
- usage_ping_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: usage_ping_path }
|
||||
%p.mb-2= s_('%{usage_ping_link_start}Learn more%{usage_ping_link_end} about what information is shared with GitLab Inc.').html_safe % { usage_ping_link_start: usage_ping_link_start, usage_ping_link_end: '</a>'.html_safe }
|
||||
|
||||
|
|
|
@ -6,27 +6,25 @@
|
|||
|
||||
- if can?(current_user, :admin_cluster, @cluster)
|
||||
- unless @cluster.provided_by_user?
|
||||
.append-bottom-20
|
||||
%label.append-bottom-10
|
||||
.sub-section.form-group
|
||||
%h4
|
||||
= @cluster.provider_label
|
||||
%p
|
||||
- provider_link = link_to(@cluster.provider_label, @cluster.provider_management_url, target: '_blank', rel: 'noopener noreferrer')
|
||||
= s_('ClusterIntegration|Manage your Kubernetes cluster by visiting %{provider_link}').html_safe % { provider_link: provider_link }
|
||||
|
||||
= form_for @cluster, url: clusterable.cluster_path(@cluster), as: :cluster, html: { class: 'cluster_management_form' } do |field|
|
||||
.sub-section.form-group
|
||||
= form_for @cluster, url: clusterable.cluster_path(@cluster), as: :cluster, html: { class: 'cluster_management_form' } do |field|
|
||||
%h4
|
||||
= s_('ClusterIntegration|Cluster management project (alpha)')
|
||||
|
||||
%h5
|
||||
= s_('ClusterIntegration|Cluster management project (alpha)')
|
||||
|
||||
.form-group
|
||||
.form-text.text-muted
|
||||
= project_select_tag('cluster[management_project_id]', class: 'hidden-filter-value', toggle_class: 'js-project-search js-project-filter js-filter-submit', dropdown_class: 'dropdown-menu-selectable dropdown-menu-project js-filter-submit',
|
||||
placeholder: _('Select project'), idAttribute: 'id', data: { order_by: 'last_activity_at', idattribute: 'id', simple_filter: true, allow_clear: true, include_groups: false, include_projects_in_subgroups: true, group_id: group_id, user_id: user_id }, value: @cluster.management_project_id)
|
||||
.text-muted
|
||||
= s_('ClusterIntegration|A cluster management project can be used to run deployment jobs with Kubernetes <code>cluster-admin</code> privileges.').html_safe
|
||||
= link_to _('More information'), help_page_path('user/clusters/management_project.md'), target: '_blank'
|
||||
.form-group
|
||||
= field.submit _('Save changes'), class: 'btn btn-success qa-save-domain'
|
||||
%p
|
||||
= project_select_tag('cluster[management_project_id]', class: 'hidden-filter-value', toggle_class: 'js-project-search js-project-filter js-filter-submit', dropdown_class: 'dropdown-menu-selectable dropdown-menu-project js-filter-submit',
|
||||
placeholder: _('Select project'), idAttribute: 'id', data: { order_by: 'last_activity_at', idattribute: 'id', simple_filter: true, allow_clear: true, include_groups: false, include_projects_in_subgroups: true, group_id: group_id, user_id: user_id }, value: @cluster.management_project_id)
|
||||
.text-muted
|
||||
= s_('ClusterIntegration|A cluster management project can be used to run deployment jobs with Kubernetes <code>cluster-admin</code> privileges.').html_safe
|
||||
= link_to _('More information'), help_page_path('user/clusters/management_project.md'), target: '_blank'
|
||||
= field.submit _('Save changes'), class: 'btn btn-success'
|
||||
|
||||
- if @cluster.managed?
|
||||
.sub-section.form-group
|
||||
|
|
|
@ -9,6 +9,6 @@
|
|||
- usage_ping_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: usage_ping_path }
|
||||
= s_('User Cohorts are only shown when the %{usage_ping_link_start}usage ping%{usage_ping_link_end} is enabled.').html_safe % { usage_ping_link_start: usage_ping_link_start, usage_ping_link_end: '</a>'.html_safe }
|
||||
- if current_user.admin?
|
||||
- application_settings_path = admin_application_settings_path(anchor: 'usage-statistics')
|
||||
- application_settings_path = metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings')
|
||||
- application_settings_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: application_settings_path }
|
||||
= s_('To enable it and see User Cohorts, visit %{application_settings_link_start}application settings%{application_settings_link_end}.').html_safe % { application_settings_link_start: application_settings_link_start, application_settings_link_end: '</a>'.html_safe }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- if session[:ask_for_usage_stats_consent]
|
||||
.ping-consent-message.alert.alert-warning.flex-alert
|
||||
- settings_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer" class="alert-link">'.html_safe % { url: admin_application_settings_path(anchor: 'js-usage-settings') }
|
||||
- settings_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer" class="alert-link">'.html_safe % { url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings') }
|
||||
- info_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer" class="alert-link">'.html_safe % { url: help_page_path('user/admin_area/settings/usage_statistics.md') }
|
||||
.alert-message
|
||||
= s_('To help improve GitLab, we would like to periodically collect usage information. This can be changed at any time in %{settings_link_start}Settings%{link_end}. %{info_link_start}More Information%{link_end}').html_safe % { settings_link_start: settings_link_start, info_link_start: info_link_start, link_end: '</a>'.html_safe }
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix loading of sub-epics caused by wrong subscription check.
|
||||
merge_request: 23184
|
||||
author:
|
||||
type: fixed
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Use consistent layout in cluster advanced settings
|
||||
merge_request: 22656
|
||||
author:
|
||||
type: other
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Allow SSH keys API endpoint to be requested for a given username
|
||||
merge_request: 22899
|
||||
author: Rajendra Kadam
|
||||
type: changed
|
|
@ -677,12 +677,12 @@ Parameters:
|
|||
Get a list of a specified user's SSH keys.
|
||||
|
||||
```
|
||||
GET /users/:id/keys
|
||||
GET /users/:id_or_username/keys
|
||||
```
|
||||
|
||||
Parameters:
|
||||
|
||||
- `id` (required) - id of specified user
|
||||
| Attribute | Type | Required | Description |
|
||||
| ---------------- | ------ | -------- | ----------- |
|
||||
| `id_or_username` | string | yes | The id or username of the user to get the SSH keys for. |
|
||||
|
||||
## Single SSH key
|
||||
|
||||
|
|
|
@ -85,6 +85,35 @@ subgraph "gitlab-qa pipeline"
|
|||
1. The result of the GitLab QA pipeline is being
|
||||
propagated upstream, through Omnibus, back to the CE / EE merge request.
|
||||
|
||||
Please note, we plan to [add more specific information](https://gitlab.com/gitlab-org/quality/team-tasks/issues/156)
|
||||
about the tests included in each job/scenario that runs in `gitlab-qa`.
|
||||
|
||||
##### Running custom tests
|
||||
|
||||
The [existing scenarios](https://gitlab.com/gitlab-org/gitlab-qa/blob/master/docs/what_tests_can_be_run.md)
|
||||
that run in the downstream `gitlab-qa` pipeline include many tests, but there are times when you might want to run a
|
||||
test or a group of tests that are different than the groups in any of the existing scenarios.
|
||||
|
||||
For example, when we [dequarantine](https://about.gitlab.com/handbook/engineering/quality/guidelines/debugging-qa-test-failures/#dequarantining-tests)
|
||||
a flaky test we first want to make sure that it's no longer flaky.
|
||||
We can do that using the `ce:custom-parallel` and `ee:custom-parallel` jobs.
|
||||
Both are manual jobs that you can configure using custom variables.
|
||||
When you click the name (not the play icon) of one of the parallel jobs,
|
||||
you'll be prompted to enter variables. You can use any of [the variables
|
||||
that can be used with `gitlab-qa`](https://gitlab.com/gitlab-org/gitlab-qa/blob/master/docs/what_tests_can_be_run.md#supported-gitlab-environment-variables)
|
||||
as well as these:
|
||||
|
||||
| Variable | Description |
|
||||
|-|-|
|
||||
| `QA_SCENARIO` | The scenario to run (default `Test::Instance::Image`) |
|
||||
| `QA_TESTS` | The test(s) to run (no default, which means run all the tests in the scenario). Use file paths as you would when running tests via RSpec, e.g., `qa/specs/features/ee/browser_ui` would include all the `EE` UI tests. |
|
||||
| `QA_RSPEC_TAGS` | The RSpec tags to add (no default) |
|
||||
|
||||
For now [manual jobs with custom variables will not use the same variable
|
||||
when retried](https://gitlab.com/gitlab-org/gitlab/issues/31367), so if you want to run the same test(s) multiple times,
|
||||
specify the same variables in each `custom-parallel` job (up to as
|
||||
many of the 10 available jobs that you want to run).
|
||||
|
||||
#### Using the `review-qa-all` jobs
|
||||
|
||||
On every pipeline during the `test` stage, the `review-qa-smoke` job is
|
||||
|
@ -105,8 +134,9 @@ See [Review Apps][review-apps] for more details about Review Apps.
|
|||
|
||||
## How do I run the tests?
|
||||
|
||||
There are two main options for running the tests. If you simply want to run the
|
||||
existing tests against a live GitLab instance or against a pre-built docker image
|
||||
If you are not [testing code in a merge request](#testing-code-in-merge-requests),
|
||||
there are two main options for running the tests. If you simply want to run
|
||||
the existing tests against a live GitLab instance or against a pre-built docker image
|
||||
you can use the [GitLab QA orchestrator][gitlab-qa-readme]. See also [examples
|
||||
of the test scenarios you can run via the orchestrator](https://gitlab.com/gitlab-org/gitlab-qa/blob/master/docs/what_tests_can_be_run.md#examples).
|
||||
|
||||
|
|
|
@ -252,17 +252,15 @@ module API
|
|||
success Entities::SSHKey
|
||||
end
|
||||
params do
|
||||
requires :id, type: Integer, desc: 'The ID of the user'
|
||||
requires :user_id, type: String, desc: 'The ID or username of the user'
|
||||
use :pagination
|
||||
end
|
||||
# rubocop: disable CodeReuse/ActiveRecord
|
||||
get ':id/keys' do
|
||||
user = User.find_by(id: params[:id])
|
||||
get ':user_id/keys', requirements: API::USER_REQUIREMENTS do
|
||||
user = find_user(params[:user_id])
|
||||
not_found!('User') unless user && can?(current_user, :read_user, user)
|
||||
|
||||
present paginate(user.keys), with: Entities::SSHKey
|
||||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
desc 'Delete an existing SSH key from a specified user. Available only for admins.' do
|
||||
success Entities::SSHKey
|
||||
|
|
|
@ -638,6 +638,12 @@ msgstr ""
|
|||
msgid "1st contribution!"
|
||||
msgstr ""
|
||||
|
||||
msgid "2 days"
|
||||
msgstr ""
|
||||
|
||||
msgid "2 weeks"
|
||||
msgstr ""
|
||||
|
||||
msgid "20-29 contributions"
|
||||
msgstr ""
|
||||
|
||||
|
@ -665,6 +671,9 @@ msgstr ""
|
|||
msgid "30+ contributions"
|
||||
msgstr ""
|
||||
|
||||
msgid "4 hours"
|
||||
msgstr ""
|
||||
|
||||
msgid "403|Please contact your GitLab administrator to get permission."
|
||||
msgstr ""
|
||||
|
||||
|
@ -7183,6 +7192,9 @@ msgstr ""
|
|||
msgid "Environments|Show all"
|
||||
msgstr ""
|
||||
|
||||
msgid "Environments|Show last"
|
||||
msgstr ""
|
||||
|
||||
msgid "Environments|Stop"
|
||||
msgstr ""
|
||||
|
||||
|
@ -13082,6 +13094,9 @@ msgstr ""
|
|||
msgid "Past due"
|
||||
msgstr ""
|
||||
|
||||
msgid "Past week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Paste a machine public key here. Read more about how to generate it %{link_start}here%{link_end}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -21776,6 +21791,9 @@ msgstr ""
|
|||
msgid "ciReport|%{linkStartTag}Learn more about SAST %{linkEndTag}"
|
||||
msgstr ""
|
||||
|
||||
msgid "ciReport|%{linkStartTag}Learn more about codequality reports %{linkEndTag}"
|
||||
msgstr ""
|
||||
|
||||
msgid "ciReport|%{namespace} is affected by %{vulnerability}."
|
||||
msgstr ""
|
||||
|
||||
|
@ -21864,6 +21882,9 @@ msgstr ""
|
|||
msgid "ciReport|Automatically apply the patch in a new branch"
|
||||
msgstr ""
|
||||
|
||||
msgid "ciReport|Base pipeline codequality artifact not found"
|
||||
msgstr ""
|
||||
|
||||
msgid "ciReport|Class"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -124,9 +124,6 @@ describe('Dashboard', () => {
|
|||
.then(() => {
|
||||
expect(wrapper.vm.showEmptyState).toEqual(false);
|
||||
expect(wrapper.vm.$el.querySelector('.prometheus-panel')).toEqual(null);
|
||||
// TODO: The last expectation doesn't belong here, it belongs in a `group_group_spec.js` file
|
||||
// Issue: https://gitlab.com/gitlab-org/gitlab/issues/118780
|
||||
// expect(wrapper.vm.$el.querySelector('.prometheus-graph-group')).toBeTruthy();
|
||||
|
||||
done();
|
||||
})
|
||||
|
|
|
@ -63,21 +63,59 @@ describe('SuggestionDiffRow', () => {
|
|||
it('renders the plain text when it is available but rich text is not', () => {
|
||||
factory({
|
||||
propsData: {
|
||||
line: Object.assign({}, newLine, { rich_text: undefined }),
|
||||
line: {
|
||||
...newLine,
|
||||
rich_text: undefined,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(wrapper.find('td.line_content').text()).toEqual('newplaintext');
|
||||
});
|
||||
|
||||
it('renders a zero-width space when it has no plain or rich texts', () => {
|
||||
it('switches to table-cell display when it has no plain or rich texts', () => {
|
||||
factory({
|
||||
propsData: {
|
||||
line: Object.assign({}, newLine, { rich_text: undefined, text: undefined }),
|
||||
line: {
|
||||
...newLine,
|
||||
text: undefined,
|
||||
rich_text: undefined,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(wrapper.find('td.line_content').text()).toEqual('\u200B');
|
||||
const lineContent = wrapper.find('td.line_content');
|
||||
|
||||
expect(lineContent.classes()).toContain('d-table-cell');
|
||||
expect(lineContent.text()).toEqual('');
|
||||
});
|
||||
|
||||
it('does not switch to table-cell display if it has either plain or rich texts', () => {
|
||||
let lineContent;
|
||||
|
||||
factory({
|
||||
propsData: {
|
||||
line: {
|
||||
...newLine,
|
||||
text: undefined,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
lineContent = wrapper.find('td.line_content');
|
||||
expect(lineContent.classes()).not.toContain('d-table-cell');
|
||||
|
||||
factory({
|
||||
propsData: {
|
||||
line: {
|
||||
...newLine,
|
||||
rich_text: undefined,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
lineContent = wrapper.find('td.line_content');
|
||||
expect(lineContent.classes()).not.toContain('d-table-cell');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -913,6 +913,27 @@ describe API::Users do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'GET /user/:user_id/keys' do
|
||||
it 'returns 404 for non-existing user' do
|
||||
get api("/users/#{not_existing_user_id}/keys")
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(json_response['message']).to eq('404 User Not Found')
|
||||
end
|
||||
|
||||
it 'returns array of ssh keys' do
|
||||
user.keys << key
|
||||
user.save
|
||||
|
||||
get api("/users/#{user.username}/keys")
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.first['title']).to eq(key.title)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'DELETE /user/:id/keys/:key_id' do
|
||||
before do
|
||||
admin
|
||||
|
|
|
@ -16,7 +16,7 @@ shared_examples 'disabled when using an external authorization service' do
|
|||
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(403)
|
||||
expect(response).to have_gitlab_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -37,6 +37,6 @@ shared_examples 'unauthorized when external service denies access' do
|
|||
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(403)
|
||||
expect(response).to have_gitlab_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,7 +11,7 @@ shared_examples 'paginated collection' do
|
|||
it 'renders a page number that is not ouf of range' do
|
||||
get action, params: params.merge(page: last_page)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
|
||||
it 'redirects to last_page if page number is larger than number of pages' do
|
||||
|
|
|
@ -51,7 +51,7 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
|
|||
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
|
||||
context 'and lfs uses object storage' do
|
||||
|
@ -65,7 +65,7 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
|
|||
it 'responds with redirect to file' do
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(302)
|
||||
expect(response).to have_gitlab_http_status(:found)
|
||||
expect(response.location).to include(lfs_object.reload.file.path)
|
||||
end
|
||||
|
||||
|
@ -84,7 +84,7 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
|
|||
it 'does not serve the file' do
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -97,7 +97,7 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
|
|||
it 'does not serve the file if no members are linked to the LfsObject' do
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'serves the file when the fork network root is linked to the LfsObject' do
|
||||
|
@ -105,7 +105,7 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
|
|||
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
|
||||
it 'serves the file when the fork network member is linked to the LfsObject' do
|
||||
|
@ -113,7 +113,7 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
|
|||
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -154,7 +154,7 @@ shared_examples 'a controller that can serve LFS files' do |options = {}|
|
|||
|
||||
subject
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response.header['Content-Type']).to eq('text/plain; charset=utf-8')
|
||||
expect(response.header['Content-Disposition'])
|
||||
.to eq('inline')
|
||||
|
|
|
@ -12,13 +12,13 @@ shared_examples 'todos actions' do
|
|||
post_create
|
||||
end.to change { user.todos.count }.by(1)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
|
||||
it 'returns todo path and pending count' do
|
||||
post_create
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['count']).to eq 1
|
||||
expect(json_response['delete_path']).to match(%r{/dashboard/todos/\d{1}})
|
||||
end
|
||||
|
@ -31,7 +31,7 @@ shared_examples 'todos actions' do
|
|||
post_create
|
||||
end.to change { user.todos.count }.by(0)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'does not create todo when user is not logged in' do
|
||||
|
@ -39,7 +39,7 @@ shared_examples 'todos actions' do
|
|||
post_create
|
||||
end.to change { user.todos.count }.by(0)
|
||||
|
||||
expect(response).to have_gitlab_http_status(302)
|
||||
expect(response).to have_gitlab_http_status(:found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,7 +27,7 @@ shared_examples 'handle uploads' do
|
|||
it "returns an error" do
|
||||
post :create, params: params, format: :json
|
||||
|
||||
expect(response).to have_gitlab_http_status(422)
|
||||
expect(response).to have_gitlab_http_status(:unprocessable_entity)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -84,7 +84,7 @@ shared_examples 'handle uploads' do
|
|||
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -110,7 +110,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 200" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -123,7 +123,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 404" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -135,7 +135,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 404" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -149,7 +149,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 200" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -161,7 +161,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 404" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -182,7 +182,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 200" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -226,7 +226,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 200" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -238,7 +238,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 404" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -253,7 +253,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 200" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -265,7 +265,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 404" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -278,7 +278,7 @@ shared_examples 'handle uploads' do
|
|||
it "responds with status 404" do
|
||||
show_upload
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -321,7 +321,7 @@ shared_examples 'handle uploads authorize' do
|
|||
end
|
||||
|
||||
it 'responds with status 200' do
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
|
||||
it 'uses the gitlab-workhorse content type' do
|
||||
|
|
|
@ -6,7 +6,7 @@ shared_examples 'discussions provider' do
|
|||
it 'returns the expected discussions' do
|
||||
get :discussions, params: { namespace_id: project.namespace, project_id: project, id: requested_iid }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to match_response_schema('entities/discussions')
|
||||
|
||||
expect(json_response.size).to eq(expected_discussion_count)
|
||||
|
|
|
@ -13,7 +13,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'does not filter by custom attributes' do
|
||||
get api("/#{attributable_name}", user), params: { custom_attributes: { foo: 'foo', bar: 'bar' } }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response.size).to be 2
|
||||
expect(json_response.map { |r| r['id'] }).to contain_exactly attributable.id, other_attributable.id
|
||||
end
|
||||
|
@ -23,7 +23,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'filters by custom attributes' do
|
||||
get api("/#{attributable_name}", admin), params: { custom_attributes: { foo: 'foo', bar: 'bar' } }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response.size).to be 1
|
||||
expect(json_response.first['id']).to eq attributable.id
|
||||
end
|
||||
|
@ -39,7 +39,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'does not include custom attributes' do
|
||||
get api("/#{attributable_name}", user), params: { with_custom_attributes: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response.size).to be 2
|
||||
expect(json_response.first).not_to include 'custom_attributes'
|
||||
end
|
||||
|
@ -49,7 +49,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'does not include custom attributes by default' do
|
||||
get api("/#{attributable_name}", admin)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response.size).to be 2
|
||||
expect(json_response.first).not_to include 'custom_attributes'
|
||||
expect(json_response.second).not_to include 'custom_attributes'
|
||||
|
@ -58,7 +58,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'includes custom attributes if requested' do
|
||||
get api("/#{attributable_name}", admin), params: { with_custom_attributes: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response.size).to be 2
|
||||
|
||||
attributable_response = json_response.find { |r| r['id'] == attributable.id }
|
||||
|
@ -79,7 +79,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'does not include custom attributes' do
|
||||
get api("/#{attributable_name}/#{attributable.id}", user), params: { with_custom_attributes: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).not_to include 'custom_attributes'
|
||||
end
|
||||
end
|
||||
|
@ -88,14 +88,14 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'does not include custom attributes by default' do
|
||||
get api("/#{attributable_name}/#{attributable.id}", admin)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).not_to include 'custom_attributes'
|
||||
end
|
||||
|
||||
it 'includes custom attributes if requested' do
|
||||
get api("/#{attributable_name}/#{attributable.id}", admin), params: { with_custom_attributes: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['custom_attributes']).to contain_exactly(
|
||||
{ 'key' => 'foo', 'value' => 'foo' },
|
||||
{ 'key' => 'bar', 'value' => 'bar' }
|
||||
|
@ -115,7 +115,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it 'returns all custom attributes' do
|
||||
get api("/#{attributable_name}/#{attributable.id}/custom_attributes", admin)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).to contain_exactly(
|
||||
{ 'key' => 'foo', 'value' => 'foo' },
|
||||
{ 'key' => 'bar', 'value' => 'bar' }
|
||||
|
@ -135,7 +135,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
it'returns a single custom attribute' do
|
||||
get api("/#{attributable_name}/#{attributable.id}/custom_attributes/foo", admin)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).to eq({ 'key' => 'foo', 'value' => 'foo' })
|
||||
end
|
||||
end
|
||||
|
@ -154,7 +154,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
put api("/#{attributable_name}/#{attributable.id}/custom_attributes/new", admin), params: { value: 'new' }
|
||||
end.to change { attributable.custom_attributes.count }.by(1)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).to eq({ 'key' => 'new', 'value' => 'new' })
|
||||
expect(attributable.custom_attributes.find_by(key: 'new').value).to eq 'new'
|
||||
end
|
||||
|
@ -164,7 +164,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
put api("/#{attributable_name}/#{attributable.id}/custom_attributes/foo", admin), params: { value: 'new' }
|
||||
end.not_to change { attributable.custom_attributes.count }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).to eq({ 'key' => 'foo', 'value' => 'new' })
|
||||
expect(custom_attribute1.reload.value).to eq 'new'
|
||||
end
|
||||
|
@ -184,7 +184,7 @@ shared_examples 'custom attributes endpoints' do |attributable_name|
|
|||
delete api("/#{attributable_name}/#{attributable.id}/custom_attributes/foo", admin)
|
||||
end.to change { attributable.custom_attributes.count }.by(-1)
|
||||
|
||||
expect(response).to have_gitlab_http_status(204)
|
||||
expect(response).to have_gitlab_http_status(:no_content)
|
||||
expect(attributable.custom_attributes.find_by(key: 'foo')).to be_nil
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ shared_examples 'diff discussions API' do |parent_type, noteable_type, id_name|
|
|||
|
||||
discussion = json_response.find { |record| record['id'] == diff_note.discussion_id }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(discussion).not_to be_nil
|
||||
expect(discussion['individual_note']).to eq(false)
|
||||
expect(discussion['notes'].first['body']).to eq(diff_note.note)
|
||||
|
@ -18,7 +18,7 @@ shared_examples 'diff discussions API' do |parent_type, noteable_type, id_name|
|
|||
it "returns a discussion by id" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions/#{diff_note.discussion_id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['id']).to eq(diff_note.discussion_id)
|
||||
expect(json_response['notes'].first['body']).to eq(diff_note.note)
|
||||
expect(json_response['notes'].first['position']).to eq(diff_note.position.to_h.stringify_keys)
|
||||
|
@ -32,7 +32,7 @@ shared_examples 'diff discussions API' do |parent_type, noteable_type, id_name|
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", user),
|
||||
params: { body: 'hi!', position: position }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['notes'].first['body']).to eq('hi!')
|
||||
expect(json_response['notes'].first['type']).to eq('DiffNote')
|
||||
expect(json_response['notes'].first['position']).to eq(position.stringify_keys)
|
||||
|
@ -45,7 +45,7 @@ shared_examples 'diff discussions API' do |parent_type, noteable_type, id_name|
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", user),
|
||||
params: { body: 'hi!', position: position }
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
|
||||
it "returns a 400 bad request error when the position is not valid for this discussion" do
|
||||
|
@ -54,7 +54,7 @@ shared_examples 'diff discussions API' do |parent_type, noteable_type, id_name|
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", user),
|
||||
params: { body: 'hi!', position: position }
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -64,7 +64,7 @@ shared_examples 'diff discussions API' do |parent_type, noteable_type, id_name|
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{diff_note.discussion_id}/notes", user), params: { body: 'hi!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['type']).to eq('DiffNote')
|
||||
end
|
||||
|
|
|
@ -23,7 +23,7 @@ shared_examples 'with cross-reference system notes' do
|
|||
it 'returns only the note that the user should see' do
|
||||
get api(url, user, personal_access_token: pat)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response.count).to eq(1)
|
||||
expect(notes_in_response.count).to eq(1)
|
||||
|
||||
|
@ -40,7 +40,7 @@ shared_examples 'with cross-reference system notes' do
|
|||
get api(url, user, personal_access_token: pat)
|
||||
end
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
|
||||
RequestStore.clear!
|
||||
|
||||
|
@ -50,7 +50,7 @@ shared_examples 'with cross-reference system notes' do
|
|||
RequestStore.clear!
|
||||
|
||||
expect { get api(url, user, personal_access_token: pat) }.not_to exceed_query_limit(control)
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -59,7 +59,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
it "returns an array of discussions" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.first['id']).to eq(note.discussion_id)
|
||||
|
@ -68,7 +68,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
it "returns a 404 error when noteable id not found" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/12345/discussions", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it "returns 404 when not authorized" do
|
||||
|
@ -76,7 +76,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", private_user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -84,7 +84,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
it "returns a discussion by id" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions/#{note.discussion_id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['id']).to eq(note.discussion_id)
|
||||
expect(json_response['notes'].first['body']).to eq(note.note)
|
||||
end
|
||||
|
@ -92,7 +92,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
it "returns a 404 error if discussion not found" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions/12345", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -100,7 +100,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
it "creates a new note" do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", user), params: { body: 'hi!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['notes'].first['body']).to eq('hi!')
|
||||
expect(json_response['notes'].first['author']['username']).to eq(user.username)
|
||||
end
|
||||
|
@ -108,13 +108,13 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
it "returns a 400 bad request error if body not given" do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
|
||||
it "returns a 401 unauthorized error if user not authenticated" do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions"), params: { body: 'hi!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(401)
|
||||
expect(response).to have_gitlab_http_status(:unauthorized)
|
||||
end
|
||||
|
||||
it 'tracks a Notes::CreateService event' do
|
||||
|
@ -146,7 +146,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", user),
|
||||
params: { body: 'hi!', created_at: creation_time }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['notes'].first['body']).to eq('hi!')
|
||||
expect(json_response['notes'].first['author']['username']).to eq(user.username)
|
||||
expect(Time.parse(json_response['notes'].first['created_at'])).to be_like_time(creation_time)
|
||||
|
@ -162,7 +162,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/discussions", private_user),
|
||||
params: { body: 'Foo' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -181,7 +181,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
end
|
||||
|
||||
it 'raises 404 error' do
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -191,7 +191,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
end
|
||||
|
||||
it 'raises 404 error' do
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -203,7 +203,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes", user), params: { body: 'Hello!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('Hello!')
|
||||
expect(json_response['type']).to eq('DiscussionNote')
|
||||
end
|
||||
|
@ -212,7 +212,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
|
||||
context 'when the discussion is an individual note' do
|
||||
|
@ -225,13 +225,13 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
|
||||
if can_reply_to_individual_notes
|
||||
it 'creates a new discussion' do
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['type']).to eq('DiscussionNote')
|
||||
end
|
||||
else
|
||||
it 'returns 400 bad request' do
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -242,7 +242,7 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/#{note.id}", user), params: { body: 'Hello!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['body']).to eq('Hello!')
|
||||
end
|
||||
|
||||
|
@ -251,14 +251,14 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
"discussions/#{note.discussion_id}/notes/12345", user),
|
||||
params: { body: 'Hello!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'returns a 400 bad request error if body not given' do
|
||||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/#{note.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -267,18 +267,18 @@ shared_examples 'discussions API' do |parent_type, noteable_type, id_name, can_r
|
|||
delete api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/#{note.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(204)
|
||||
expect(response).to have_gitlab_http_status(:no_content)
|
||||
# Check if note is really deleted
|
||||
delete api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/#{note.id}", user)
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'returns a 404 error when note id not found' do
|
||||
delete api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/12345", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it_behaves_like '412 response' do
|
||||
|
|
|
@ -6,7 +6,7 @@ shared_examples 'issuable participants endpoint' do
|
|||
it 'returns participants' do
|
||||
get api("/projects/#{project.id}/#{area}/#{entity.iid}/participants", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.size).to eq(entity.participants.size)
|
||||
|
@ -20,12 +20,12 @@ shared_examples 'issuable participants endpoint' do
|
|||
it 'returns a 404 when iid does not exist' do
|
||||
get api("/projects/#{project.id}/#{area}/999/participants", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'returns a 404 when id is used instead of iid' do
|
||||
get api("/projects/#{project.id}/#{area}/#{entity.id}/participants", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -82,7 +82,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it "returns an array of notes" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.first['body']).to eq(note.note)
|
||||
|
@ -91,7 +91,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it "returns a 404 error when noteable id not found" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/12345/notes", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it "returns 404 when not authorized" do
|
||||
|
@ -99,7 +99,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", private_user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -107,14 +107,14 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it "returns a note by id" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes/#{note.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['body']).to eq(note.note)
|
||||
end
|
||||
|
||||
it "returns a 404 error if note not found" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes/12345", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -122,7 +122,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it "creates a new note" do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user), params: { body: 'hi!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['author']['username']).to eq(user.username)
|
||||
end
|
||||
|
@ -130,13 +130,13 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it "returns a 400 bad request error if body not given" do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
|
||||
it "returns a 401 unauthorized error if user not authenticated" do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes"), params: { body: 'hi!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(401)
|
||||
expect(response).to have_gitlab_http_status(:unauthorized)
|
||||
end
|
||||
|
||||
it "creates an activity event when a note is created", :sidekiq_might_not_need_inline do
|
||||
|
@ -154,7 +154,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
admin = create(:admin)
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", admin), params: params
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['author']['username']).to eq(admin.username)
|
||||
expect(Time.parse(json_response['created_at'])).to be_like_time(creation_time)
|
||||
|
@ -167,7 +167,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it 'sets the creation time on the new note' do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user), params: params
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['author']['username']).to eq(user.username)
|
||||
expect(Time.parse(json_response['created_at'])).to be_like_time(creation_time)
|
||||
|
@ -185,7 +185,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user2), params: params
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['author']['username']).to eq(user2.username)
|
||||
expect(Time.parse(json_response['created_at'])).to be_like_time(creation_time)
|
||||
|
@ -197,7 +197,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it 'sets the creation time on the new note' do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user), params: params
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['author']['username']).to eq(user.username)
|
||||
expect(Time.parse(json_response['created_at'])).to be_like_time(creation_time)
|
||||
|
@ -212,7 +212,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
parent.add_developer(user2)
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user2), params: params
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq('hi!')
|
||||
expect(json_response['author']['username']).to eq(user2.username)
|
||||
expect(Time.parse(json_response['created_at'])).not_to be_like_time(creation_time)
|
||||
|
@ -226,7 +226,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
parent.add_developer(private_user)
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", private_user), params: { body: ':+1:' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq(':+1:')
|
||||
end
|
||||
end
|
||||
|
@ -235,7 +235,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
it 'creates a new note' do
|
||||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user), params: { body: ':+1:' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(201)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['body']).to eq(':+1:')
|
||||
end
|
||||
end
|
||||
|
@ -249,7 +249,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", private_user),
|
||||
params: { body: 'Foo' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -259,7 +259,7 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"notes/#{note.id}", user), params: { body: 'Hello!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['body']).to eq('Hello!')
|
||||
end
|
||||
|
||||
|
@ -267,14 +267,14 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes/12345", user),
|
||||
params: { body: 'Hello!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'returns a 400 bad request error if body not given' do
|
||||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"notes/#{note.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -283,17 +283,17 @@ shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
|
|||
delete api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"notes/#{note.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(204)
|
||||
expect(response).to have_gitlab_http_status(:no_content)
|
||||
# Check if note is really deleted
|
||||
delete api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"notes/#{note.id}", user)
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'returns a 404 error when note id not found' do
|
||||
delete api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes/12345", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it_behaves_like '412 response' do
|
||||
|
|
|
@ -6,7 +6,7 @@ shared_examples 'resolvable discussions API' do |parent_type, noteable_type, id_
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}", user), params: { resolved: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['notes'].size).to eq(1)
|
||||
expect(json_response['notes'][0]['resolved']).to eq(true)
|
||||
end
|
||||
|
@ -15,7 +15,7 @@ shared_examples 'resolvable discussions API' do |parent_type, noteable_type, id_
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}", user), params: { resolved: false }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['notes'].size).to eq(1)
|
||||
expect(json_response['notes'][0]['resolved']).to eq(false)
|
||||
end
|
||||
|
@ -24,21 +24,21 @@ shared_examples 'resolvable discussions API' do |parent_type, noteable_type, id_
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
|
||||
it "returns a 401 unauthorized error if user is not authenticated" do
|
||||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}"), params: { resolved: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(401)
|
||||
expect(response).to have_gitlab_http_status(:unauthorized)
|
||||
end
|
||||
|
||||
it "returns a 403 error if user resolves discussion of someone else" do
|
||||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}", private_user), params: { resolved: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(403)
|
||||
expect(response).to have_gitlab_http_status(:forbidden)
|
||||
end
|
||||
|
||||
context 'when user does not have access to read the discussion' do
|
||||
|
@ -50,7 +50,7 @@ shared_examples 'resolvable discussions API' do |parent_type, noteable_type, id_
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}", private_user), params: { resolved: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -60,7 +60,7 @@ shared_examples 'resolvable discussions API' do |parent_type, noteable_type, id_
|
|||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/#{note.id}", user), params: { resolved: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['resolved']).to eq(true)
|
||||
end
|
||||
|
||||
|
@ -69,21 +69,21 @@ shared_examples 'resolvable discussions API' do |parent_type, noteable_type, id_
|
|||
"discussions/#{note.discussion_id}/notes/12345", user),
|
||||
params: { body: 'Hello!' }
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it 'returns a 400 bad request error if neither body nor resolved parameter is given' do
|
||||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/#{note.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
end
|
||||
|
||||
it "returns a 403 error if user resolves note of someone else" do
|
||||
put api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/"\
|
||||
"discussions/#{note.discussion_id}/notes/#{note.id}", private_user), params: { resolved: true }
|
||||
|
||||
expect(response).to have_gitlab_http_status(403)
|
||||
expect(response).to have_gitlab_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -13,7 +13,7 @@ shared_examples_for '400 response' do
|
|||
end
|
||||
|
||||
it 'returns 400' do
|
||||
expect(response).to have_gitlab_http_status(400)
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
|
||||
if message.present?
|
||||
expect(json_response['message']).to eq(message)
|
||||
|
@ -28,7 +28,7 @@ shared_examples_for '403 response' do
|
|||
end
|
||||
|
||||
it 'returns 403' do
|
||||
expect(response).to have_gitlab_http_status(403)
|
||||
expect(response).to have_gitlab_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -41,7 +41,7 @@ shared_examples_for '404 response' do
|
|||
end
|
||||
|
||||
it 'returns 404' do
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
expect(json_response).to be_an Object
|
||||
|
||||
if message.present?
|
||||
|
@ -60,7 +60,7 @@ shared_examples_for '412 response' do
|
|||
end
|
||||
|
||||
it 'returns 412 with a JSON error' do
|
||||
expect(response).to have_gitlab_http_status(412)
|
||||
expect(response).to have_gitlab_http_status(:precondition_failed)
|
||||
expect(json_response).to eq('message' => '412 Precondition Failed')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -33,7 +33,7 @@ shared_examples_for 'rate-limited token-authenticated requests' do
|
|||
# At first, allow requests under the rate limit.
|
||||
requests_per_period.times do
|
||||
make_request(request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
# the last straw
|
||||
|
@ -43,7 +43,7 @@ shared_examples_for 'rate-limited token-authenticated requests' do
|
|||
it 'allows requests after throttling and then waiting for the next period' do
|
||||
requests_per_period.times do
|
||||
make_request(request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
expect_rejection { make_request(request_args) }
|
||||
|
@ -51,7 +51,7 @@ shared_examples_for 'rate-limited token-authenticated requests' do
|
|||
Timecop.travel(period.from_now) do
|
||||
requests_per_period.times do
|
||||
make_request(request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
expect_rejection { make_request(request_args) }
|
||||
|
@ -61,18 +61,18 @@ shared_examples_for 'rate-limited token-authenticated requests' do
|
|||
it 'counts requests from different users separately, even from the same IP' do
|
||||
requests_per_period.times do
|
||||
make_request(request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
# would be over the limit if this wasn't a different user
|
||||
make_request(other_user_request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
it 'counts all requests from the same user, even via different IPs' do
|
||||
requests_per_period.times do
|
||||
make_request(request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
expect_any_instance_of(Rack::Attack::Request).to receive(:ip).at_least(:once).and_return('1.2.3.4')
|
||||
|
@ -83,7 +83,7 @@ shared_examples_for 'rate-limited token-authenticated requests' do
|
|||
it 'logs RackAttack info into structured logs' do
|
||||
requests_per_period.times do
|
||||
make_request(request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
arguments = {
|
||||
|
@ -112,7 +112,7 @@ shared_examples_for 'rate-limited token-authenticated requests' do
|
|||
it 'allows requests over the rate limit' do
|
||||
(1 + requests_per_period).times do
|
||||
make_request(request_args)
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -160,7 +160,7 @@ shared_examples_for 'rate-limited web authenticated requests' do
|
|||
# At first, allow requests under the rate limit.
|
||||
requests_per_period.times do
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
# the last straw
|
||||
|
@ -170,7 +170,7 @@ shared_examples_for 'rate-limited web authenticated requests' do
|
|||
it 'allows requests after throttling and then waiting for the next period' do
|
||||
requests_per_period.times do
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
expect_rejection { request_authenticated_web_url }
|
||||
|
@ -178,7 +178,7 @@ shared_examples_for 'rate-limited web authenticated requests' do
|
|||
Timecop.travel(period.from_now) do
|
||||
requests_per_period.times do
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
expect_rejection { request_authenticated_web_url }
|
||||
|
@ -188,20 +188,20 @@ shared_examples_for 'rate-limited web authenticated requests' do
|
|||
it 'counts requests from different users separately, even from the same IP' do
|
||||
requests_per_period.times do
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
# would be over the limit if this wasn't a different user
|
||||
login_as(create(:user))
|
||||
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
it 'counts all requests from the same user, even via different IPs' do
|
||||
requests_per_period.times do
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
expect_any_instance_of(Rack::Attack::Request).to receive(:ip).at_least(:once).and_return('1.2.3.4')
|
||||
|
@ -212,7 +212,7 @@ shared_examples_for 'rate-limited web authenticated requests' do
|
|||
it 'logs RackAttack info into structured logs' do
|
||||
requests_per_period.times do
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
|
||||
arguments = {
|
||||
|
@ -241,7 +241,7 @@ shared_examples_for 'rate-limited web authenticated requests' do
|
|||
it 'allows requests over the rate limit' do
|
||||
(1 + requests_per_period).times do
|
||||
request_authenticated_web_url
|
||||
expect(response).not_to have_http_status 429
|
||||
expect(response).not_to have_gitlab_http_status(:too_many_requests)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,7 +8,7 @@ shared_examples 'resource_label_events API' do |parent_type, eventable_type, id_
|
|||
it "returns an array of resource label events" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{eventable_type}/#{eventable[id_name]}/resource_label_events", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.first['id']).to eq(event.id)
|
||||
|
@ -17,7 +17,7 @@ shared_examples 'resource_label_events API' do |parent_type, eventable_type, id_
|
|||
it "returns a 404 error when eventable id not found" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{eventable_type}/12345/resource_label_events", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it "returns 404 when not authorized" do
|
||||
|
@ -26,7 +26,7 @@ shared_examples 'resource_label_events API' do |parent_type, eventable_type, id_
|
|||
|
||||
get api("/#{parent_type}/#{parent.id}/#{eventable_type}/#{eventable[id_name]}/resource_label_events", private_user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -60,7 +60,7 @@ shared_examples 'resource_label_events API' do |parent_type, eventable_type, id_
|
|||
it "returns a resource label event by id" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{eventable_type}/#{eventable[id_name]}/resource_label_events/#{event.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response['id']).to eq(event.id)
|
||||
end
|
||||
|
||||
|
@ -70,13 +70,13 @@ shared_examples 'resource_label_events API' do |parent_type, eventable_type, id_
|
|||
|
||||
get api("/#{parent_type}/#{parent.id}/#{eventable_type}/#{eventable[id_name]}/resource_label_events/#{event.id}", private_user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
|
||||
it "returns a 404 error if resource label event not found" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{eventable_type}/#{eventable[id_name]}/resource_label_events/12345", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -88,7 +88,7 @@ shared_examples 'resource_label_events API' do |parent_type, eventable_type, id_
|
|||
it "returns a 404 error if cross-reference project is not accessible" do
|
||||
get api("/#{parent_type}/#{parent.id}/#{eventable_type}/#{eventable[id_name]}/resource_label_events/#{event.id}", user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(404)
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -69,7 +69,7 @@ shared_examples 'user login request with unique ip limit' do |success_status = 2
|
|||
|
||||
it 'blocks user authenticating from two distinct ips' do
|
||||
expect(request_from_ip('ip')).to have_gitlab_http_status(success_status)
|
||||
expect(request_from_ip('ip2')).to have_gitlab_http_status(403)
|
||||
expect(request_from_ip('ip2')).to have_gitlab_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue