rspec unit pg13 6/28
Passed Started
by
@fabiopitino
Fabio Pitino
1Running with gitlab-runner 16.1.0~beta.5.gf131a6a2 (f131a6a2)2 on blue-2.private.runners-manager.gitlab.com/gitlab.com/gitlab-org QvBVRoXM, system ID: s_49b872f8ccf63 feature flags: FF_NETWORK_PER_BUILD:true, FF_USE_FASTZIP:true, FF_USE_IMPROVED_URL_MASKING:true6Using Docker executor with image registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-18.16-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-113-yarn-1.22-graphicsmagick-1.3.36 ...7Starting service registry.gitlab.com/gitlab-org/gitlab-build-images:postgres-13-pgvector-0.4.1 ...8Authenticating with credentials from job payload (GitLab Registry)9Pulling docker image registry.gitlab.com/gitlab-org/gitlab-build-images:postgres-13-pgvector-0.4.1 ...10Using docker image sha256:73740c557807c4bc5d692f263c0e35454270600da4b22bbe952331411426c8b5 for registry.gitlab.com/gitlab-org/gitlab-build-images:postgres-13-pgvector-0.4.1 with digest registry.gitlab.com/gitlab-org/gitlab-build-images@sha256:3174001f839c42e299ac06a42f8ded446edfcb33b0eb820874749a3f53eb799c ...11WARNING: Service registry.gitlab.com/gitlab-org/gitlab-build-images:redis-cluster-6.2.12 is already created. Ignoring.12WARNING: Service registry.gitlab.com/gitlab-org/gitlab-build-images:redis-cluster-6.2.12 is already created. Ignoring.13Starting service registry.gitlab.com/gitlab-org/gitlab-build-images:redis-cluster-6.2.12 ...14Authenticating with credentials from job payload (GitLab Registry)15Pulling docker image registry.gitlab.com/gitlab-org/gitlab-build-images:redis-cluster-6.2.12 ...16Using docker image sha256:a9a90ece30d9630d694ab1997cd103ea8ec729789451b983a75c7b58b0062d45 for registry.gitlab.com/gitlab-org/gitlab-build-images:redis-cluster-6.2.12 with digest registry.gitlab.com/gitlab-org/gitlab-build-images@sha256:7ef36177d5d0bc554fbb63d8210ae751bcc538bea7905b51d078d9ab90a755fa ...17Starting service redis:6.2-alpine ...18Pulling docker image redis:6.2-alpine ...19Using docker image sha256:85fd7bd884b6493c8eb6f4dffbe5406d97cce56aff84f1580a5eb5b9d841f158 for redis:6.2-alpine with digest redis@sha256:87c44d5d9f472e767c8737f4130c765d77bdc95c7472d6427cfc9d4632f12da6 ...20Waiting for services to be up and running (timeout 30 seconds)...21Authenticating with credentials from job payload (GitLab Registry)22Pulling docker image registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-18.16-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-113-yarn-1.22-graphicsmagick-1.3.36 ...23Using docker image sha256:61b59025d0d646cd177f654d8f81df859675be528f37dcc2ce6f39a49c7a5dd9 for registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-18.16-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-113-yarn-1.22-graphicsmagick-1.3.36 with digest registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-18.16-postgresql-13@sha256:25367d41b1034f1ecacfc9cb8eebc70cb30c6fdade3781cf295488255bf61614 ...25Running on runner-qvbvroxm-project-278964-concurrent-0 via runner-qvbvroxm-private-1685686879-6e2f3a18...27Fetching changes with git depth set to 20...28Initialized empty Git repository in /builds/gitlab-org/gitlab/.git/29Created fresh repository.30remote: Enumerating objects: 139970, done. 31remote: Counting objects: 100% (139970/139970), done. 32remote: Compressing objects: 100% (94736/94736), done. 33remote: Total 139970 (delta 61223), reused 92035 (delta 39894), pack-reused 0 34Receiving objects: 100% (139970/139970), 123.36 MiB | 29.88 MiB/s, done.35Resolving deltas: 100% (61223/61223), done.37 * [new ref] refs/pipelines/887306308 -> refs/pipelines/88730630838Checking out 95754c79 as detached HEAD (ref is refs/merge-requests/122015/merge)...39Skipping Git submodules setup40$ git remote set-url origin "${CI_REPOSITORY_URL}"42Checking cache for ruby-gems-debian-bullseye-ruby-3.0-16...43Downloading cache.zip from https://storage.googleapis.com/gitlab-com-runners-cache/project/278964/ruby-gems-debian-bullseye-ruby-3.0-16 44Successfully extracted cache46Downloading artifacts for compile-test-assets (4400964016)...47Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4400964016 responseStatus=200 OK token=64_KpzJ348Downloading artifacts for detect-tests (4400964025)...49Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4400964025 responseStatus=200 OK token=64_KpzJ350Downloading artifacts for retrieve-tests-metadata (4400964028)...51Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4400964028 responseStatus=200 OK token=64_KpzJ352Downloading artifacts for setup-test-env (4400964019)...53Downloading artifacts from coordinator... ok host=storage.googleapis.com id=4400964019 responseStatus=200 OK token=64_KpzJ355Using docker image sha256:61b59025d0d646cd177f654d8f81df859675be528f37dcc2ce6f39a49c7a5dd9 for registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-18.16-postgresql-13:rubygems-3.4-git-2.36-lfs-2.9-chrome-113-yarn-1.22-graphicsmagick-1.3.36 with digest registry.gitlab.com/gitlab-org/gitlab-build-images/debian-bullseye-ruby-3.0.patched-golang-1.19-rust-1.65-node-18.16-postgresql-13@sha256:25367d41b1034f1ecacfc9cb8eebc70cb30c6fdade3781cf295488255bf61614 ...56$ echo $FOSS_ONLY57$ [ "$FOSS_ONLY" = "1" ] && rm -rf ee/ qa/spec/ee/ qa/qa/specs/features/ee/ qa/qa/ee/ qa/qa/ee.rb58$ export GOPATH=$CI_PROJECT_DIR/.go59$ mkdir -p $GOPATH60$ source scripts/utils.sh61$ source scripts/prepare_build.sh716Using decomposed database config (config/database.yml.decomposed-postgresql)717Geo DB won't be set up.718Embedding DB won't be set up.734$ source ./scripts/rspec_helpers.sh735$ run_timed_command "gem install knapsack --no-document"736$ gem install knapsack --no-document737Successfully installed knapsack-4.0.07381 gem installed739$ echo -e "\e[0Ksection_start:`date +%s`:gitaly-test-spawn[collapsed=true]\r\e[0KStarting Gitaly"740==> 'gem install knapsack --no-document' succeeded in 1 seconds.742$ section_start "gitaly-test-spawn" "Spawning Gitaly"; scripts/gitaly-test-spawn; section_end "gitaly-test-spawn"747$ echo -e "\e[0Ksection_end:`date +%s`:gitaly-test-spawn\r\e[0K"748$ rspec_paralellized_job "--tag ~quarantine --tag ~level:background_migration"749SKIP_FLAKY_TESTS_AUTOMATICALLY: 750RETRY_FAILED_TESTS_IN_NEW_PROCESS: true751KNAPSACK_GENERATE_REPORT: true752FLAKY_RSPEC_GENERATE_REPORT: true753KNAPSACK_TEST_FILE_PATTERN: spec/{bin,channels,components,config,contracts,db,dependencies,elastic,elastic_integration,experiments,factories,finders,frontend,graphql,haml_lint,helpers,initializers,lib,metrics_server,models,policies,presenters,rack_servers,replicators,routing,rubocop,scripts,serializers,services,sidekiq,sidekiq_cluster,spam,support_specs,tasks,uploaders,validators,views,workers,tooling}{,/**/}*_spec.rb754KNAPSACK_LOG_LEVEL: debug755KNAPSACK_REPORT_PATH: knapsack/rspec_unit_pg13_6_28_report.json756FLAKY_RSPEC_SUITE_REPORT_PATH: rspec/flaky/report-suite.json757FLAKY_RSPEC_REPORT_PATH: rspec/flaky/all_rspec_unit_pg13_6_28_report.json758NEW_FLAKY_RSPEC_REPORT_PATH: rspec/flaky/new_rspec_unit_pg13_6_28_report.json759SKIPPED_TESTS_REPORT_PATH: rspec/skipped_tests_rspec_unit_pg13_6_28.txt760CRYSTALBALL: 761RSPEC_TESTS_MAPPING_ENABLED: 762RSPEC_TESTS_FILTER_FILE: 763Running command: bundle exec rspec -Ispec -rspec_helper --color --failure-exit-code 1 --error-exit-code 2 --format documentation --format Support::Formatters::JsonFormatter --out rspec/rspec-4400964206.json --format RspecJunitFormatter --out rspec/rspec-4400964206.xml --tag ~quarantine --tag ~level:background_migration -- spec/models/merge_request_spec.rb spec/lib/gitlab/usage_data_metrics_spec.rb spec/models/wiki_page_spec.rb spec/lib/gitlab/database/migration_helpers_spec.rb spec/services/merge_requests/merge_service_spec.rb spec/services/members/update_service_spec.rb spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb spec/presenters/projects/security/configuration_presenter_spec.rb spec/lib/gitlab/background_migration/backfill_user_details_fields_spec.rb spec/lib/gitlab/background_migration/backfill_project_repositories_spec.rb spec/serializers/group_child_entity_spec.rb spec/lib/gitlab/background_migration/destroy_invalid_group_members_spec.rb spec/lib/gitlab/ci/build/rules/rule/clause/exists_spec.rb spec/lib/banzai/reference_parser/snippet_parser_spec.rb spec/services/ci/process_sync_events_service_spec.rb spec/models/ci/bridge_spec.rb spec/models/integrations/field_spec.rb spec/lib/banzai/color_parser_spec.rb spec/models/operations/feature_flag_spec.rb spec/finders/group_descendants_finder_spec.rb spec/services/issues/import_csv_service_spec.rb spec/workers/projects/import_export/create_relation_exports_worker_spec.rb spec/lib/gitlab/file_type_detection_spec.rb spec/graphql/resolvers/todos_resolver_spec.rb spec/lib/gitlab/json_cache_spec.rb spec/lib/gitlab/background_migration/batching_strategies/primary_key_batching_strategy_spec.rb spec/graphql/mutations/issues/update_spec.rb spec/finders/ci/pipelines_for_merge_request_finder_spec.rb spec/services/merge_requests/get_urls_service_spec.rb spec/lib/gitlab/x509/signature_spec.rb spec/lib/gitlab/ci/badge/release/template_spec.rb spec/lib/banzai/filter/reference_redactor_filter_spec.rb spec/lib/gitlab/ci/config/entry/variables_spec.rb spec/workers/issuable_export_csv_worker_spec.rb spec/lib/banzai/filter/sanitization_filter_spec.rb spec/lib/gitlab/chat/command_spec.rb spec/lib/gitlab/multi_collection_paginator_spec.rb spec/lib/gitlab/github_import/importer/pull_requests/review_importer_spec.rb spec/lib/banzai/filter/references/feature_flag_reference_filter_spec.rb spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb spec/models/analytics/cycle_analytics/aggregation_spec.rb spec/lib/gitlab/ci/config/external/file/artifact_spec.rb spec/services/files/delete_service_spec.rb spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb spec/models/slack_integration_spec.rb spec/lib/banzai/object_renderer_spec.rb spec/graphql/resolvers/container_repositories_resolver_spec.rb spec/finders/pending_todos_finder_spec.rb spec/presenters/project_member_presenter_spec.rb spec/workers/update_head_pipeline_for_merge_request_worker_spec.rb spec/lib/gitlab/ci/config/normalizer_spec.rb spec/models/users/in_product_marketing_email_spec.rb spec/graphql/resolvers/labels_resolver_spec.rb spec/models/prometheus_alert_spec.rb spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb spec/lib/gitlab/slash_commands/issue_comment_spec.rb spec/lib/gitlab/ci/ansi2json/line_spec.rb spec/services/jira_connect_subscriptions/create_service_spec.rb spec/lib/gitlab/ci/pipeline/chain/limit/rate_limit_spec.rb spec/helpers/broadcast_messages_helper_spec.rb spec/rubocop/cop/graphql/descriptions_spec.rb spec/models/integrations/slack_slash_commands_spec.rb spec/lib/gitlab/alert_management/payload/managed_prometheus_spec.rb spec/models/uploads/fog_spec.rb spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb spec/models/concerns/manual_inverse_association_spec.rb spec/lib/gitlab/database/postgres_hll/batch_distinct_counter_spec.rb spec/models/issue_link_spec.rb spec/views/ci/status/_badge.html.haml_spec.rb spec/workers/merge_requests/create_approval_event_worker_spec.rb spec/lib/gitlab/database/async_indexes/migration_helpers_spec.rb spec/lib/gitlab/ci/badge/coverage/template_spec.rb spec/services/labels/create_service_spec.rb spec/lib/bulk_imports/common/pipelines/milestones_pipeline_spec.rb spec/workers/merge_requests/close_issue_worker_spec.rb spec/models/snippets/repository_storage_move_spec.rb spec/services/service_desk/custom_email_verifications/update_service_spec.rb spec/config/settings_spec.rb spec/workers/ml/experiment_tracking/associate_ml_candidate_to_package_worker_spec.rb spec/services/ci/compare_codequality_reports_service_spec.rb spec/lib/gitlab/database/load_balancing/service_discovery/sampler_spec.rb spec/models/import_failure_spec.rb spec/lib/gitlab/slash_commands/issue_close_spec.rb spec/lib/gitlab/checks/container_moved_spec.rb spec/lib/gitlab/chat/responder/slack_spec.rb spec/presenters/projects/import_export/project_export_presenter_spec.rb spec/lib/gitlab/ci/status/processable/waiting_for_resource_spec.rb spec/rubocop/cop/redis_queue_usage_spec.rb spec/lib/gitlab/spamcheck/result_spec.rb spec/lib/gitlab/git/push_spec.rb spec/workers/repository_cleanup_worker_spec.rb spec/presenters/search_service_presenter_spec.rb spec/lib/gitlab/doorkeeper_secret_storing/secret/pbkdf2_sha512_spec.rb spec/workers/x509_issuer_crl_check_worker_spec.rb spec/lib/gitlab/kas/client_spec.rb spec/services/ci/generate_codequality_mr_diff_report_service_spec.rb spec/lib/gitlab/data_builder/wiki_page_spec.rb spec/lib/gitlab/dependency_linker/composer_json_linker_spec.rb spec/models/projects/triggered_hooks_spec.rb spec/graphql/mutations/issues/set_locked_spec.rb spec/tasks/gitlab/gitaly_rake_spec.rb spec/models/packages/sem_ver_spec.rb spec/graphql/resolvers/ci/jobs_resolver_spec.rb spec/rack_servers/puma_spec.rb spec/models/concerns/limitable_spec.rb spec/lib/gitlab/database/schema_validation/database_spec.rb spec/lib/gitlab/slash_commands/presenters/deploy_spec.rb spec/finders/ci/pipeline_schedules_finder_spec.rb spec/services/ci/generate_terraform_reports_service_spec.rb spec/lib/gitlab/ci/project_config/repository_spec.rb spec/lib/bulk_imports/projects/graphql/get_snippet_repository_query_spec.rb spec/serializers/diffs_metadata_entity_spec.rb spec/lib/gitlab/repository_size_checker_spec.rb spec/validators/x509_certificate_credentials_validator_spec.rb spec/lib/gitlab/ci/status/build/failed_unmet_prerequisites_spec.rb spec/services/clusters/agents/authorize_proxy_user_service_spec.rb spec/lib/gitlab/ci/badge/coverage/report_spec.rb spec/lib/gitlab/background_migration/update_delayed_project_removal_to_null_for_user_namespaces_spec.rb spec/helpers/notify_helper_spec.rb spec/lib/gitlab/changelog/release_spec.rb spec/services/ci/create_pipeline_service/parameter_content_spec.rb spec/lib/gitlab/ci/config/entry/pull_policy_spec.rb spec/lib/sidebars/admin/menus/deploy_keys_menu_spec.rb spec/lib/api/helpers/merge_requests_helpers_spec.rb spec/lib/bulk_imports/groups/loaders/group_loader_spec.rb spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb spec/policies/clusters/agent_token_policy_spec.rb spec/helpers/storage_helper_spec.rb spec/services/metrics/users_starred_dashboards/delete_service_spec.rb spec/services/pages_domains/create_acme_order_service_spec.rb spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb spec/workers/snippets/schedule_bulk_repository_shard_moves_worker_spec.rb spec/lib/gitlab/ci/pipeline/chain/limit/active_jobs_spec.rb spec/graphql/mutations/custom_emoji/destroy_spec.rb spec/lib/gitlab/ci/parsers/security/secret_detection_spec.rb spec/workers/onboarding/progress_worker_spec.rb spec/views/groups/group_members/index.html.haml_spec.rb spec/lib/sidebars/projects/panel_spec.rb spec/rubocop/cop/migration/add_limit_to_text_columns_spec.rb spec/lib/gitlab/bitbucket_server_import/parallel_importer_spec.rb spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb spec/lib/gitlab/ci/input/arguments/options_spec.rb spec/lib/safe_zip/extract_params_spec.rb spec/services/projects/record_target_platforms_service_spec.rb spec/rubocop/cop/code_reuse/service_class_spec.rb spec/lib/gitlab/ci/config/entry/services_spec.rb spec/models/concerns/id_in_ordered_spec.rb spec/helpers/json_helper_spec.rb spec/lib/api/helpers/version_spec.rb spec/rubocop/cop/put_project_routes_under_scope_spec.rb spec/lib/gitlab/health_checks/middleware_spec.rb spec/support_specs/matchers/be_sorted_spec.rb spec/graphql/types/commit_signatures/x509_signature_type_spec.rb spec/services/packages/conan/create_package_service_spec.rb spec/graphql/types/work_items/widgets/description_input_type_spec.rb spec/lib/gitlab/diff/inline_diff_marker_spec.rb spec/lib/atlassian/jira_connect/serializers/feature_flag_entity_spec.rb spec/lib/gitlab/prometheus/queries/validate_query_spec.rb spec/lib/gitlab/database_importers/work_items/base_type_importer_spec.rb spec/helpers/ci/secure_files_helper_spec.rb spec/graphql/mutations/clusters/agents/delete_spec.rb spec/views/dashboard/projects/_blank_state_welcome.html.haml_spec.rb spec/graphql/types/alert_management/domain_filter_enum_spec.rb spec/services/packages/update_tags_service_spec.rb spec/workers/jira_connect/sync_deployments_worker_spec.rb spec/tooling/rspec_flaky/report_spec.rb spec/lib/bulk_imports/projects/pipelines/project_attributes_pipeline_spec.rb spec/lib/gitlab/memory/watchdog/handlers/sidekiq_handler_spec.rb spec/lib/gitlab/database/migrations/runner_backoff/communicator_spec.rb spec/lib/gitlab/tracking/service_ping_context_spec.rb spec/lib/gitlab/ci/status/pipeline/delayed_spec.rb spec/services/bulk_imports/lfs_objects_export_service_spec.rb spec/lib/gitlab/ci/secure_files/cer_spec.rb spec/lib/gitlab/git/pre_receive_error_spec.rb spec/uploaders/object_storage/cdn_spec.rb spec/models/integrations/pushover_spec.rb spec/lib/gitlab/health_checks/puma_check_spec.rb spec/lib/gitlab/dependency_linker/podspec_linker_spec.rb spec/views/projects/settings/operations/show.html.haml_spec.rb spec/lib/banzai/commit_renderer_spec.rb spec/lib/gitlab/git/wiki_page_version_spec.rb spec/workers/admin_email_worker_spec.rb spec/workers/environments/canary_ingress/update_worker_spec.rb spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb spec/models/group_custom_attribute_spec.rb spec/lib/api/every_api_endpoint_spec.rb spec/models/dependency_proxy/registry_spec.rb spec/services/bulk_imports/archive_extraction_service_spec.rb spec/lib/gitlab/reference_counter_spec.rb spec/workers/ci/track_failed_build_worker_spec.rb spec/lib/gitlab/issuable_sorter_spec.rb spec/helpers/bizible_helper_spec.rb spec/lib/gitlab/graphql/mount_mutation_spec.rb spec/serializers/group_link/group_link_entity_spec.rb spec/graphql/types/merge_requests/reviewer_type_spec.rb spec/serializers/admin/abuse_report_entity_spec.rb spec/workers/gitlab/github_import/stage/import_repository_worker_spec.rb spec/graphql/types/diff_refs_type_spec.rb spec/graphql/mutations/saved_replies/destroy_spec.rb spec/rubocop/cop/migration/add_concurrent_foreign_key_spec.rb spec/lib/gitlab/usage/metrics/aggregates/sources/redis_hll_spec.rb spec/graphql/types/ci/pipeline_schedule_type_spec.rb spec/rubocop/cop/graphql/resolver_type_spec.rb spec/validators/import/gitlab_projects/remote_file_validator_spec.rb spec/workers/gitlab/github_import/stage/import_pull_requests_worker_spec.rb spec/graphql/types/clusters/agent_type_spec.rb spec/lib/gitlab/database/schema_validation/schema_objects/column_spec.rb spec/workers/gitlab/github_import/attachments/import_release_worker_spec.rb spec/lib/object_storage/fog_helpers_spec.rb spec/lib/gitlab/app_json_logger_spec.rb spec/lib/gitlab/kubernetes/kubeconfig/entry/context_spec.rb spec/graphql/types/notes/noteable_interface_spec.rb spec/graphql/types/ci/test_case_type_spec.rb spec/models/concerns/database_reflection_spec.rb spec/initializers/6_validations_spec.rb spec/lib/gitlab/database/schema_validation/schema_objects/index_spec.rb spec/lib/gitlab/usage_data_counters/search_counter_spec.rb spec/lib/system_check/app/hashed_storage_enabled_check_spec.rb spec/lib/gitlab/sidekiq_middleware/size_limiter/server_spec.rb spec/helpers/protected_refs_helper_spec.rb spec/graphql/types/ci/config/include_type_spec.rb spec/graphql/types/jira_user_type_spec.rb spec/lib/api/entities/public_group_details_spec.rb spec/services/deploy_keys/create_service_spec.rb spec/graphql/types/user_callout_feature_name_enum_spec.rb spec/lib/gitlab/database/obsolete_ignored_columns_spec.rb spec/graphql/types/ci_configuration/sast/ui_component_size_enum_spec.rb spec/lib/gitlab/kubernetes/role_binding_spec.rb spec/initializers/fog_google_https_private_urls_spec.rb spec/tooling/danger/database_spec.rb spec/lib/gitlab/graphql/query_analyzers/ast/logger_analyzer_spec.rb spec/graphql/types/packages/nuget/dependency_link_metdatum_type_spec.rb spec/graphql/types/ci/variable_interface_spec.rb spec/services/issues/base_service_spec.rb spec/lib/gitlab/diff/file_collection_sorter_spec.rb spec/graphql/types/subscription_type_spec.rb spec/initializers/asset_proxy_setting_spec.rbKnapsack report generator started!764warning: parser/current is loading parser/ruby30, which recognizes 3.0.5-compliant syntax, but you are running 3.0.6.766Run options: exclude {:quarantine=>true, :level=>"background_migration"}767Test environment set up in 0.969952968 seconds768MergeRequest769 associations770 is expected to belong to target_project class_name => Project required: false771 is expected to belong to source_project class_name => Project required: false772 is expected to belong to merge_user class_name => User required: false773 is expected to belong to head_pipeline class_name => Ci::Pipeline required: false inverse_of => merge_requests_as_head_pipeline774 is expected to have many assignees through merge_request_assignees775 is expected to have many reviewers through merge_request_reviewers776 is expected to have many merge_request_diffs777 is expected to have many user_mentions class_name => MergeRequestUserMention778 is expected to belong to milestone required: false779 is expected to have many resource_milestone_events780 is expected to have many resource_state_events781 is expected to have many draft_notes782 is expected to have many reviews inverse_of => merge_request783 is expected to have many reviewed_by_users through reviews source => author784 is expected to have one cleanup_schedule inverse_of => merge_request785 is expected to have many created_environments class_name => Environment inverse_of => merge_request786 is expected to have many assignment_events class_name => ResourceEvents::MergeRequestAssignmentEvent inverse_of => merge_request787 for forks788 does not load another project due to inverse relationship789 finds the associated merge request790 #reviewed_by_users791 when the same user has several reviews792 returns distinct users793 .from_and_to_forks794 returns only MRs from and to forks (with no internal MRs)795 .order_merged_at_asc796 returns MRs ordered by merged_at ascending797 .order_merged_at_desc798 returns MRs ordered by merged_at descending799 .order_closed_at_asc800 returns MRs ordered by closed_at ascending801 .order_closed_at_desc802 returns MRs ordered by closed_at descending803 .with_jira_issue_keys804 is expected to contain exactly #<MergeRequest id:16 namespace3/project-3!1> and #<MergeRequest id:17 namespace3/project-3!2>805 is expected not to include #<MergeRequest id:18 namespace3/project-3!3>806 scopes807 .preload_target_project_with_namespace808 returns MR with the target project's namespace preloaded809 .review_requested810 returns MRs that have any review requests811 .no_review_requested812 returns MRs that have no review requests813 .review_requested_to814 returns MRs that the user has been requested to review815 .no_review_requested_to816 returns MRs that the user has not been requested to review817 .drafts818 returns MRs where draft == true819 .without_hidden820 only returns public issuables821 when feature flag is disabled822 returns public and hidden issuables823 #squash?824 disabled in database825 is expected to be falsy826 enabled in database827 is expected to be truthy828 #default_squash_commit_message829 returns the merge request title830 uses template from target project831 modules832 is expected to includes the Issuable module833 is expected to includes the Referable module834 is expected to includes the Sortable module835 is expected to includes the Taskable module836 is expected to includes the MilestoneEventable module837 is expected to includes the StateEventable module838 behaves like AtomicInternalId839 .has_internal_id840 Module inclusion841 is expected to includes the AtomicInternalId module842 Validation843 when presence validation is required844 when creating an object845 raises an error if the internal id is blank846 when updating an object847 raises an error if the internal id is blank848 when presence validation is not required849 when creating an object850 does not raise an error if the internal id is blank (PENDING: No reason given)851 when updating an object852 does not raise an error if the internal id is blank (PENDING: No reason given)853 Creating an instance854 saves a new instance properly855 internal id generation856 calls InternalId.generate_next and sets internal id attribute857 does not overwrite an existing internal id858 when the instance has an internal ID set859 calls InternalId.update_last_value and sets the `last_value` to that of the instance860 unsetting the instance internal id on rollback861 when the internal id has been changed862 when the internal id is automatically set863 clears it on the instance864 when the internal id is manually set865 does not clear it on the instance866 when the internal id has not been changed867 preserves the value on the instance868 supply of internal ids869 provides a persistent supply of IID values, sensitive to the current state870 #reset_scope_internal_id_attribute871 rewinds the allocated IID872 allocates the same IID873 validation874 is expected to validate that :target_branch cannot be empty/falsy875 is expected to validate that :source_branch cannot be empty/falsy876 Validation of merge user with Merge When Pipeline Succeeds877 allows user to be nil when the feature is disabled878 is invalid without merge user879 is valid with merge user880 for branch881 branch_name: "foo", valid: true882 validates source_branch883 validates target_branch884 branch_name: "foo:bar", valid: false885 validates source_branch886 validates target_branch887 branch_name: "+foo:bar", valid: false888 validates source_branch889 validates target_branch890 branch_name: "foo bar", valid: false891 validates source_branch892 validates target_branch893 branch_name: "-foo", valid: false894 validates source_branch895 validates target_branch896 branch_name: "HEAD", valid: true897 validates source_branch898 validates target_branch899 branch_name: "refs/heads/master", valid: true900 validates source_branch901 validates target_branch902 for forks903 allows merge requests for sibling-forks904 #validate_target_project905 when projects #merge_requests_enabled? is true906 is expected to eq true907 when projects #merge_requests_enabled? is false908 is invalid909 when #import? is true910 is expected to eq true911 callbacks912 #ensure_merge_request_diff913 when skip_ensure_merge_request_diff is true914 does not create a merge_request_diff after create915 when skip_ensure_merge_request_diff is false916 creates merge_request_diff after create917 #ensure_merge_request_metrics918 creates metrics after saving919 does not duplicate metrics for a merge request920 does not create duplicated metrics records when MR is concurrently updated921 syncs the `target_project_id` to the metrics record922 #set_draft_status923 MR is a draft924 sets draft to true925 MR is not a draft926 sets draft to true927 respond to928 is expected to respond to #unchecked?929 is expected to respond to #checking?930 is expected to respond to #can_be_merged?931 is expected to respond to #cannot_be_merged?932 is expected to respond to #merge_params933 is expected to respond to #merge_when_pipeline_succeeds934 .by_commit_sha935 with sha contained in latest merge request diff936 returns merge requests937 with sha contained not in latest merge request diff938 returns empty requests939 with sha not contained in940 returns empty result941 .by_merge_commit_sha942 returns merge requests that match the given merge commit943 .by_squash_commit_sha944 returns merge requests that match the given squash commit945 .by_merge_or_squash_commit_sha946 returns merge requests that match the given squash and merge commits947 .join_metrics948 when a no target_project_id is available949 moves target_project_id condition to the merge request metrics950 when a target_project_id is present in the where conditions951 moves target_project_id condition to the merge request metrics952 .by_related_commit_sha953 when commit is a squash commit954 is expected to eq [#<MergeRequest id:50 namespace3/project-3!1>]955 when commit is a part of the merge request956 is expected to eq [#<MergeRequest id:51 namespace3/project-3!1>]957 when commit is a merge commit958 is expected to eq [#<MergeRequest id:52 namespace3/project-3!1>]959 when commit is not found960 is expected to be empty961 when commit is part of the merge request and a squash commit at the same time962 is expected to eq [#<MergeRequest id:53 namespace3/project-3!1>]963 .in_projects964 returns the merge requests for a set of projects965 .set_latest_merge_request_diff_ids!966 sets IDs for merge requests, whether they are already set or not967 .recent_target_branches968 returns target branches sort by updated at desc969 .sort_by_attribute970 merged_at971 sorts asc972 sorts desc973 closed_at974 sorts asc975 sorts desc976 sorts asc when its closed_at977 title978 sorts asc979 sorts desc980 time to merge calculations981 .total_time_to_merge982 returns the sum of the time to merge for all merged MRs983 when merged_at is earlier than created_at984 returns nil985 when scoped with :merged_before and :merged_after986 excludes merge requests outside of the date range987 #target_branch_sha988 returns memoized value989 when the target branch does not exist990 returns nil991 #card_attributes992 includes the author name993 includes the assignees name994 #assignee_or_author?995 returns true for a user that is assigned to a merge request996 returns true for a user that is the author of a merge request997 returns false for a user that is not the assignee or author998 #visible_closing_issues_for999 shows only allowed issues to guest1000 shows only allowed issues to developer1001 when external issue tracker is enabled1002 calls non #closes_issues to retrieve data1003 #cache_merge_request_closes_issues!1004 caches closed issues1005 does not cache closed issues when merge request is closed1006 does not cache closed issues when merge request is merged1007 when both internal and external issue trackers are enabled1008 does not cache issues from external trackers1009 caches an internal issue1010 when only external issue tracker enabled1011 does not cache issues from external trackers1012 does not cache an internal issue1013 caches issues from another project with issues enabled1014 #source_branch_sha1015 returns memoized value1016 with diffs1017 returns the sha of the source branch last commit1018 without diffs1019 returns the sha of the source branch last commit1020 when there is a tag name matching the branch name1021 returns the sha of the source branch last commit1022 when the merge request is being created1023 returns nil1024 #to_reference1025 returns a String reference to the object1026 supports a cross-project reference1027 returns a String reference with the full path1028 #raw_diffs1029 when there are MR diffs1030 delegates to the MR diffs1031 when there are no MR diffs1032 delegates to the compare object1033 #diffs1034 when there are MR diffs1035 delegates to the MR diffs1036 when there are no MR diffs1037 delegates to the compare object, setting expanded: true1038 #note_positions_for_paths1039 returns a Gitlab::Diff::PositionCollection1040 within all diff files1041 returns correct positions1042 within specific diff file1043 returns correct positions1044 within no diff files1045 returns no positions1046 when user is given1047 returns notes and draft notes positions1048 when user is not given1049 returns notes positions1050 #discussions_diffs1051 with commit diff note1052 behaves like discussions diffs collection1053 initializes Gitlab::DiscussionsDiff::FileCollection with correct data1054 eager loads relations1055 with merge request diff note1056 behaves like discussions diffs collection1057 initializes Gitlab::DiscussionsDiff::FileCollection with correct data1058 eager loads relations1059 #diff_size1060 when there are MR diffs1061 returns the correct count1062 returns the correct overflow count1063 does not perform highlighting1064 when there are no MR diffs1065 returns the correct count1066 returns the correct overflow count1067 does not perform highlighting1068 #modified_paths1069 when past_merge_request_diff is specified1070 returns affected file paths from specified past_merge_request_diff1071 when compare is present1072 and diff_stats are not present1073 returns affected file paths from compare1074 and diff_stats are present1075 returns affected file paths from compare1076 when no arguments provided1077 returns affected file paths for merge_request_diff1078 #new_paths1079 returns new path of changed files1080 #related_notes1081 includes notes for commits1082 includes notes for commits from target project as well1083 excludes system notes for commits1084 #for_fork?1085 returns true if the merge request is for a fork1086 returns false if is not for a fork1087 #closes_issues1088 accesses the set of issues that will be closed on acceptance1089 only lists issues as to be closed if it targets the default branch1090 ignores referenced issues when auto-close is disabled1091 #issues_mentioned_but_not_closing1092 detects issues mentioned in description but not closed1093 when the project has an external issue tracker1094 detects issues mentioned in description but not closed1095 #draft?1096 detects the 'draft:' prefix1097 detects the 'Draft: ' prefix1098 detects the '[Draft]' prefix1099 detects the '[DRAFT] ' prefix1100 returns false1101 when 'WIP:' prefixes the title1102 when 'WIP: ' prefixes the title1103 when '[WIP]' prefixes the title1104 when '[WIP] ' prefixes the title1105 when ' [WIP] WIP: [WIP] WIP:' prefixes the title1106 when 'WIP ' prefixes the title1107 when '(WIP)' prefixes the title1108 when 'draft' prefixes the title1109 when 'Draft' prefixes the title1110 when 'Draft -' prefixes the title1111 when 'draft - ' prefixes the title1112 when 'Draft ' prefixes the title1113 when 'draft ' prefixes the title1114 when merge request title is simply 'WIP'1115 when WIP is in the middle of the title1116 when WIP is at the end of the title1117 when title contains words starting with WIP1118 when title contains words containing with WIP1119 when merge request title is simply 'Draft'1120 when Draft is in the middle of the title1121 when Draft is at the end of the title1122 when title contains words starting with Draft1123 when title contains words containing with Draft1124 when Draft: in the middle of the title1125 when the title does not contain draft1126 is aliased to #draft?1127 #draftless_title1128 removes a 'draft:' prefix1129 is satisfies the #work_in_progress? method1130 removes a 'Draft: ' prefix1131 is satisfies the #work_in_progress? method1132 removes a '[Draft]' prefix1133 is satisfies the #work_in_progress? method1134 removes a '[DRAFT] ' prefix1135 is satisfies the #work_in_progress? method1136 doesn't remove a 'WIP:' prefix1137 doesn't remove a 'WIP: ' prefix1138 doesn't remove a '[WIP]' prefix1139 doesn't remove a '[WIP] ' prefix1140 doesn't remove a '[WIP] WIP: [WIP] WIP:' prefix1141 removes only draft prefix from the MR title1142 does not remove WIP in the middle of the title1143 does not remove Draft in the middle of the title1144 does not remove WIP at the end of the title1145 does not remove Draft at the end of the title1146 #draft_title1147 adds the Draft: prefix to the title1148 does not add the Draft: prefix multiple times1149 is satisfies the #work_in_progress? method1150 #permits_force_push?1151 when source branch is not protected1152 is expected to be truthy1153 when source branch is protected1154 when force push is not allowed1155 is expected to be falsey1156 when force push is allowed1157 is expected to be truthy1158 #can_remove_source_branch?1159 can't be removed when its a protected branch1160 can't be removed because source project has been deleted1161 can't remove a root ref1162 is unable to remove the source branch for a project the user cannot push to1163 can be removed if the last commit is the head of the source branch1164 cannot be removed if the last commit is not also the head of the source branch1165 #source_branch_exists?1166 when the source project is set1167 returns true when the branch exists1168 when the source project is not set1169 returns false1170 #default_merge_commit_message1171 includes merge information as the title1172 includes its title in the body1173 includes its closed issues in the body1174 includes its reference in the body1175 excludes multiple linebreak runs when description is blank1176 includes its description in the body1177 does not includes its description in the body1178 uses template from target project1179 ignores template when include_description is true1180 #auto_merge_strategy1181 is expected to eq "merge_when_pipeline_succeeds"1182 when auto merge is disabled1183 is expected to be nil1184 #committers1185 returns all the committers of every commit in the merge request1186 returns an empty array if no committer is associated with a user1187 #diverged_commits_count1188 when the target branch does not exist anymore1189 does not crash1190 returns 01191 diverged on same repository1192 counts commits that are on target branch but not on source branch1193 diverged on fork1194 counts commits that are on target branch but not on source branch1195 rebased on fork1196 counts commits that are on target branch but not on source branch1197 caching1198 caches the output1199 invalidates the cache when the source sha changes1200 invalidates the cache when the target sha changes1201 behaves like an editable mentionable1202 creates new cross-reference notes when the mentionable text is edited1203 behaves like a mentionable1204 generates a descriptive back-reference1205 extracts references from its reference property1206 creates cross-reference notes1207 when there are cached markdown fields1208 sends in cached markdown fields when appropriate1209 when there are cached markdown fields1210 refreshes markdown cache if necessary1211 when the markdown cache is stale1212 persists the refreshed cache so that it does not have to be refreshed every time1213 behaves like a Taskable1214 with multiple tasks1215 returns the correct task status1216 #tasks?1217 returns true when object has tasks1218 returns false when object has no tasks1219 with nested tasks1220 returns the correct task status1221 with an incomplete task1222 returns the correct task status1223 with tasks that are not formatted correctly1224 returns the correct task status1225 with a complete task1226 returns the correct task status1227 with tasks in blockquotes1228 returns the correct task status1229 #commit_shas1230 persisted merge request1231 with a limit1232 returns a limited number of commit shas1233 without a limit1234 returns all commit shas of the merge request diff1235 new merge request1236 returns diff_head_sha as an array1237 compare commits1238 without a limit1239 returns all shas of compare commits1240 with a limit1241 returns a limited number of shas1242 head pipeline1243 #head_pipeline1244 returns nil for MR without head_pipeline_id1245 when the source project does not exist1246 returns nil1247 #actual_head_pipeline1248 returns nil for MR with old pipeline1249 returns the pipeline for MR with recent pipeline1250 returns the pipeline for MR with recent merge request pipeline1251 returns nil when source project does not exist1252 #merge_pipeline1253 returns nil when not merged1254 when the MR is merged1255 and there is a merge commit1256 returns the pipeline associated with that merge request1257 and there is no merge commit, but there is a diff head1258 returns the pipeline associated with that merge request1259 and there is no merge commit, but there is a squash commit1260 returns the pipeline associated with that merge request1261 #has_ci?1262 has ci1263 returns true if MR has head_pipeline_id and commits1264 returns true if MR has any pipeline and commits1265 returns true if MR has CI integration and commits1266 has no ci1267 returns false if MR has no CI integration nor pipeline, and no commits1268 #update_head_pipeline1269 when there is a pipeline with the diff head sha1270 updates the head pipeline1271 when merge request has already had head pipeline1272 when failed to find an actual head pipeline1273 does not update the current head pipeline1274 when detached merge request pipeline is run on head ref of the merge request1275 sets the head ref of the merge request to the pipeline ref1276 updates correctly even though the target branch name of the merge request is different from the pipeline ref1277 when sha is not HEAD of the source branch1278 does not update head pipeline1279 when there are no pipelines with the diff head sha1280 does not update the head pipeline1281 #has_test_reports?1282 when head pipeline has test reports1283 is expected to be truthy1284 when head pipeline does not have test reports1285 is expected to be falsey1286 #has_accessibility_reports?1287 when head pipeline has an accessibility reports1288 is expected to be truthy1289 when head pipeline does not have accessibility reports1290 is expected to be falsey1291 #has_coverage_reports?1292 when head pipeline has coverage reports1293 is expected to be truthy1294 when head pipeline does not have coverage reports1295 is expected to be falsey1296 #has_codequality_mr_diff_report?1297 when head pipeline has codequality mr diff report1298 is expected to be truthy1299 when head pipeline does not have codeqquality mr diff report1300 is expected to be falsey1301 #has_codequality_reports?1302 when head pipeline has a codequality report1303 is expected to be truthy1304 when head pipeline does not have a codequality report1305 is expected to be falsey1306 #has_terraform_reports?1307 when head pipeline has terraform reports1308 returns true1309 when head pipeline does not have terraform reports1310 returns false1311 #has_sast_reports?1312 when head pipeline has sast reports1313 is expected to be truthy1314 when head pipeline does not have sast reports1315 is expected to be falsey1316 #has_secret_detection_reports?1317 when head pipeline has secret detection reports1318 is expected to be truthy1319 when head pipeline does not have secrets detection reports1320 is expected to be falsey1321 #calculate_reactive_cache1322 when given an unknown service class name1323 raises a NameError exception1324 when given a known service class name1325 does not raises a NameError exception1326 #find_exposed_artifacts1327 when head pipeline has exposed artifacts1328 when reactive cache worker is parsing results asynchronously1329 returns status1330 when reactive cache worker is inline1331 returns status and data1332 when an error occurrs1333 returns an error message1334 when cached results is not latest1335 raises and InvalidateReactiveCache error1336 #find_coverage_reports1337 when head pipeline has coverage reports1338 when reactive cache worker is parsing results asynchronously1339 returns status1340 when reactive cache worker is inline1341 returns status and data1342 when an error occurrs1343 returns an error message1344 when cached results is not latest1345 raises and InvalidateReactiveCache error1346 #find_codequality_mr_diff_reports1347 when head pipeline has coverage reports1348 when reactive cache worker is parsing results asynchronously1349 returns status1350 when reactive cache worker is inline1351 returns status and data1352 when an error occurrs1353 returns an error message1354 when cached results is not latest1355 raises and InvalidateReactiveCache error1356 #compare_test_reports1357 when head pipeline has test reports1358 when reactive cache worker is parsing asynchronously1359 returns status1360 when reactive cache worker is inline1361 returns status and data1362 when cached results is not latest1363 raises and InvalidateReactiveCache error1364 when head pipeline does not have test reports1365 returns status and error message1366 #compare_accessibility_reports1367 when head pipeline has accessibility reports1368 when reactive cache worker is parsing results asynchronously1369 returns parsing status1370 when reactive cache worker is inline1371 returns parsed status1372 when an error occurrs1373 returns an error status1374 when cached result is not latest1375 raises an InvalidateReactiveCache error1376 #compare_codequality_reports1377 when head pipeline has codequality report1378 when reactive cache worker is parsing results asynchronously1379 returns parsing status1380 when reactive cache worker is inline1381 returns parsed status1382 when an error occurrs1383 returns an error status1384 when cached result is not latest1385 raises an InvalidateReactiveCache error1386 #all_commit_shas1387 when merge request is persisted1388 with a completely different branch1389 behaves like returning all SHA1390 returns all SHAs from all merge_request_diffs1391 with a branch having no difference1392 behaves like returning all SHA1393 returns all SHAs from all merge_request_diffs1394 when merge request is not persisted1395 when compare commits are set in the service1396 returns commits from compare commits temporary data1397 when compare commits are not set in the service1398 returns array with diff head sha element only1399 #short_merge_commit_sha1400 returns short id when there is a merge_commit_sha1401 returns nil when there is no merge_commit_sha1402 #merged_commit_sha1403 returns nil when not merged1404 when the MR is merged1405 returns merge_commit_sha when there is a merge_commit_sha1406 returns squash_commit_sha when there is a squash_commit_sha1407 returns diff_head_sha when there are no merge_commit_sha and squash_commit_sha1408 #short_merged_commit_sha1409 when merged_commit_sha is nil1410 returns nil1411 when merged_commit_sha is present1412 returns shortened merged_commit_sha1413 #can_be_reverted?1414 when there is no merge_commit for the MR1415 returns false1416 when the MR has been merged1417 when there is no revert commit1418 returns true1419 when there is no merged_at for the MR1420 returns true1421 when there is a revert commit1422 but merged at timestamp cannot be found1423 returns false1424 when the revert commit is mentioned in a note after the MR was merged1425 returns false1426 when there is no merged_at for the MR1427 returns false1428 when the revert commit is mentioned in a note just before the MR was merged1429 returns false1430 when the revert commit is mentioned in a note long before the MR was merged1431 returns true1432 #merged_at1433 when MR is not merged1434 returns nil1435 when metrics has merged_at data1436 returns metrics merged_at1437 when merged event is persisted, but no metrics merged_at is persisted1438 returns merged event creation date1439 when no metrics or merge event exists1440 when resource event for the merge exists1441 returns the resource event creation date1442 when system note for the merge exists1443 returns the merging note creation date1444 #participants1445 includes the merge request author1446 includes the authors of the notes1447 cached counts1448 updates when assignees change1449 #merge_async1450 enqueues MergeWorker job and updates merge_jid1451 #rebase_async1452 atomically enqueues a RebaseWorker job and updates rebase_jid1453 refuses to enqueue a job if a rebase is in progress1454 refuses to enqueue a job if the MR is not open1455 raises ActiveRecord::LockWaitTimeout after 6 tries1456 #mergeable?1457 returns false if #mergeable_state? is false1458 return true if #mergeable_state? is true and the MR #can_be_merged? is true1459 return true if #mergeable_state? is true and the MR #can_be_merged? is false1460 with skip_ci_check option1461 mergeable_ci_state: false, skip_ci_check: false, expected_mergeable: false1462 overrides mergeable_ci_state?1463 mergeable_ci_state: false, skip_ci_check: true, expected_mergeable: true1464 overrides mergeable_ci_state?1465 mergeable_ci_state: true, skip_ci_check: false, expected_mergeable: true1466 overrides mergeable_ci_state?1467 mergeable_ci_state: true, skip_ci_check: true, expected_mergeable: true1468 overrides mergeable_ci_state?1469 with skip_discussions_check option1470 mergeable_discussions_state: false, skip_discussions_check: false, expected_mergeable: false1471 overrides mergeable_discussions_state?1472 mergeable_discussions_state: false, skip_discussions_check: true, expected_mergeable: true1473 overrides mergeable_discussions_state?1474 mergeable_discussions_state: true, skip_discussions_check: false, expected_mergeable: true1475 overrides mergeable_discussions_state?1476 mergeable_discussions_state: true, skip_discussions_check: true, expected_mergeable: true1477 overrides mergeable_discussions_state?1478 #check_mergeability1479 if the merge status is unchecked1480 behaves like method that executes MergeabilityCheckService1481 executes MergeabilityCheckService1482 when async is true1483 executes MergeabilityCheckService asynchronously1484 if the merge status is checking1485 behaves like method that executes MergeabilityCheckService1486 executes MergeabilityCheckService1487 when async is true1488 executes MergeabilityCheckService asynchronously1489 if the merge status is checked1490 does not call MergeabilityCheckService1491 #mergeable_state?1492 behaves like for mergeable_state1493 checks if merge request can be merged1494 when not open1495 returns false1496 when working in progress1497 returns false1498 when broken1499 returns false1500 when failed1501 when #mergeable_ci_state? is false1502 returns false1503 returns true when skipping ci check1504 when #mergeable_discussions_state? is false1505 returns false1506 returns true when skipping discussions check1507 #public_merge_status1508 status: "cannot_be_merged_rechecking", public_status: "checking"1509 is expected to eq "checking"1510 status: "preparing", public_status: "checking"1511 is expected to eq "checking"1512 status: "checking", public_status: "checking"1513 is expected to eq "checking"1514 status: "cannot_be_merged", public_status: "cannot_be_merged"1515 is expected to eq "cannot_be_merged"1516 #head_pipeline_active?1517 when project lacks a head_pipeline relation1518 returns false1519 when project has a head_pipeline relation1520 accesses the value from the head_pipeline1521 #actual_head_pipeline_success?1522 when project lacks an actual_head_pipeline relation1523 returns false1524 when project has a actual_head_pipeline relation1525 accesses the value from the actual_head_pipeline1526 #actual_head_pipeline_active?1527 when project lacks an actual_head_pipeline relation1528 returns false1529 when project has a actual_head_pipeline relation1530 accesses the value from the actual_head_pipeline1531 #mergeable_ci_state?1532 when it is only allowed to merge when build is green1533 and a failed pipeline is associated1534 is expected to be falsey1535 and a successful pipeline is associated1536 is expected to be truthy1537 and a skipped pipeline is associated1538 is expected to be falsey1539 when no pipeline is associated1540 is expected to be falsey1541 when it is only allowed to merge when build is green or skipped1542 and a failed pipeline is associated1543 is expected to be falsey1544 and a successful pipeline is associated1545 is expected to be truthy1546 and a skipped pipeline is associated1547 is expected to be truthy1548 when no pipeline is associated1549 is expected to be falsey1550 when merges are not restricted to green builds1551 and a failed pipeline is associated1552 is expected to be truthy1553 when no pipeline is associated1554 is expected to be truthy1555 and a skipped pipeline is associated1556 is expected to be truthy1557 when no pipeline is associated1558 is expected to be truthy1559 #mergeable_discussions_state?1560 when project.only_allow_merge_if_all_discussions_are_resolved == true1561 with all discussions resolved1562 returns true1563 with unresolved discussions1564 returns false1565 with no discussions1566 returns true1567 when project.only_allow_merge_if_all_discussions_are_resolved == false1568 with unresolved discussions1569 returns true1570 #reload_diff1571 calls MergeRequests::ReloadDiffsService#execute with correct params1572 when using the after_update hook to update1573 when the branches are updated1574 uses the new heads to generate the diff1575 #update_diff_discussion_positions1576 updates diff discussion positions1577 does not call the resolve method1578 when resolve_outdated_diff_discussions is set1579 when the active discussion is resolved in the update1580 calls MergeRequests::ResolvedDiscussionNotificationService1581 when the active discussion does not have resolved in the update1582 does not call the resolve method1583 when the active discussion was already resolved1584 does not call the resolve method1585 #branch_merge_base_commit1586 source and target branch exist1587 is expected to eq "ae73cb07c9eeaf35924a10f713b364d32b2dd34f"1588 is expected to be a kind of Commit1589 when the target branch does not exist1590 returns nil1591 #diff_refs1592 with diffs1593 does not touch the repository1594 returns expected diff_refs1595 when importing1596 returns MR diff_refs1597 #source_project_missing?1598 when the fork exists1599 is expected to be falsey1600 when the source project is the same as the target project1601 is expected to be falsey1602 when the fork does not exist1603 returns true1604 #merge_ongoing?1605 returns true when the merge request is locked1606 returns true when merge_id, MR is not merged and it has no running job1607 returns false when merge_jid is nil1608 returns false if MR is merged1609 returns false if there is no merge job running1610 #closed_or_merged_without_fork?1611 when the merge request is closed1612 returns false if the fork exist1613 returns true if the fork does not exist1614 when the merge request was merged1615 returns false if the fork exist1616 returns true if the fork does not exist1617 when the merge request is open1618 returns false1619 #reopenable?1620 when the merge request is closed1621 returns true1622 forked project1623 returns false if unforked1624 returns false if the source project is deleted1625 returns false if the merge request is merged1626 when the merge request is opened1627 returns false1628 #pipeline_coverage_delta1629 when both source and target branches have coverage information1630 returns the appropriate coverage delta1631 when target branch does not have coverage information1632 returns nil1633 when source branch does not have coverage information1634 returns nil for coverage_delta1635 neither source nor target branch has coverage information1636 returns nil for coverage_delta1637 #use_merge_base_pipeline_for_comparison?1638 is expected to eq false1639 #comparison_base_pipeline1640 when service class uses merge base pipeline1641 returns the base_pipeline when merge does not have a merge request pipeline1642 when merge request has a merge request pipeline1643 returns the merge_base_pipeline1644 when service_class does not use merge base pipeline1645 returns the base_pipeline1646 when merge request has a merge request pipeline1647 returns the base pipeline1648 #base_pipeline1649 returns latest pipeline for the target branch1650 #merge_base_pipeline1651 returns a pipeline pointing to a commit on the target ref1652 #has_commits?1653 returns true when merge request diff has commits1654 when commits_count is nil1655 returns false1656 #has_no_commits?1657 returns true when merge request diff has 0 commits1658 #merge_request_diff_for1659 runs a single query on the initial call, and none afterwards1660 with diff refs1661 returns the diffs1662 with a commit SHA1663 returns the diffs1664 #version_params_for1665 when the diff refs are for an older merge request version1666 returns the diff ID for the version to show1667 when the diff refs are for a comparison between merge request versions1668 returns the diff ID and start sha of the versions to compare1669 when the diff refs are not for a merge request version1670 returns nil1671 #fetch_ref!1672 fetches the ref and expires the ancestor cache1673 #eager_fetch_ref!1674 fetches the ref and expires the ancestor cache1675 only fetches the ref once after saved1676 removing a merge request1677 refreshes the number of open merge requests of the target project1678 behaves like throttled touch1679 #touch1680 updates the updated_at timestamp1681 updates the object at most once per minute1682 state machine transitions1683 #unlock_mr1684 updates merge request head pipeline and sets merge_jid to nil1685 #mark_as_preparing1686 when the status is unchecked1687 is a valid state transition1688 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1689 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1690 when the status is checking1691 is not a valid state transition1692 when the status is can_be_merged1693 is not a valid state transition1694 when the status is cannot_be_merged_recheck1695 is not a valid state transition1696 when the status is cannot_be_merged1697 is not a valid state transition1698 when the status is cannot_be_merged_rechecking1699 is not a valid state transition1700 #mark_as_unchecked1701 when the status is unchecked1702 is not a valid state transition1703 when the status is checking1704 is a valid state transition1705 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1706 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:344 namespace3/project-159!1>) 1 time1707 when skip_merge_status_trigger is set to true1708 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1709 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1710 when transaction is not committed1711 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1712 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1713 when the status is can_be_merged1714 is a valid state transition1715 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1716 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:348 namespace3/project-163!1>) 1 time1717 when skip_merge_status_trigger is set to true1718 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1719 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1720 when transaction is not committed1721 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1722 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1723 when the status is cannot_be_merged_recheck1724 is not a valid state transition1725 when the status is cannot_be_merged1726 is a valid state transition1727 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1728 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:353 namespace3/project-168!1>) 1 time1729 when skip_merge_status_trigger is set to true1730 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1731 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1732 when transaction is not committed1733 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1734 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1735 when the status is cannot_be_merged_rechecking1736 is a valid state transition1737 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1738 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:357 namespace3/project-172!1>) 1 time1739 when skip_merge_status_trigger is set to true1740 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1741 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1742 when transaction is not committed1743 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1744 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1745 #mark_as_checking1746 when the status is unchecked1747 is a valid state transition1748 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1749 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1750 when the status is checking1751 is not a valid state transition1752 when the status is can_be_merged1753 is not a valid state transition1754 when the status is cannot_be_merged_recheck1755 is a valid state transition1756 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1757 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1758 when the status is cannot_be_merged1759 is not a valid state transition1760 when the status is cannot_be_merged_rechecking1761 is not a valid state transition1762 #mark_as_mergeable1763 when the status is unchecked1764 is a valid state transition1765 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1766 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:369 namespace3/project-184!1>) 1 time1767 when skip_merge_status_trigger is set to true1768 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1769 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1770 when transaction is not committed1771 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1772 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1773 when the status is checking1774 is a valid state transition1775 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1776 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:373 namespace3/project-188!1>) 1 time1777 when skip_merge_status_trigger is set to true1778 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1779 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1780 when transaction is not committed1781 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1782 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1783 when the status is can_be_merged1784 is not a valid state transition1785 when the status is cannot_be_merged_recheck1786 is a valid state transition1787 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1788 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:378 namespace3/project-193!1>) 1 time1789 when skip_merge_status_trigger is set to true1790 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1791 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1792 when transaction is not committed1793 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1794 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1795 when the status is cannot_be_merged1796 is not a valid state transition1797 when the status is cannot_be_merged_rechecking1798 is a valid state transition1799 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1800 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:383 namespace3/project-198!1>) 1 time1801 when skip_merge_status_trigger is set to true1802 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1803 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1804 when transaction is not committed1805 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1806 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1807 #mark_as_unmergeable1808 when the status is unchecked1809 is a valid state transition1810 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1811 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:387 namespace3/project-202!1>) 1 time1812 when skip_merge_status_trigger is set to true1813 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1814 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1815 when transaction is not committed1816 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1817 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1818 when the status is checking1819 is a valid state transition1820 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1821 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:391 namespace3/project-206!1>) 1 time1822 when skip_merge_status_trigger is set to true1823 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1824 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1825 when transaction is not committed1826 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1827 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1828 when the status is can_be_merged1829 is not a valid state transition1830 when the status is cannot_be_merged_recheck1831 is a valid state transition1832 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1833 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:396 namespace3/project-211!1>) 1 time1834 when skip_merge_status_trigger is set to true1835 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1836 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1837 when transaction is not committed1838 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1839 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1840 when the status is cannot_be_merged1841 is not a valid state transition1842 when the status is cannot_be_merged_rechecking1843 is a valid state transition1844 behaves like transition triggering mergeRequestMergeStatusUpdated GraphQL subscription1845 is expected to receive merge_request_merge_status_updated(#<MergeRequest id:401 namespace3/project-216!1>) 1 time1846 when skip_merge_status_trigger is set to true1847 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1848 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1849 when transaction is not committed1850 behaves like transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription1851 is expected not to receive merge_request_merge_status_updated(*(any args)) 0 times1852 transition to closed1853 with merge error1854 clears merge error1855 transition to merged1856 resets the merge error1857 when it is a first contribution1858 sets first_contribution1859 doesn't set first_contribution not first contribution1860 transition to cannot_be_merged1861 opened1862 notifies conflict, but does not notify again if rechecking still results in cannot_be_merged1863 notifies conflict, but does not notify again if rechecking still results in cannot_be_merged with async mergeability check1864 notifies conflict, whenever newly unmergeable1865 notifies conflict, whenever newly unmergeable with async mergeability check1866 does not notify whenever merge request is newly unmergeable due to other reasons1867 locked1868 notifies conflict, but does not notify again if rechecking still results in cannot_be_merged1869 notifies conflict, but does not notify again if rechecking still results in cannot_be_merged with async mergeability check1870 notifies conflict, whenever newly unmergeable1871 notifies conflict, whenever newly unmergeable with async mergeability check1872 does not notify whenever merge request is newly unmergeable due to other reasons1873 closed1874 does not notify1875 merged1876 does not notify1877 source branch is missing1878 does not raise error1879 check_state?1880 indicates whether MR is still checking for mergeability1881 #should_be_rebased?1882 returns false for the same source and target branches1883 #rebase_in_progress?1884 rebase_jid: "foo", jid_valid: true, result: true1885 is expected to eq true1886 rebase_jid: "foo", jid_valid: false, result: false1887 is expected to eq false1888 rebase_jid: "", jid_valid: true, result: false1889 is expected to eq false1890 rebase_jid: nil, jid_valid: true, result: false1891 is expected to eq false1892 #allow_collaboration1893 is false when pushing by a maintainer is not possible1894 is true when pushing by a maintainer is possible1895 #collaborative_push_possible?1896 does not allow maintainer to push if the source project is the same as the target1897 allows maintainer to push when both source and target are public1898 is not available for protected branches1899 #can_allow_collaboration?1900 is false if the user does not have push access to the source project1901 is true when the user has push access to the source project1902 #merge_participants1903 contains author1904 when merge_when_pipeline_succeeds? is true1905 when merge user is author1906 author is not a project member1907 is empty1908 author is a project member1909 contains author only1910 when merge user and author are different users1911 merge user is not a member1912 contains author only1913 both author and merge users are project members1914 contains author and merge user1915 .merge_request_ref?1916 when ref is ref name of a branch1917 is expected to be falsey1918 when ref is HEAD ref path of a branch1919 is expected to be falsey1920 when ref is HEAD ref path of a merge request1921 is expected to be truthy1922 when ref is merge ref path of a merge request1923 is expected to be truthy1924 .merge_train_ref?1925 when ref is ref name of a branch1926 is expected to be falsey1927 when ref is HEAD ref path of a branch1928 is expected to be falsey1929 when ref is HEAD ref path of a merge request1930 is expected to be falsey1931 when ref is merge ref path of a merge request1932 is expected to be falsey1933 when ref is train ref path of a merge request1934 is expected to be truthy1935 #in_locked_state1936 when the merge request does not change state1937 returns to previous state and has no errors on the object1938 when the merge request is merged while locked1939 becomes merged and has no errors on the object1940 #cleanup_refs1941 when removing all refs1942 deletes all refs from the target project1943 when removing only train ref1944 deletes train ref from the target project1945 .with_auto_merge_enabled1946 is expected to contain exactly #<MergeRequest id:431 namespace3/project-243!1>1947 behaves like versioned description1948 associations1949 is expected to have many description_versions1950 save_description_version1951 when description was changed1952 saves the old and new description for the first update1953 only saves the new description for subsequent updates1954 sets the new description version to `saved_description_version`1955 clears `saved_description_version` after another save that does not change description1956 when description was not changed1957 does not save any description version1958 #commits1959 persisted merge request1960 with a limit1961 returns a limited number of commits1962 without a limit1963 returns all commits of the merge request diff1964 with a page1965 returns a limited number of commits for page1966 new merge request1967 compare commits1968 without a limit1969 returns all the compare commits1970 with a limit1971 returns a limited number of commits1972 #recent_commits1973 returns the safe number of commits1974 #recent_visible_deployments1975 returns visible deployments1976 only returns a limited number of deployments1977 #diffable_merge_ref?1978 merge request can be merged1979 merge_head diff is not created1980 returns true1981 merge_head diff is created1982 returns true1983 merge request is merged1984 returns false1985 merge request cannot be merged1986 returns false1987 #predefined_variables1988 caches all SQL-sourced data on the first call1989 banzai_render_context1990 sets the label_url_method in the context1991 #head_pipeline_builds_with_coverage1992 delegates to head_pipeline1993 #merge_ref_head1994 when merge_ref_sha is not present1995 returns the commit based on merge ref path1996 when merge_ref_sha is present1997 returns the commit based on cached merge_ref_sha1998 #allows_reviewers?1999 returns true2000 #update_and_mark_in_progress_merge_commit_sha2001 updates commit ID2002 #enabled_reports2003 report_type: :sast, with_reports: :with_sast_reports, feature: :sast2004 when head pipeline has reports2005 is expected to be truthy2006 when head pipeline does not have reports2007 is expected to be falsy2008 report_type: :secret_detection, with_reports: :with_secret_detection_reports, feature: :secret_detection2009 when head pipeline has reports2010 is expected to be truthy2011 when head pipeline does not have reports2012 is expected to be falsy2013 #includes_ci_config?2014 when diff_stats is nil2015 is expected to eq false2016 when diff_stats does not include the ci config path of the project2017 is expected to eq false2018 when diff_stats includes the ci config path of the project2019 is expected to eq true2020 .from_fork2021 returns merge requests from forks only2022 behaves like it has loose foreign keys2023 has at least one loose foreign key definition2024 has the deletion trigger present2025 records record deletions2026 cleans up record deletions2027 loose foreign key on merge_requests.head_pipeline_id2028 behaves like cleanup by a loose foreign key2029 cleans up (delete or nullify) the model2030 #merge_blocked_by_other_mrs?2031 returns false when there is no blocking merge requests2032 #merge_request_reviewers_with2033 returns reviewers2034 #merge_request_assignees_with2035 returns assignees2036 #recent_diff_head_shas2037 when the association is not loaded2038 has up to MAX_RECENT_DIFF_HEAD_SHAS, ordered most recent first2039 supports limits2040 when the association is loaded2041 has up to MAX_RECENT_DIFF_HEAD_SHAS, ordered most recent first2042 supports limits2043 does not issue any queries2044 #target_default_branch?2045 returns false2046 with target_branch equal project default branch2047 returns false2048 #can_suggest_reviewers?2049 returns false2050 #suggested_reviewer_users2051 is expected to be empty2052 #hidden?2053 is expected to eq false2054 when the author is banned2055 is expected to eq true2056 when the feature flag is disabled2057 is expected to eq false2058 #diffs_batch_cache_with_max_age?2059 returns true2060 when diffs_batch_cache_with_max_age is disabled2061 returns false2062 #prepared?2063 when prepared_at is nil2064 returns false2065 when prepared_at is not nil2066 returns true2067 prepare2068 calls NewMergeRequestWorker2069Gitlab::UsageDataMetrics2070 .uncached_data2071 with instrumentation_class2072 includes top level keys2073 includes counts keys2074 includes usage_activity_by_stage keys2075 includes usage_activity_by_stage metrics2076 includes usage_activity_by_stage_monthly keys2077 includes settings keys2078 Redis_HLL_counters2079 is included in the Service Ping hash structure2080WikiPage2081 #front_matter2082 the wiki page has front matter2083 strips the front matter from the content2084 behaves like a page with front-matter2085 is expected to eq {:slugs=>["slug_a", "slug_b"], :title=>"Foo"}2086 the feature flag is off2087 behaves like a page without front-matter2088 is expected to have attributes {:content => "---\ntitle: Foo\nslugs:\n - slug_a\n - slug_b\n---\n\nMy actual content\n", :front_matter => {}}2089 but enabled for the container2090 behaves like a page with front-matter2091 is expected to eq {:slugs=>["slug_a", "slug_b"], :title=>"Foo"}2092 the wiki page does not have front matter2093 behaves like a page without front-matter2094 is expected to have attributes {:content => "My actual content", :front_matter => {}}2095 the wiki page has fenced blocks, but nothing in them2096 behaves like a page without front-matter2097 is expected to have attributes {:content => "---\n---\n\nMy actual content\n", :front_matter => {}}2098 the wiki page has invalid YAML type in fenced blocks2099 behaves like a page without front-matter2100 is expected to have attributes {:content => "---\nthis isn't YAML\n---\n\nMy actual content\n", :front_matter => {}}2101 the wiki page has a disallowed class in fenced block2102 behaves like a page without front-matter2103 is expected to have attributes {:content => "---\ndate: 2010-02-11 11:02:57\n---\n\nMy actual content\n", :front_matter => {}}2104 the wiki page has invalid YAML in fenced block2105 behaves like a page without front-matter2106 is expected to have attributes {:content => "---\ninvalid-use-of-reserved-indicator: @text\n---\n\nMy actual content\n", :front_matter => {}}2107 .unhyphenize2108 removes hyphens from a name2109 #initialize2110 when initialized with an existing page2111 sets the slug attribute2112 sets the title attribute2113 sets the formatted content attribute2114 sets the format attribute2115 sets the message attribute2116 sets the version attribute2117 validations2118 validates presence of title2119 does not validate presence of content2120 #validate_content_size_limit2121 with a new page2122 accepts content below the limit2123 rejects content exceeding the limit2124 counts content size in bytes rather than characters2125 with an existing page exceeding the limit2126 accepts content when it has not changed2127 rejects content when it has changed2128 #validate_path_limits2129 character: "a"2130 accepts page titles below the limit2131 accepts directories below the limit2132 accepts a path with page title and directory below the limit2133 rejects page titles exceeding the limit2134 rejects directories exceeding the limit2135 rejects a page with both title and directory exceeding the limit2136 character: "ä"2137 accepts page titles below the limit2138 accepts directories below the limit2139 accepts a path with page title and directory below the limit2140 rejects page titles exceeding the limit2141 rejects directories exceeding the limit2142 rejects a page with both title and directory exceeding the limit2143 character: "🙈"2144 accepts page titles below the limit2145 accepts directories below the limit2146 accepts a path with page title and directory below the limit2147 rejects page titles exceeding the limit2148 rejects directories exceeding the limit2149 rejects a page with both title and directory exceeding the limit2150 with an existing page title exceeding the limit2151 accepts the exceeding title length when unchanged2152 rejects the exceeding title length when changed2153 #create2154 with valid attributes2155 saves the wiki page2156 returns true2157 saves the wiki page with message2158 if the title is preceded by a / it is removed2159 with invalid attributes2160 does not create the page2161 dot in the title2162 #create2163 saves the wiki page and returns true2164 #update2165 updates the content of the page and returns true2166 #update2167 with valid attributes2168 updates the content of the page2169 updates the title of the page2170 returns true2171 updating front_matter2172 updates the wiki-page front-matter and content together2173 behaves like able to update front-matter2174 updates the wiki-page front-matter2175 the front matter is too long2176 raises an error2177 the front-matter feature flag is not enabled2178 does not update the front-matter2179 but it is enabled for the container2180 behaves like able to update front-matter2181 updates the wiki-page front-matter2182 with same last commit sha2183 returns true2184 with different last commit sha2185 raises exception2186 in subdir2187 keeps the page in the same dir when the content is updated2188 when renaming a page2189 raises an error if the page already exists2190 updates the content and rename the file2191 when moving a page2192 raises an error if the page already exists2193 updates the content and moves the file2194 when page combine with directory2195 moving the file and directory2196 in subdir2197 moves the page to the root folder if the title is preceded by /2198 does nothing if it has the same title2199 in root dir2200 does nothing if the title is preceded by /2201 with invalid attributes2202 aborts update if title blank2203 #delete2204 deletes the page and returns true2205 #versions2206 number of versions is less than the default paginiated per page2207 returns an array of all commits for the page2208 number of versions is more than the default paginiated per page2209 returns an arrary containing the first page of commits for the page2210 returns an arrary containing the second page of commits for the page with options[:page] = 22211 wiki repository's default is updated2212 returns the correct versions in the default branch2213 #count_versions2214 returns the total numbers of commits2215 wiki repository's default is updated2216 returns the correct number of versions in the default branch2217 #title_changed?2218 page: :untitled_page, title: nil, changed: false2219 returns the expected value2220 page: :untitled_page, title: "new title", changed: true2221 returns the expected value2222 page: :unsaved_page, title: nil, changed: true2223 returns the expected value2224 page: :unsaved_page, title: "test page", changed: true2225 returns the expected value2226 page: :unsaved_page, title: "test-page", changed: true2227 returns the expected value2228 page: :unsaved_page, title: "test+page", changed: true2229 returns the expected value2230 page: :unsaved_page, title: "new title", changed: true2231 returns the expected value2232 page: :existing_page, title: nil, changed: false2233 returns the expected value2234 page: :existing_page, title: "test page", changed: false2235 returns the expected value2236 page: :existing_page, title: "test-page", changed: false2237 returns the expected value2238 page: :existing_page, title: "/test page", changed: false2239 returns the expected value2240 page: :existing_page, title: "/test-page", changed: false2241 returns the expected value2242 page: :existing_page, title: "test+page", changed: true2243 returns the expected value2244 page: :existing_page, title: " test page ", changed: true2245 returns the expected value2246 page: :existing_page, title: "new title", changed: true2247 returns the expected value2248 page: :existing_page, title: "new-title", changed: true2249 returns the expected value2250 page: :directory_page, title: nil, changed: false2251 returns the expected value2252 page: :directory_page, title: "parent directory/child page", changed: false2253 returns the expected value2254 page: :directory_page, title: "parent-directory/child page", changed: false2255 returns the expected value2256 page: :directory_page, title: "parent-directory/child-page", changed: false2257 returns the expected value2258 page: :directory_page, title: "child page", changed: false2259 returns the expected value2260 page: :directory_page, title: "child-page", changed: false2261 returns the expected value2262 page: :directory_page, title: "/child page", changed: true2263 returns the expected value2264 page: :directory_page, title: "parent directory/other", changed: true2265 returns the expected value2266 page: :directory_page, title: "parent-directory/other", changed: true2267 returns the expected value2268 page: :directory_page, title: "parent-directory / child-page", changed: true2269 returns the expected value2270 page: :directory_page, title: "other directory/child page", changed: true2271 returns the expected value2272 page: :directory_page, title: "other-directory/child page", changed: true2273 returns the expected value2274 page: :page_with_special_characters, title: nil, changed: false2275 returns the expected value2276 page: :page_with_special_characters, title: "test+page", changed: false2277 returns the expected value2278 page: :page_with_special_characters, title: "test-page", changed: true2279 returns the expected value2280 page: :page_with_special_characters, title: "test page", changed: true2281 returns the expected value2282 #content_changed?2283 with a new page2284 returns true if content is set2285 returns false if content is blank2286 with an existing page2287 returns false2288 returns false if content is set to the same value2289 returns true if content is changed2290 returns true if content is changed to a blank string2291 returns false if only the newline format has changed2292 #path2293 returns the path when persisted2294 returns nil when not persisted2295 #directory2296 when the page is at the root directory2297 returns an empty string2298 when the page is inside an actual directory2299 returns the full directory hierarchy2300 #historical?2301 returns true when requesting an old version2302 returns false when requesting latest version2303 returns false when version is nil2304 returns false when the last version is nil2305 returns false when the version is nil2306 #persisted?2307 returns true for a persisted page2308 returns false for an unpersisted page2309 #to_partial_path2310 returns the relative path to the partial to be used2311 #==2312 returns true for identical wiki page2313 returns true for updated wiki page2314 returns false for a completely different wiki page2315 returns false for page with different slug on same container2316 returns false for page with the same slug on a different container2317 #last_commit_sha2318 returns commit sha2319 is changed after page updated2320 #hook_attrs2321 adds absolute urls for images in the content2322 #version_commit_timestamp2323 for a new page2324 returns nil2325 for page that exists2326 returns the timestamp of the commit2327 #diffs2328 returns a diff instance2329Gitlab::Database::MigrationHelpers2330 is expected to include Gitlab::Database::MigrationHelpers::WraparoundVacuumHelpers2331 overridden dynamic model helpers2332 #define_batchable_model2333 defines a batchable model with the migration connection2334 #each_batch2335 calls each_batch with the migration connection2336 #each_batch_range2337 calls each_batch with the migration connection2338 #remove_timestamps2339 can remove the default timestamps2340 can remove custom timestamps2341 #add_timestamps_with_timezone2342 adds "created_at" and "updated_at" fields with the "datetime_with_timezone" data type2343 can disable the NOT NULL constraint2344 can add just one column2345 can add choice of acceptable columns2346 cannot add unacceptable column names2347 #add_concurrent_index2348 outside a transaction2349 creates the index concurrently2350 creates unique index concurrently2351 unprepares the async index creation2352 when the index exists and is valid2353 does leaves the existing index2354 when an invalid copy of the index exists2355 when the default name is used2356 drops and recreates the index2357 when a custom name is used2358 drops and recreates the index2359 when a qualified table name is used2360 drops and recreates the index2361 when targeting a partition table2362 when allow_partition is true2363 creates the index concurrently2364 when allow_partition is not provided2365 raises ArgumentError2366 inside a transaction2367 raises RuntimeError2368 #remove_concurrent_index2369 outside a transaction2370 by column name2371 removes the index concurrently2372 does nothing if the index does not exist2373 unprepares the async index creation2374 when targeting a partition table2375 when dropping an index on the partition table2376 raises ArgumentError2377 by index name2378 removes the index concurrently by index name2379 does nothing if the index does not exist2380 removes the index with keyword arguments2381 raises an error if the index is blank2382 unprepares the async index creation2383 when targeting a partition table2384 when dropping an index on the partition table2385 raises ArgumentError2386 inside a transaction2387 raises RuntimeError2388 #remove_foreign_key_if_exists2389 when the foreign key does not exist2390 does nothing2391 when the foreign key exists2392 removes the foreign key2393 when the target table is not given2394 passes the options as the second parameter2395 when the reverse_lock_order option is given2396 requests for lock before removing the foreign key2397 when not inside a transaction2398 does not lock2399 #add_concurrent_foreign_key2400 inside a transaction2401 raises an error2402 outside a transaction2403 target column2404 defaults to (id) when no custom target column is provided2405 references the custom taget column when provided2406 ON DELETE statements2407 on_delete: :nullify2408 appends ON DELETE SET NULL statement2409 on_delete: :cascade2410 appends ON DELETE CASCADE statement2411 on_delete: nil2412 appends no ON DELETE statement2413 ON UPDATE statements2414 on_update: :nullify2415 appends ON UPDATE SET NULL statement2416 on_update: :cascade2417 appends ON UPDATE CASCADE statement2418 on_update: nil2419 appends no ON UPDATE statement2420 when on_update is not provided2421 appends no ON UPDATE statement2422 when no custom key name is supplied2423 creates a concurrent foreign key and validates it2424 does not create a foreign key if it exists already2425 when a custom key name is supplied2426 for creating a new foreign key for a column that does not presently exist2427 creates a new foreign key2428 for creating a duplicate foreign key for a column that presently exists2429 when the supplied key name is the same as the existing foreign key name2430 does not create a new foreign key2431 when the supplied key name is different from the existing foreign key name2432 creates a new foreign key2433 validate option2434 when validate is supplied with a falsey value2435 behaves like skips validation2436 skips validation2437 behaves like skips validation2438 skips validation2439 when validate is supplied with a truthy value2440 behaves like performs validation2441 performs validation2442 behaves like performs validation2443 performs validation2444 when validate is not supplied2445 behaves like performs validation2446 performs validation2447 when the reverse_lock_order flag is set2448 explicitly locks the tables in target-source order2449 when creating foreign key for a group of columns2450 references the custom target columns when provided2451 when foreign key is already defined2452 does not create foreign key2453 when creating foreign key on a partitioned table2454 creates the FK without using NOT VALID2455 raises an error if allow_partitioned is not set2456 when the reverse_lock_order flag is set2457 explicitly locks the tables in target-source order2458 #validate_foreign_key2459 when name is provided2460 does not infer the foreign key constraint name2461 when name is not provided2462 infers the foreign key constraint name2463 when the inferred foreign key constraint does not exist2464 raises an error2465 #concurrent_foreign_key_name2466 returns the name for a foreign key2467 when using multiple columns2468 returns the name of the foreign key2469 #foreign_key_exists?2470 compares by target table if no column given2471 raises an error if an invalid on_delete is specified2472 without specifying a target table2473 behaves like foreign key checks2474 finds existing foreign keys by column2475 finds existing foreign keys by name2476 finds existing foreign_keys by name and column2477 finds existing foreign_keys by name, column and on_delete2478 finds existing foreign keys by target table only2479 finds existing foreign_keys by identifier2480 compares by column name if given2481 compares by target column name if given2482 compares by foreign key name if given2483 compares by foreign key name and column if given2484 compares by foreign key name, column and on_delete if given2485 specifying a target table2486 behaves like foreign key checks2487 finds existing foreign keys by column2488 finds existing foreign keys by name2489 finds existing foreign_keys by name and column2490 finds existing foreign_keys by name, column and on_delete2491 finds existing foreign keys by target table only2492 finds existing foreign_keys by identifier2493 compares by column name if given2494 compares by target column name if given2495 compares by foreign key name if given2496 compares by foreign key name and column if given2497 compares by foreign key name, column and on_delete if given2498 if the schema cache does not include the constrained_columns column2499-- transaction()2500main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2501main: -> 0.0768s2502main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2503main: -> 0.0469s2504 -> 0.2237s2505 correctly sets up the test without the column in the columns_hash2506 behaves like foreign key checks2507-- transaction()2508main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2509main: -> 0.0095s2510main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2511main: -> 0.0684s2512 -> 0.1718s2513 finds existing foreign keys by column2514-- transaction()2515main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2516main: -> 0.0083s2517main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2518main: -> 0.0078s2519 -> 0.1024s2520 finds existing foreign keys by name2521-- transaction()2522main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2523main: -> 0.0047s2524main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2525main: -> 0.0122s2526 -> 0.1053s2527 finds existing foreign_keys by name and column2528-- transaction()2529main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2530main: -> 0.0070s2531main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2532main: -> 0.0085s2533 -> 0.1481s2534 finds existing foreign_keys by name, column and on_delete2535-- transaction()2536main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2537main: -> 0.0054s2538main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2539main: -> 0.0107s2540 -> 0.1183s2541 finds existing foreign keys by target table only2542-- transaction()2543main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2544main: -> 0.0075s2545main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2546main: -> 0.0081s2547 -> 0.1147s2548 finds existing foreign_keys by identifier2549-- transaction()2550main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2551main: -> 0.0080s2552main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2553main: -> 0.0087s2554 -> 0.1151s2555 compares by column name if given2556-- transaction()2557main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2558main: -> 0.0072s2559main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2560main: -> 0.0083s2561 -> 0.1142s2562 compares by target column name if given2563-- transaction()2564main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2565main: -> 0.0082s2566main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2567main: -> 0.0083s2568 -> 0.1117s2569 compares by foreign key name if given2570-- transaction()2571main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2572main: -> 0.0078s2573main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2574main: -> 0.0092s2575 -> 0.1143s2576 compares by foreign key name and column if given2577-- transaction()2578main: -- execute("DROP VIEW IF EXISTS postgres_foreign_keys;\nCREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\nWHERE contype = 'f';\n")2579main: -> 0.0088s2580main: -- execute("CREATE OR REPLACE VIEW postgres_foreign_keys AS\nSELECT\n pg_constraint.oid AS oid,\n pg_constraint.conname AS name,\n constrained_namespace.nspname::text || '.'::text || constrained_table.relname::text AS constrained_table_identifier,\n referenced_namespace.nspname::text || '.'::text || referenced_table.relname::text AS referenced_table_identifier,\n constrained_table.relname::text AS constrained_table_name,\n referenced_table.relname::text AS referenced_table_name,\n constrained_cols.constrained_columns,\n referenced_cols.referenced_columns,\n pg_constraint.confdeltype AS on_delete_action,\n pg_constraint.coninhcount > 0 as is_inherited\nFROM pg_constraint\n INNER JOIN pg_class constrained_table ON constrained_table.oid = pg_constraint.conrelid\n INNER JOIN pg_class referenced_table ON referenced_table.oid = pg_constraint.confrelid\n INNER JOIN pg_namespace constrained_namespace ON constrained_table.relnamespace = constrained_namespace.oid\n INNER JOIN pg_namespace referenced_namespace ON referenced_table.relnamespace = referenced_namespace.oid\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY conkey.idx) -- must order here so that attributes are in correct order in array\n FROM unnest(pg_constraint.conkey) WITH ORDINALITY conkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = conkey.attnum AND pg_attribute.attrelid = constrained_table.oid\n ) constrained_cols(constrained_columns)\n CROSS JOIN LATERAL (\n SELECT array_agg(pg_attribute.attname ORDER BY confkey.idx)\n FROM unnest(pg_constraint.confkey) WITH ORDINALITY confkey(attnum, idx)\n INNER JOIN pg_attribute ON pg_attribute.attnum = confkey.attnum AND pg_attribute.attrelid = referenced_table.oid\n ) referenced_cols(referenced_columns)\nWHERE contype = 'f';\n")2581main: -> 0.0108s2582 -> 0.1218s2583 compares by foreign key name, column and on_delete if given2584 with foreign key using multiple columns2585 finds existing foreign keys by columns2586 finds existing foreign keys by name2587 finds existing foreign_keys by name and column2588 finds existing foreign_keys by name, column and on_delete2589 finds existing foreign keys by target table only2590 compares by column name if given2591 compares by target column name if given2592 compares by foreign key name if given2593 compares by foreign key name and column if given2594 compares by foreign key name, column and on_delete if given2595 #true_value2596 returns the appropriate value2597 #false_value2598 returns the appropriate value2599 #update_column_in_batches2600 when running outside of a transaction2601 updates all the rows in a table2602 updates boolean values correctly2603 when a block is supplied2604 yields an Arel table and query object to the supplied block2605 when the value is Arel.sql (Arel::Nodes::SqlLiteral)2606 updates the value as a SQL expression2607 when the table is write-locked2608 disables the write-lock trigger function2609 raises an error if it does not disable the trigger function2610 when running inside the transaction2611 raises RuntimeError2612 #rename_column_concurrently2613 in a transaction2614 raises RuntimeError2615 outside a transaction2616 when the column to rename exists2617 renames a column concurrently2618 passes the batch_column_name2619 passes the type_cast_function2620 raises an error with invalid batch_column_name2621 with existing records and type casting2622 copies the value to the new column using the type_cast_function2623 when default is false2624 copies the default to the new column2625 when the table in the other database is write-locked2626 does not raise an error when renaming the column2627 when the column to be renamed does not exist2628 raises an error with appropriate message2629 #undo_rename_column_concurrently2630 reverses the operations of rename_column_concurrently2631 #cleanup_concurrent_column_rename2632 cleans up the renaming procedure2633 #undo_cleanup_concurrent_column_rename2634 in a transaction2635 raises RuntimeError2636 outside a transaction2637 reverses the operations of cleanup_concurrent_column_rename2638 passes the batch_column_name2639 raises an error with invalid batch_column_name2640 when default is false2641 copies the default to the old column2642 #change_column_type_concurrently2643 changes the column type2644 passed the batch column name2645 with type cast2646 changes the column type with casting the value to the new type2647 #undo_change_column_type_concurrently2648 reverses the operations of change_column_type_concurrently2649 #cleanup_concurrent_column_type_change2650 cleans up the type changing procedure2651 #undo_cleanup_concurrent_column_type_change2652 in a transaction2653 raises RuntimeError2654 outside a transaction2655 reverses the operations of cleanup_concurrent_column_type_change2656 passes the type_cast_function, batch_column_name and limit2657 raises an error with invalid batch_column_name2658 #install_rename_triggers2659 installs the triggers2660 #remove_rename_triggers2661 removes the function and trigger2662 #rename_trigger_name2663 returns a String2664 #indexes_for2665 returns the indexes for a column2666 #foreign_keys_for2667 returns the foreign keys for a column2668 #copy_indexes2669 using a regular index using a single column2670 copies the index2671 using a regular index with multiple columns2672 copies the index2673 using an index with a WHERE clause2674 copies the index2675 using an index with a USING clause2676 copies the index2677 using an index with custom operator classes2678 copies the index2679 using an index with multiple columns and custom operator classes2680 copies the index2681 using an index with multiple columns and a custom operator class on the non affected column2682 copies the index2683 using an index of which the name does not contain the source column2684 raises RuntimeError2685 #copy_foreign_keys2686 copies foreign keys from one column to another2687 #column_for2688 returns a column object for an existing column2689 raises an error when a column does not exist2690 #replace_sql2691 builds the sql with correct functions2692 results2693 replaces the correct part of the string2694 #check_trigger_permissions!2695 does nothing when the user has the correct permissions2696 raises RuntimeError when the user does not have the correct permissions2697 #convert_to_bigint_column2698 returns the name of the temporary column used to convert to bigint2699 #convert_to_type_column2700 returns the name of the temporary column used to convert to bigint2701 returns the name of the temporary column used to convert to uuid2702 #create_temporary_columns_and_triggers2703 when no mappings are provided2704 raises an error2705 when any of the mappings does not have the required keys2706 raises an error2707 when the target table does not exist2708 raises an error2709 when the column to migrate does not exist2710 raises an error2711 when old_bigint_column_naming is true2712 calls convert_to_bigint_column2713 when old_bigint_column_naming is false2714 calls convert_to_type_column2715 #initialize_conversion_of_integer_to_bigint2716 when the target table does not exist2717 raises an error2718 when the primary key does not exist2719 raises an error2720 when the column to migrate does not exist2721 raises an error2722 when the column to convert is the primary key2723 creates a not-null bigint column and installs triggers2724 when the column to convert is not the primary key, but non-nullable2725 creates a not-null bigint column and installs triggers2726 when the column to convert is not the primary key, but nullable2727 creates a nullable bigint column and installs triggers2728 when multiple columns are given2729 creates the correct columns and installs the trigger2730 #restore_conversion_of_integer_to_bigint2731 when the target table does not exist2732 raises an error2733 when the column to migrate does not exist2734 raises an error2735 when a single column is given2736 creates the correct columns and installs the trigger2737 when multiple columns are given2738 creates the correct columns and installs the trigger2739 #revert_initialize_conversion_of_integer_to_bigint2740 when single column is given2741 removes column, trigger, and function2742 when multiple columns are given2743 removes column, trigger, and function2744 #backfill_conversion_of_integer_to_bigint2745 when the target table does not exist2746 raises an error2747 when the primary key does not exist2748 raises an error2749 when the column to convert does not exist2750 raises an error2751 when the temporary column does not exist2752 raises an error2753 when the conversion is properly initialized2754 when a single column is being converted2755 creates the batched migration tracking record2756 when multiple columns are being converted2757 creates the batched migration tracking record2758 #revert_backfill_conversion_of_integer_to_bigint2759 when a single column is being converted2760 deletes the batched migration tracking record2761 when a multiple columns are being converted2762 deletes the batched migration tracking record2763 when primary key column has custom name2764 deletes the batched migration tracking record2765 #index_exists_by_name?2766 returns true if an index exists2767 returns false if the index does not exist2768 when an index with a function exists2769 returns true if an index exists2770 when an index exists for a table with the same name in another schema2771 returns false if the index does not exist in the current schema2772 #create_or_update_plan_limit2773 properly escapes names2774 when plan does not exist2775 does not create any plan limits2776 when plan does exist2777 when limit does not exist2778 inserts a new plan limits2779 when limit does exist2780 updates an existing plan limits2781 #backfill_iids2782 generates iids properly for models created after the migration2783 generates iids properly for models created after the migration when iids are backfilled2784 generates iids properly for models created after the migration across multiple projects2785 when the first model is created for a project after the migration2786 generates an iid2787 when a row already has an iid set in the database2788 backfills iids2789 backfills for multiple projects2790 #add_primary_key_using_index2791 executes the statement to add the primary key2792 when changing the primary key of a given table2793 #swap_primary_key2794 executes statements to swap primary key2795 when new index does not exist2796 raises ActiveRecord::StatementInvalid2797 #unswap_primary_key2798 executes statements to unswap primary key2799 #drop_sequence2800 executes the statement to drop the sequence2801 #add_sequence2802 executes the statement to add the sequence2803 #partition?2804 when a partition table exist2805 when the view postgres_partitions exists2806 calls the view2807 when the view postgres_partitions does not exist2808 does not call the view2809 when a partition table does not exist2810 is expected to be falsey2811 #table_partitioned?2812 is expected to be truthy2813 with a non-partitioned table2814 is expected to be falsey2815MergeRequests::MergeService2816 #execute2817 valid params2818 is expected to be valid2819 is expected to be merged2820 persists merge_commit_sha and nullifies in_progress_merge_commit_sha2821 does not update squash_commit_sha if it is not a squash2822 sends email to user2 about merge of new merge_request2823 note creation2824 creates resource state event about merge_request merge2825 when squashing2826 merges the merge request with squashed commits2827 persists squash_commit_sha2828 running the service once2829 logs status messages2830 running the service multiple time2831 is idempotent2832 when an invalid sha is passed2833 does not merge the MR2834 when the `sha` param is missing2835 returns the error2836 closes related issues2837 closes GitLab issue tracker issues2838 with Jira integration2839 closes issues on Jira issue tracker2840 wrong issue markdown2841 does not close issues on Jira issue tracker2842 closes related todos2843 is expected to be done2844 source branch removal2845 when the source branch is protected2846 does not delete the source branch2847 when the source branch is the default branch2848 does not delete the source branch2849 when the source branch can be removed2850 when MR author set the source branch to be removed2851 removes the source branch using the author user2852 when the merger set the source branch not to be removed2853 does not delete the source branch2854 when MR merger set the source branch to be removed2855 removes the source branch using the current user2856 error handling2857 logs and saves error if there is an exception2858 logs and saves error if user is not authorized2859 logs and saves error if there is an PreReceiveError exception2860 logs and saves error if commit is not created2861 when source is missing2862 logs and saves error2863 when squashing is required2864 raises an error if squashing is not done2865 when squashing2866 logs and saves error if there is an error when squashing2867 logs and saves error if there is an PreReceiveError exception2868 when fast-forward merge is not allowed2869 logs and saves error if merge is semi-linear only2870 logs and saves error if merge is ff only2871 when not mergeable2872 with failing CI2873 logs and saves error2874 with unresolved discussions2875 logs and saves error2876 when passing `skip_discussions_check: true` as `options` parameter2877 merges the merge request2878 when the other sidekiq worker has already been running2879 does not execute service2880Members::UpdateService2881 # order random2882 behaves like updating a project2883 as a project maintainer2884 behaves like a service updating members2885 updates the members2886 returns success status2887 invokes after_execute with correct args2888 authorization update callback is triggered2889 does not enqueues todos for deletion2890 when members are downgraded to guest2891 with Gitlab::Access::GUEST level as a string2892 behaves like schedules to delete confidential todos2893 is expected to all equal 102894 with Gitlab::Access::GUEST level as an integer2895 behaves like schedules to delete confidential todos2896 is expected to all equal 102897 when access_level is invalid2898 raises an error2899 when members update results in no change2900 does not invoke update! and post_update2901 authorization update callback is not triggered2902 when member update results in an error2903 behaves like a service returning an error2904 behaves like returns error status when params are invalid2905 is expected to eq :error2906 when a member update results in invalid record2907 returns the error2908 rollbacks back the entire update2909 and updating members to OWNER2910 behaves like a service raising Gitlab::Access::AccessDeniedError2911 raises Gitlab::Access::AccessDeniedError2912 and updating themselves to OWNER2913 behaves like a service raising Gitlab::Access::AccessDeniedError2914 raises Gitlab::Access::AccessDeniedError2915 and downgrading members from OWNER2916 behaves like a service raising Gitlab::Access::AccessDeniedError2917 raises Gitlab::Access::AccessDeniedError2918 when current_user is considered an owner in the project via inheritance2919 and can update members to OWNER2920 behaves like a service updating members2921 updates the members2922 returns success status2923 invokes after_execute with correct args2924 authorization update callback is triggered2925 does not enqueues todos for deletion2926 when members are downgraded to guest2927 with Gitlab::Access::GUEST level as a string2928 behaves like schedules to delete confidential todos2929 is expected to all equal 102930 with Gitlab::Access::GUEST level as an integer2931 behaves like schedules to delete confidential todos2932 is expected to all equal 102933 when access_level is invalid2934 raises an error2935 when members update results in no change2936 does not invoke update! and post_update2937 authorization update callback is not triggered2938 and can downgrade members from OWNER2939 behaves like a service updating members2940 updates the members2941 returns success status2942 invokes after_execute with correct args2943 authorization update callback is triggered2944 does not enqueues todos for deletion2945 when members are downgraded to guest2946 with Gitlab::Access::GUEST level as a string2947 behaves like schedules to delete confidential todos2948 is expected to all equal 102949 with Gitlab::Access::GUEST level as an integer2950 behaves like schedules to delete confidential todos2951 is expected to all equal 102952 when access_level is invalid2953 raises an error2954 when members update results in no change2955 does not invoke update! and post_update2956 authorization update callback is not triggered2957 behaves like current user cannot update the given members2958 behaves like a service raising Gitlab::Access::AccessDeniedError2959 raises Gitlab::Access::AccessDeniedError2960 behaves like a service raising Gitlab::Access::AccessDeniedError2961 raises Gitlab::Access::AccessDeniedError2962 when current user is an admin2963 when all owners are being downgraded2964 behaves like a service raising Gitlab::Access::AccessDeniedError2965 raises Gitlab::Access::AccessDeniedError2966 when all blocked owners are being downgraded2967 behaves like a service raising Gitlab::Access::AccessDeniedError2968 raises Gitlab::Access::AccessDeniedError2969 with a single member2970 returns the correct response2971 behaves like updating a group2972 behaves like a service updating members2973 updates the members2974 returns success status2975 invokes after_execute with correct args2976 authorization update callback is triggered2977 does not enqueues todos for deletion2978 when members are downgraded to guest2979 with Gitlab::Access::GUEST level as a string2980 behaves like schedules to delete confidential todos2981 is expected to all equal 102982 with Gitlab::Access::GUEST level as an integer2983 behaves like schedules to delete confidential todos2984 is expected to all equal 102985 when access_level is invalid2986 raises an error2987 when members update results in no change2988 does not invoke update! and post_update2989 authorization update callback is not triggered2990 when member update results in an error2991 behaves like a service returning an error2992 behaves like returns error status when params are invalid2993 is expected to eq :error2994 when a member update results in invalid record2995 returns the error2996 rollbacks back the entire update2997 when group members expiration date is updated2998 emails the users that their group membership expiry has changed2999Jobs/Deploy.gitlab-ci.yml3000 AUTO_DEPLOY_IMAGE_VERSION3001 corresponds to a published image in the registry3002 the created pipeline3003 with no cluster or agent3004 does not create any kubernetes deployment jobs3005 with only a disabled cluster3006 does not create any kubernetes deployment jobs3007 with an agent3008 behaves like pipeline with deployment jobs3009 on master3010 by default3011 when CI_DEPLOY_FREEZE is present3012 when CANARY_ENABLED3013 when STAGING_ENABLED3014 when INCREMENTAL_ROLLOUT_MODE == timed3015 when INCREMENTAL_ROLLOUT_ENABLED3016 when INCREMENTAL_ROLLOUT_MODE == manual3017 on branch3018 behaves like review app deployment3019 creates the review and stop_review jobs but no production jobs3020 does not include review when REVIEW_DISABLED3021 when INCREMENTAL_ROLLOUT_ENABLED3022 behaves like review app deployment3023 creates the review and stop_review jobs but no production jobs3024 does not include review when REVIEW_DISABLED3025 when INCREMENTAL_ROLLOUT_MODE == "timed"3026 behaves like review app deployment3027 creates the review and stop_review jobs but no production jobs3028 does not include review when REVIEW_DISABLED3029 when INCREMENTAL_ROLLOUT_MODE == "manual"3030 behaves like review app deployment3031 creates the review and stop_review jobs but no production jobs3032 does not include review when REVIEW_DISABLED3033 on tag3034 behaves like review app deployment3035 creates the review and stop_review jobs but no production jobs3036 does not include review when REVIEW_DISABLED3037 on merge request3038 has no jobs3039 with a cluster3040 behaves like pipeline with deployment jobs3041 on master3042 by default3043 when CI_DEPLOY_FREEZE is present3044 when CANARY_ENABLED3045 when STAGING_ENABLED3046 when INCREMENTAL_ROLLOUT_MODE == timed3047 when INCREMENTAL_ROLLOUT_ENABLED3048 when INCREMENTAL_ROLLOUT_MODE == manual3049 on branch3050 behaves like review app deployment3051 creates the review and stop_review jobs but no production jobs3052 does not include review when REVIEW_DISABLED3053 when INCREMENTAL_ROLLOUT_ENABLED3054 behaves like review app deployment3055 creates the review and stop_review jobs but no production jobs3056 does not include review when REVIEW_DISABLED3057 when INCREMENTAL_ROLLOUT_MODE == "timed"3058 behaves like review app deployment3059 creates the review and stop_review jobs but no production jobs3060 does not include review when REVIEW_DISABLED3061 when INCREMENTAL_ROLLOUT_MODE == "manual"3062 behaves like review app deployment3063 creates the review and stop_review jobs but no production jobs3064 does not include review when REVIEW_DISABLED3065 on tag3066 behaves like review app deployment3067 creates the review and stop_review jobs but no production jobs3068 does not include review when REVIEW_DISABLED3069 on merge request3070 has no jobs3071Projects::Security::ConfigurationPresenter3072 #to_html_data_attribute3073 when latest default branch pipeline`s source is not auto devops3074 includes links to auto devops and secure product docs3075 returns info that Auto DevOps is not enabled3076 includes a link to the latest pipeline3077 has stubs for autofix3078 includes feature information3079 includes a link to the latest pipeline3080 includes the path to gitlab_ci history3081 while retrieving information about user's ability to enable auto_devops3082 is_admin: true, archived: true, feature_available: true, result: false3083 includes can_enable_auto_devops3084 is_admin: false, archived: true, feature_available: true, result: false3085 includes can_enable_auto_devops3086 is_admin: true, archived: false, feature_available: true, result: true3087 includes can_enable_auto_devops3088 is_admin: false, archived: false, feature_available: true, result: false3089 includes can_enable_auto_devops3090 is_admin: true, archived: true, feature_available: false, result: false3091 includes can_enable_auto_devops3092 is_admin: false, archived: true, feature_available: false, result: false3093 includes can_enable_auto_devops3094 is_admin: true, archived: false, feature_available: false, result: false3095 includes can_enable_auto_devops3096 is_admin: false, archived: false, feature_available: false, result: false3097 includes can_enable_auto_devops3098 when checking features configured status3099 type: :dast, configured: true3100 returns proper configuration status3101 type: :dast_profiles, configured: true3102 returns proper configuration status3103 type: :sast, configured: true3104 returns proper configuration status3105 type: :sast_iac, configured: false3106 returns proper configuration status3107 type: :container_scanning, configured: false3108 returns proper configuration status3109 type: :cluster_image_scanning, configured: false3110 returns proper configuration status3111 type: :dependency_scanning, configured: false3112 returns proper configuration status3113 type: :license_scanning, configured: true3114 returns proper configuration status3115 type: :secret_detection, configured: false3116 returns proper configuration status3117 type: :coverage_fuzzing, configured: false3118 returns proper configuration status3119 type: :api_fuzzing, configured: false3120 returns proper configuration status3121 type: :corpus_management, configured: true3122 returns proper configuration status3123 when the job has more than one report3124 type: :dast, configured: false3125 properly detects security jobs3126 type: :dast_profiles, configured: true3127 properly detects security jobs3128 type: :sast, configured: true3129 properly detects security jobs3130 type: :sast_iac, configured: false3131 properly detects security jobs3132 type: :container_scanning, configured: false3133 properly detects security jobs3134 type: :cluster_image_scanning, configured: false3135 properly detects security jobs3136 type: :dependency_scanning, configured: false3137 properly detects security jobs3138 type: :license_scanning, configured: true3139 properly detects security jobs3140 type: :secret_detection, configured: false3141 properly detects security jobs3142 type: :coverage_fuzzing, configured: false3143 properly detects security jobs3144 type: :api_fuzzing, configured: false3145 properly detects security jobs3146 type: :corpus_management, configured: true3147 properly detects security jobs3148 while retrieving information about gitlab ci file3149 when a .gitlab-ci.yml file exists3150 expects gitlab_ci_present to be true3151 when a .gitlab-ci.yml file does not exist3152 expects gitlab_ci_present to be false if the file is not present3153 when the project is empty3154 includes a blank gitlab_ci history path3155 when the project has no default branch set3156 includes the path to gitlab_ci history3157 when the latest default branch pipeline's source is auto devops3158 reports that auto devops is enabled3159 when gathering feature data3160 type: :dast, configured: true3161 reports that all scanners are configured for which latest pipeline has builds3162 type: :dast_profiles, configured: true3163 reports that all scanners are configured for which latest pipeline has builds3164 type: :sast, configured: true3165 reports that all scanners are configured for which latest pipeline has builds3166 type: :sast_iac, configured: false3167 reports that all scanners are configured for which latest pipeline has builds3168 type: :container_scanning, configured: false3169 reports that all scanners are configured for which latest pipeline has builds3170 type: :cluster_image_scanning, configured: false3171 reports that all scanners are configured for which latest pipeline has builds3172 type: :dependency_scanning, configured: false3173 reports that all scanners are configured for which latest pipeline has builds3174 type: :license_scanning, configured: false3175 reports that all scanners are configured for which latest pipeline has builds3176 type: :secret_detection, configured: true3177 reports that all scanners are configured for which latest pipeline has builds3178 type: :coverage_fuzzing, configured: false3179 reports that all scanners are configured for which latest pipeline has builds3180 type: :api_fuzzing, configured: false3181 reports that all scanners are configured for which latest pipeline has builds3182 type: :corpus_management, configured: true3183 reports that all scanners are configured for which latest pipeline has builds3184 when the project has no default branch pipeline3185 reports that auto devops is disabled3186 includes a link to CI pipeline docs3187 when gathering feature data3188 type: :dast, configured: false3189 reports all security jobs as unconfigured with exception of "fake" jobs3190 type: :dast_profiles, configured: true3191 reports all security jobs as unconfigured with exception of "fake" jobs3192 type: :sast, configured: false3193 reports all security jobs as unconfigured with exception of "fake" jobs3194 type: :sast_iac, configured: false3195 reports all security jobs as unconfigured with exception of "fake" jobs3196 type: :container_scanning, configured: false3197 reports all security jobs as unconfigured with exception of "fake" jobs3198 type: :cluster_image_scanning, configured: false3199 reports all security jobs as unconfigured with exception of "fake" jobs3200 type: :dependency_scanning, configured: false3201 reports all security jobs as unconfigured with exception of "fake" jobs3202 type: :license_scanning, configured: false3203 reports all security jobs as unconfigured with exception of "fake" jobs3204 type: :secret_detection, configured: false3205 reports all security jobs as unconfigured with exception of "fake" jobs3206 type: :coverage_fuzzing, configured: false3207 reports all security jobs as unconfigured with exception of "fake" jobs3208 type: :api_fuzzing, configured: false3209 reports all security jobs as unconfigured with exception of "fake" jobs3210 type: :corpus_management, configured: true3211 reports all security jobs as unconfigured with exception of "fake" jobs3212GroupChildEntity3213 for a project3214 has the correct type3215 includes the star count3216 has the correct edit path3217 includes the last activity at3218 behaves like group child json3219 renders json3220 includes id3221 includes full_name3222 includes avatar_url3223 includes name3224 includes description3225 includes markdown_description3226 includes visibility3227 includes type3228 includes can_edit3229 includes visibility3230 includes permission3231 includes relative_path3232 for a group3233 has the correct type3234 counts projects and subgroups as children3235 includes children_count3236 includes leave_path3237 includes parent_id3238 includes number_users_with_delimiter3239 includes project_count3240 includes subgroup_count3241 allows an owner to leave when there is another one3242 allows an owner to delete the group3243 allows admin to delete the group3244 disallows a maintainer to delete the group3245 has the correct edit path3246 emoji in description3247 has the correct markdown_description3248 behaves like group child json3249 renders json3250 includes id3251 includes full_name3252 includes avatar_url3253 includes name3254 includes description3255 includes markdown_description3256 includes visibility3257 includes type3258 includes can_edit3259 includes visibility3260 includes permission3261 includes relative_path3262 for a private group3263 user is member of the group3264 includes the counts3265 user is not a member of the group3266 does not include the counts3267 user is only a member of a project in the group3268 does not include the counts3269 for a project with external authorization enabled3270 does not hit the external authorization service3271Gitlab::Ci::Build::Rules::Rule::Clause::Exists3272 #satisfied_by?3273 when the rules are being evaluated at job level3274 behaves like a rules:exists with a context3275 behaves like a glob matching rule3276 exact top-level match3277 is expected to eq true3278 exact top-level no match3279 is expected to eq false3280 pattern top-level match3281 is expected to eq true3282 pattern top-level no match3283 is expected to eq false3284 exact nested match3285 is expected to eq true3286 exact nested no match3287 is expected to eq false3288 pattern nested match3289 is expected to eq true3290 pattern nested no match3291 is expected to eq false3292 ext top-level match3293 is expected to eq true3294 ext nested no match3295 is expected to eq false3296 ext slash no match3297 is expected to eq false3298 when the rules:exists has a variable3299 when the context has the specified variables3300 is expected to be truthy3301 when variable expansion does not match3302 is expected to be falsey3303 after pattern comparision limit is reached3304 is expected to be truthy3305 when the rules are being evaluated for an entire pipeline3306 behaves like a rules:exists with a context3307 behaves like a glob matching rule3308 exact top-level match3309 is expected to eq true3310 exact top-level no match3311 is expected to eq false3312 pattern top-level match3313 is expected to eq true3314 pattern top-level no match3315 is expected to eq false3316 exact nested match3317 is expected to eq true3318 exact nested no match3319 is expected to eq false3320 pattern nested match3321 is expected to eq true3322 pattern nested no match3323 is expected to eq false3324 ext top-level match3325 is expected to eq true3326 ext nested no match3327 is expected to eq false3328 ext slash no match3329 is expected to eq false3330 when the rules:exists has a variable3331 when the context has the specified variables3332 is expected to be truthy3333 when variable expansion does not match3334 is expected to be falsey3335 after pattern comparision limit is reached3336 is expected to be truthy3337 when rules are being evaluated with `include`3338 behaves like a rules:exists with a context3339 behaves like a glob matching rule3340 exact top-level match3341 is expected to eq true3342 exact top-level no match3343 is expected to eq false3344 pattern top-level match3345 is expected to eq true3346 pattern top-level no match3347 is expected to eq false3348 exact nested match3349 is expected to eq true3350 exact nested no match3351 is expected to eq false3352 pattern nested match3353 is expected to eq true3354 pattern nested no match3355 is expected to eq false3356 ext top-level match3357 is expected to eq true3358 ext nested no match3359 is expected to eq false3360 ext slash no match3361 is expected to eq false3362 when the rules:exists has a variable3363 when the context has the specified variables3364 is expected to be truthy3365 when variable expansion does not match3366 is expected to be falsey3367 after pattern comparision limit is reached3368 is expected to be truthy3369 when context has no project3370 is expected to eq false3371Banzai::ReferenceParser::SnippetParser3372 #nodes_visible_to_user3373 when a project is public and the snippets feature is enabled for everyone3374 avoids N+1 cached queries3375 creates a reference for guest for a public snippet3376 creates a reference for a regular user for a public snippet3377 creates a reference for a regular user for an internal snippet3378 does not create a reference for an external user for an internal snippet3379 creates a reference for a project member for a private snippet3380 does not create a reference for a regular user for a private snippet3381 when a project is public and the snippets feature is enabled for project team members3382 creates a reference for a project member for a public snippet3383 does not create a reference for guest for a public snippet3384 does not create a reference for a regular user for a public snippet3385 creates a reference for a project member for an internal snippet3386 does not create a reference for a regular user for an internal snippet3387 creates a reference for a project member for a private snippet3388 does not create a reference for a regular user for a private snippet3389 when a project is internal and the snippets feature is enabled for everyone3390 does not create a reference for guest for a public snippet3391 does not create a reference for an external user for a public snippet3392 creates a reference for a regular user for a public snippet3393 creates a reference for a regular user for an internal snippet3394 does not create a reference for an external user for an internal snippet3395 creates a reference for a project member for a private snippet3396 does not create a reference for a regular user for a private snippet3397 when a project is internal and the snippets feature is enabled for project team members3398 creates a reference for a project member for a public snippet3399 does not create a reference for guest for a public snippet3400 does not create reference for a regular user for a public snippet3401 creates a reference for a project member for an internal snippet3402 does not create a reference for a regular user for an internal snippet3403 creates a reference for a project member for a private snippet3404 does not create reference for a regular user for a private snippet3405 when a project is private and the snippets feature is enabled for project team members3406 creates a reference for a project member for a public snippet3407 does not create a reference for guest for a public snippet3408 does not create a reference for a regular user for a public snippet3409 creates a reference for a project member for an internal snippet3410 does not create a reference for a regular user for an internal snippet3411 creates a reference for a project member for a private snippet3412 does not create a reference for a regular user for a private snippet3413 #referenced_by3414 when the link has a data-snippet attribute3415 using an existing snippet ID3416 returns an Array of snippets3417 using a non-existing snippet ID3418 returns an empty Array3419Ci::ProcessSyncEventsService3420 #perform3421 for Projects::SyncEvent3422 is expected to eq {:consumable_events=>2, :estimated_total_events=>2, :processed_events=>2}3423 consumes events3424 when any event left after processing3425 is expected to eq {:consumable_events=>1, :estimated_total_events=>2, :processed_events=>1}3426 enqueues Projects::ProcessSyncEventsWorker3427 when no event left after processing3428 is expected to eq {:consumable_events=>2, :estimated_total_events=>2, :processed_events=>2}3429 does not enqueue Projects::ProcessSyncEventsWorker3430 when there is no event3431 is expected to eq {:consumable_events=>0, :estimated_total_events=>0}3432 does nothing3433 when there is non-executed events3434 is expected to eq {:consumable_events=>2, :estimated_total_events=>3, :processed_events=>2}3435 does not delete non-executed events3436 for Namespaces::SyncEvent3437 enqueues Namespaces::ProcessSyncEventsWorker if any left3438 does not enqueue Namespaces::ProcessSyncEventsWorker if no left3439 when the FFs use_traversal_ids and use_traversal_ids_for_ancestors are disabled3440 behaves like event consuming3441 consumes events3442 behaves like event consuming3443 consumes events3444Ci::Bridge3445 has one sourced pipeline3446 has one downstream pipeline3447 behaves like has ID tokens3448 delegations3449 is expected to delegate #id_tokens to the #metadata object, allowing #metadata to return nil3450 #id_tokens?3451 without metadata3452 is expected to be falsy3453 with metadata3454 when ID tokens exist3455 is expected to be truthy3456 when ID tokens do not exist3457 is expected to be falsy3458 #id_tokens=3459 assigns the ID tokens to the CI job3460 behaves like a retryable job3461 #enqueue_immediately?3462 defaults to false3463 #set_enqueue_immediately!3464 changes #enqueue_immediately? to true3465 #retryable?3466 returns true3467 when there is a pipeline loop detected3468 returns false3469 when the pipeline depth has reached the max descendents3470 returns false3471 #tags3472 only has a bridge tag3473 #detailed_status3474 returns detailed status object3475 #scoped_variables3476 returns a hash representing variables3477 when bridge has dependency which has dotenv variable3478 includes inherited variable3479 state machine transitions3480 when bridge points towards downstream3481 schedules downstream pipeline creation when the status is created3482 schedules downstream pipeline creation when the status is manual3483 schedules downstream pipeline creation when the status is waiting for resource3484 raises error when the status is failed3485 #inherit_status_from_downstream!3486 when status is not supported3487 when status is created3488 returns false3489 does not change the bridge status3490 when status is waiting_for_resource3491 returns false3492 does not change the bridge status3493 when status is preparing3494 returns false3495 does not change the bridge status3496 when status is pending3497 returns false3498 does not change the bridge status3499 when status is running3500 returns false3501 does not change the bridge status3502 when status is manual3503 returns false3504 does not change the bridge status3505 when status is scheduled3506 returns false3507 does not change the bridge status3508 when status is supported3509 downstream_status: "success", upstream_status: "success"3510 inherits the downstream status3511 downstream_status: "canceled", upstream_status: "canceled"3512 inherits the downstream status3513 downstream_status: "failed", upstream_status: "failed"3514 inherits the downstream status3515 downstream_status: "skipped", upstream_status: "failed"3516 inherits the downstream status3517 #dependent?3518 when bridge has strategy depend3519 is expected to equal true3520 when bridge does not have strategy depend3521 is expected to equal false3522 #yaml_variables3523 returns YAML variables3524 #downstream_variables3525 returns variables that are going to be passed downstream3526 when using variables interpolation3527 correctly expands variables with interpolation3528 when recursive interpolation has been used3529 does not expand variable recursively3530 forward variables3531 yaml_variables: nil, pipeline_variables: nil, variables: ["BRIDGE"]3532 returns variables according to the forward value3533 yaml_variables: nil, pipeline_variables: false, variables: ["BRIDGE"]3534 returns variables according to the forward value3535 yaml_variables: nil, pipeline_variables: true, variables: ["BRIDGE", "PVAR1"]3536 returns variables according to the forward value3537 yaml_variables: false, pipeline_variables: nil, variables: []3538 returns variables according to the forward value3539 yaml_variables: false, pipeline_variables: false, variables: []3540 returns variables according to the forward value3541 yaml_variables: false, pipeline_variables: true, variables: ["PVAR1"]3542 returns variables according to the forward value3543 yaml_variables: true, pipeline_variables: nil, variables: ["BRIDGE"]3544 returns variables according to the forward value3545 yaml_variables: true, pipeline_variables: false, variables: ["BRIDGE"]3546 returns variables according to the forward value3547 yaml_variables: true, pipeline_variables: true, variables: ["BRIDGE", "PVAR1"]3548 returns variables according to the forward value3549 when sending a variable via both yaml and pipeline3550 uses the pipeline variable3551 when the pipeline runs from a pipeline schedule3552 adds the schedule variable3553 when using raw variables3554 expands variables according to their raw attributes3555 metadata support3556 reads YAML variables from metadata3557 reads options from metadata3558 #triggers_child_pipeline?3559 when bridge defines a downstream YAML3560 is expected to be truthy3561 when bridge does not define a downstream YAML3562 is expected to be falsey3563 #yaml_for_downstream3564 when bridge defines a downstream YAML3565 is expected to eq "---\ninclude: path/to/child.yml\n"3566 when bridge does not define a downstream YAML3567 is expected to be nil3568 #downstream_project_path3569 when trigger is defined3570 when using variable expansion3571 correctly expands variables3572 #target_ref3573 when trigger is defined3574 returns a ref name3575 when using variable expansion3576 correctly expands variables3577 when trigger does not have project defined3578 returns nil3579 #play3580 enqueues the bridge3581 #playable?3582 when bridge is a manual action3583 is expected to be truthy3584 when build is not a manual action3585 is expected to be falsey3586 #action?3587 when bridge is a manual action3588 is expected to be truthy3589 when build is not a manual action3590 is expected to be falsey3591 #dependency_variables3592 when downloading from previous stages3593 inherits only dependent variables3594 when using needs3595 inherits only needs with artifacts variables3596 metadata partitioning3597 creates the metadata record and assigns its partition (PENDING: Skipping partitioning tests until `ci_builds` is partitioned)3598 #deployment_job?3599 is expected to eq false3600Integrations::Field3601 #initialize3602 sets type password for secret fields3603 uses the given type for other names3604 raises an error if an invalid attribute is given3605 raises an error if an invalid type is given3606 #name3607 is stringified3608 when not set3609 complains3610 #section3611 responds to section3612 when not set3613 has the correct default3614 when set to a static value3615 is known3616 when set to a dynamic value3617 is computed3618 is executed in the class scope3619 #type3620 responds to type3621 when not set3622 has the correct default3623 when set to a static value3624 is known3625 when set to a dynamic value3626 is computed3627 is executed in the class scope3628 #placeholder3629 responds to placeholder3630 when not set3631 has the correct default3632 when set to a static value3633 is known3634 when set to a dynamic value3635 is computed3636 is executed in the class scope3637 #choices3638 responds to choices3639 when not set3640 has the correct default3641 when set to a static value3642 is known3643 when set to a dynamic value3644 is computed3645 is executed in the class scope3646 #value3647 responds to value3648 when not set3649 has the correct default3650 when set to a static value3651 is known3652 when set to a dynamic value3653 is computed3654 is executed in the class scope3655 #checkbox_label3656 responds to checkbox_label3657 when not set3658 has the correct default3659 when set to a static value3660 is known3661 when set to a dynamic value3662 is computed3663 is executed in the class scope3664 #title3665 responds to title3666 when not set3667 has the correct default3668 when set to a static value3669 is known3670 when set to a dynamic value3671 is computed3672 is executed in the class scope3673 #help3674 responds to help3675 when not set3676 has the correct default3677 when set to a static value3678 is known3679 when set to a dynamic value3680 is computed3681 is executed in the class scope3682 #non_empty_password_help3683 responds to non_empty_password_help3684 when not set3685 has the correct default3686 when set to a static value3687 is known3688 when set to a dynamic value3689 is computed3690 is executed in the class scope3691 #non_empty_password_title3692 responds to non_empty_password_title3693 when not set3694 has the correct default3695 when set to a static value3696 is known3697 when set to a dynamic value3698 is computed3699 is executed in the class scope3700 #required3701 responds to required3702 when not set3703 has the correct default3704 when set to a static value3705 is known3706 when set to a dynamic value3707 is computed3708 is executed in the class scope3709 #api_only3710 responds to api_only3711 when not set3712 has the correct default3713 when set to a static value3714 is known3715 when set to a dynamic value3716 is computed3717 is executed in the class scope3718 #is_secret3719 responds to is_secret3720 when not set3721 has the correct default3722 when set to a static value3723 is known3724 when set to a dynamic value3725 is computed3726 is executed in the class scope3727 #exposes_secrets3728 responds to exposes_secrets3729 when not set3730 has the correct default3731 when set to a static value3732 is known3733 when set to a dynamic value3734 is computed3735 is executed in the class scope3736 #required?3737 returns true if the value is truthy3738 returns false if the value is falsey3739 #api_only?3740 returns true if the value is truthy3741 returns false if the value is falsey3742 #is_secret?3743 returns true if the value is truthy3744 returns false if the value is falsey3745 #exposes_secrets?3746 returns true if the value is truthy3747 returns false if the value is falsey3748 #text?3749 returns true if the type matches3750 returns false if the type does not match3751 #textarea?3752 returns true if the type matches3753 returns false if the type does not match3754 #password?3755 returns true if the type matches3756 returns false if the type does not match3757 #checkbox?3758 returns true if the type matches3759 returns false if the type does not match3760 #select?3761 returns true if the type matches3762 returns false if the type does not match3763 #secret?3764 when empty3765 is expected not to be secret3766 when a secret field3767 is expected to be secret3768 when named url3769 is expected not to be secret3770Banzai::ColorParser3771 .parse3772 HEX format3773 parses the valid hex color #abc3774 parses the valid hex color #ABC3775 parses the valid hex color #d2d2d23776 parses the valid hex color #D2D2D23777 parses the valid hex color #123a3778 parses the valid hex color #123A3779 parses the valid hex color #123456aa3780 parses the valid hex color #123456AA3781 does not parse the invalid hex color #3782 does not parse the invalid hex color #13783 does not parse the invalid hex color #123784 does not parse the invalid hex color #12g3785 does not parse the invalid hex color #12G3786 does not parse the invalid hex color #123453787 does not parse the invalid hex color #r2r2r23788 does not parse the invalid hex color #R2R2R23789 does not parse the invalid hex color #12345673790 does not parse the invalid hex color # 1233791 does not parse the invalid hex color # 12343792 does not parse the invalid hex color # 1234563793 does not parse the invalid hex color # 123456783794 does not parse the invalid hex color #1 2 33795 does not parse the invalid hex color #123 43796 does not parse the invalid hex color #12 34 563797 does not parse the invalid hex color #123456 783798 RGB format3799 parses the valid rgb color rgb(0,0,0)3800 parses the valid rgb color rgb(255,255,255)3801 parses the valid rgb color rgb(0, 0, 0)3802 parses the valid rgb color RGB(0,0,0)3803 parses the valid rgb color rgb(0,0,0,0)3804 parses the valid rgb color rgb(0,0,0,0.0)3805 parses the valid rgb color rgb(0,0,0,.0)3806 parses the valid rgb color rgb(0,0,0, 0)3807 parses the valid rgb color rgb(0,0,0, 0.0)3808 parses the valid rgb color rgb(0,0,0, .0)3809 parses the valid rgb color rgb(0,0,0,1)3810 parses the valid rgb color rgb(0,0,0,1.0)3811 parses the valid rgb color rgba(0,0,0)3812 parses the valid rgb color rgba(0,0,0,0)3813 parses the valid rgb color RGBA(0,0,0)3814 parses the valid rgb color rgb(0%,0%,0%)3815 parses the valid rgb color rgba(0%,0%,0%,0%)3816 does not parse the invalid rgb color FOOrgb(0,0,0)3817 does not parse the invalid rgb color rgb(0,0,0)BAR3818 does not parse the invalid rgb color rgb(0,0,-1)3819 does not parse the invalid rgb color rgb(0,0,-0)3820 does not parse the invalid rgb color rgb(0,0,256)3821 does not parse the invalid rgb color rgb(0,0,0,-0.1)3822 does not parse the invalid rgb color rgb(0,0,0,-0.0)3823 does not parse the invalid rgb color rgb(0,0,0,-.1)3824 does not parse the invalid rgb color rgb(0,0,0,1.1)3825 does not parse the invalid rgb color rgb(0,0,0,2)3826 does not parse the invalid rgb color rgba(0,0,0,)3827 does not parse the invalid rgb color rgba(0,0,0,0.)3828 does not parse the invalid rgb color rgba(0,0,0,1.)3829 does not parse the invalid rgb color rgb(0,0,0%)3830 does not parse the invalid rgb color rgb(101%,0%,0%)3831 HSL format3832 parses the valid hsl color hsl(0,0%,0%)3833 parses the valid hsl color hsl(0,100%,100%)3834 parses the valid hsl color hsl(540,0%,0%)3835 parses the valid hsl color hsl(-720,0%,0%)3836 parses the valid hsl color hsl(0deg,0%,0%)3837 parses the valid hsl color hsl(0DEG,0%,0%)3838 parses the valid hsl color hsl(0, 0%, 0%)3839 parses the valid hsl color HSL(0,0%,0%)3840 parses the valid hsl color hsl(0,0%,0%,0)3841 parses the valid hsl color hsl(0,0%,0%,0.0)3842 parses the valid hsl color hsl(0,0%,0%,.0)3843 parses the valid hsl color hsl(0,0%,0%, 0)3844 parses the valid hsl color hsl(0,0%,0%, 0.0)3845 parses the valid hsl color hsl(0,0%,0%, .0)3846 parses the valid hsl color hsl(0,0%,0%,1)3847 parses the valid hsl color hsl(0,0%,0%,1.0)3848 parses the valid hsl color hsla(0,0%,0%)3849 parses the valid hsl color hsla(0,0%,0%,0)3850 parses the valid hsl color HSLA(0,0%,0%)3851 parses the valid hsl color hsl(1rad,0%,0%)3852 parses the valid hsl color hsl(1.1rad,0%,0%)3853 parses the valid hsl color hsl(.1rad,0%,0%)3854 parses the valid hsl color hsl(-1rad,0%,0%)3855 parses the valid hsl color hsl(1RAD,0%,0%)3856 does not parse the invalid hsl color hsl(+0,0%,0%)3857 does not parse the invalid hsl color hsl(0,0,0%)3858 does not parse the invalid hsl color hsl(0,0%,0)3859 does not parse the invalid hsl color hsl(0 deg,0%,0%)3860 does not parse the invalid hsl color hsl(0,-0%,0%)3861 does not parse the invalid hsl color hsl(0,101%,0%)3862 does not parse the invalid hsl color hsl(0,-1%,0%)3863 does not parse the invalid hsl color hsl(0,0%,0%,-0.1)3864 does not parse the invalid hsl color hsl(0,0%,0%,-.1)3865 does not parse the invalid hsl color hsl(0,0%,0%,1.1)3866 does not parse the invalid hsl color hsl(0,0%,0%,2)3867 does not parse the invalid hsl color hsl(0,0%,0%,)3868 does not parse the invalid hsl color hsl(0,0%,0%,0.)3869 does not parse the invalid hsl color hsl(0,0%,0%,1.)3870 does not parse the invalid hsl color hsl(deg,0%,0%)3871 does not parse the invalid hsl color hsl(rad,0%,0%)3872Operations::FeatureFlag3873 behaves like includes Limitable concern3874 #exceeds_limits?3875 without plan limits configured3876 is expected to eq false3877 without plan limits configured3878 is expected to eq false3879 with an existing model3880 is expected to eq true3881 validations3882 is expected to be a kind of Limitable3883 without plan limits configured3884 can create new models3885 with plan limits configured3886 can create new models3887 with an existing model3888 cannot create new models exceeding the plan limits3889 associations3890 is expected to belong to project required: false3891 is expected to have many strategies3892 default values3893 is expected to be active3894 is expected to eq "new_version_flag"3895 .reference_pattern3896 is expected to match "[feature_flag:123]"3897 is expected to match "[feature_flag:gitlab-org/gitlab/123]"3898 .link_reference_pattern3899 is expected to match "http://localhost/gitlab-org/gitlab/-/feature_flags/123/edit"3900 is expected not to match "http://localhost/gitlab-org/gitlab/issues/123/edit"3901 is expected not to match "gitlab-org/gitlab/-/feature_flags/123/edit"3902 #to_reference3903 returns feature flag id3904 returns complete path to the feature flag with full: true3905 validations3906 is expected to validate that :project cannot be empty/falsy3907 is expected to validate that :name cannot be empty/falsy3908 is expected to validate that :name is case-sensitively unique within the scope of :project_id3909 is expected to define :version as an enum backed by an integer with values ‹{new_version_flag: 2}›3910 a version 2 feature flag3911 is valid if associated with Operations::FeatureFlags::Strategy models3912 behaves like AtomicInternalId3913 .has_internal_id3914 Module inclusion3915 is expected to includes the AtomicInternalId module3916 Validation3917 when presence validation is required3918 when creating an object3919 raises an error if the internal id is blank3920 when updating an object3921 raises an error if the internal id is blank3922 when presence validation is not required3923 when creating an object3924 does not raise an error if the internal id is blank (PENDING: No reason given)3925 when updating an object3926 does not raise an error if the internal id is blank (PENDING: No reason given)3927 Creating an instance3928 saves a new instance properly3929 internal id generation3930 calls InternalId.generate_next and sets internal id attribute3931 does not overwrite an existing internal id3932 when the instance has an internal ID set3933 calls InternalId.update_last_value and sets the `last_value` to that of the instance3934 unsetting the instance internal id on rollback3935 when the internal id has been changed3936 when the internal id is automatically set3937 clears it on the instance3938 when the internal id is manually set3939 does not clear it on the instance3940 when the internal id has not been changed3941 preserves the value on the instance3942 supply of internal ids3943 provides a persistent supply of IID values, sensitive to the current state3944 #reset_scope_internal_id_attribute3945 rewinds the allocated IID3946 allocates the same IID3947 .enabled3948 when the feature flag is active3949 returns the flag3950 when the feature flag is inactive3951 does not return the flag3952 .disabled3953 when the feature flag is active3954 does not return the flag3955 when the feature flag is inactive3956 returns the flag3957 .for_unleash_client3958 matches wild cards in the scope3959 matches wild cards case sensitively3960 returns feature flags ordered by id3961 #hook_attrs3962 includes expected attributes3963GroupDescendantsFinder3964 #has_children?3965 is true when there are projects3966 when there are subgroups3967 is true when there are projects3968 #execute3969 includes projects3970 does not include archived projects3971 does not include projects aimed for deletion3972 sorts elements by name as default3973 does not include projects shared with the group3974 when archived is `true`3975 includes archived projects3976 when archived is `only`3977 includes only archived projects3978 with a filter3979 includes only projects matching the filter3980 sorting by name3981 sorts elements by name3982 with nested groups3983 sorts elements by name3984 with shared groups3985 without common ancestor3986 is expected to be empty3987 with common ancestor3988 querying under the common ancestor3989 is expected to be empty3990 querying the common ancestor3991 contains shared subgroups3992 with nested groups3993 #execute3994 contains projects and subgroups3995 does not include subgroups the user does not have access to3996 only includes public groups when no user is given3997 when archived is `true`3998 includes archived projects in the count of subgroups3999 with a filter4000 behaves like filter examples4001 contains only matching projects and subgroups4002 does not include subgroups the user does not have access to4003 with matching children4004 includes a group that has a subgroup matching the query and its parent4005 includes the parent of a matching project4006 does not include the parent itself4007 with a small page size4008 contains all the ancestors of a matching subgroup regardless the page size4009 when feature flag :linear_group_descendants_finder_upto is disabled4010 behaves like filter examples4011 contains only matching projects and subgroups4012 does not include subgroups the user does not have access to4013 with matching children4014 includes a group that has a subgroup matching the query and its parent4015 includes the parent of a matching project4016 does not include the parent itself4017 with a small page size4018 contains all the ancestors of a matching subgroup regardless the page size4019Issues::ImportCsvService4020 #execute4021 behaves like correctly handles invalid files4022 when given file with unsupported extension4023 behaves like invalid file4024 returns invalid file error4025 when given empty file4026 behaves like invalid file4027 returns invalid file error4028 when given file without headers4029 behaves like invalid file4030 returns invalid file error4031 behaves like importer with email notification4032 notifies user of import result4033 behaves like an issuable importer4034 records the import attempt if resource is an issue4035 with a file generated by Gitlab CSV export4036 imports the CSV without errors4037 correctly sets the issuable attributes4038 behaves like importer with email notification4039 notifies user of import result4040 behaves like an issuable importer4041 records the import attempt if resource is an issue4042 with comma delimited file4043 imports CSV without errors4044 correctly sets the issuable attributes4045 behaves like importer with email notification4046 notifies user of import result4047 behaves like an issuable importer4048 records the import attempt if resource is an issue4049 with tab delimited file with error row4050 imports CSV with some error rows4051 correctly sets the issuable attributes4052 behaves like importer with email notification4053 notifies user of import result4054 behaves like an issuable importer4055 records the import attempt if resource is an issue4056 with semicolon delimited file with CRLF4057 imports CSV with a blank row4058 correctly sets the issuable attributes4059 behaves like importer with email notification4060 notifies user of import result4061 behaves like an issuable importer4062 records the import attempt if resource is an issue4063 #execute4064 sets all issueable attributes and executes quick actions4065Projects::ImportExport::CreateRelationExportsWorker4066 # order random4067 enqueues a WaitRelationExportsWorker4068 creates relation export records and enqueues a worker for each relation to be exported4069 creates a export_job and sets the status to `started`4070 when job is re-enqueued after an interuption and same JID is used4071 does not start the export process twice4072 behaves like an idempotent worker4073 is labeled as idempotent4074 performs multiple times sequentially without raising an exception4075 behaves like an idempotent worker4076 is labeled as idempotent4077 performs multiple times sequentially without raising an exception4078Gitlab::FileTypeDetection4079 .extension_match?4080 returns false when filename is blank4081 returns true when filename matches extensions4082 returns false when filename does not match extensions4083 can match case insensitive filenames4084 can match filenames with periods4085 can match filenames with directories4086 when class is an uploader4087 #image?4088 returns true for an image file4089 returns false if filename has a dangerous image extension4090 returns false for a video file4091 returns false for an audio file4092 returns false if filename is blank4093 #video?4094 returns true for a video file4095 returns false for an image file4096 returns false for an audio file4097 returns false if file has a dangerous image extension4098 returns false if filename is blank4099 #audio?4100 returns true for an audio file4101 returns false for an image file4102 returns false for a video file4103 returns false if file has a dangerous image extension4104 returns false if filename is blank4105 #embeddable?4106 returns true for an image file4107 returns true for a video file4108 returns true for an audio file4109 returns false if not an embeddable file4110 returns false if filename has a dangerous image extension4111 returns false if filename is blank4112 #image_safe_for_scaling?4113 returns true for allowed image formats4114 returns false for other files4115 #dangerous_image?4116 returns true if filename has a dangerous extension4117 returns false for an image file4118 returns false for a video file4119 returns false for an audio file4120 returns false if filename is blank4121 #dangerous_video?4122 returns false for a safe video file4123 returns false if filename is a dangerous image extension4124 returns false for an image file4125 returns false for an audio file4126 returns false if filename is blank4127 #dangerous_audio?4128 returns false for a safe audio file4129 returns false if filename is a dangerous image extension4130 returns false for an image file4131 returns false for an video file4132 returns false if filename is blank4133 #dangerous_embeddable?4134 returns true if filename has a dangerous image extension4135 returns false for an image file4136 returns false for a video file4137 returns false for an audio file4138 returns false for a non-embeddable file4139 returns false if filename is blank4140 when class is a regular class4141 #image?4142 returns true for an image file4143 returns false if file has a dangerous image extension4144 returns false for a video file4145 returns false for an audio file4146 returns false if filename is blank4147 #image_safe_for_scaling?4148 returns false if filename is blank4149 filename: "img.jpg", expectation: true4150 returns expected result4151 filename: "img.jpeg", expectation: true4152 returns expected result4153 filename: "img.png", expectation: true4154 returns expected result4155 filename: "img.svg", expectation: false4156 returns expected result4157 #video?4158 returns true for a video file4159 returns false for an image file4160 returns false for an audio file4161 returns false if file has a dangerous image extension4162 returns false if filename is blank4163 #audio?4164 returns true for an audio file4165 returns false for an image file4166 returns false for a video file4167 returns false if file has a dangerous image extension4168 returns false if filename is blank4169 #embeddable?4170 returns true for an image file4171 returns true for a video file4172 returns true for an audio file4173 returns false if not an embeddable file4174 returns false if filename has a dangerous image extension4175 returns false if filename is blank4176 #dangerous_image?4177 returns true if file has a dangerous image extension4178 returns false for an image file4179 returns false for a video file4180 returns false for an audio file4181 returns false if filename is blank4182 #dangerous_video?4183 returns false for a safe video file4184 returns false for an image file4185 returns false for an audio file4186 returns false if file has a dangerous image extension4187 returns false if filename is blank4188 #dangerous_audio?4189 returns false for a safe audio file4190 returns false for an image file4191 returns false for a video file4192 returns false if file has a dangerous image extension4193 returns false if filename is blank4194 #dangerous_embeddable?4195 returns true if file has a dangerous image extension4196 returns false for an image file4197 returns false for a video file4198 returns false for an audio file4199 returns false for a non-embeddable file4200 returns false if filename is blank4201Resolvers::TodosResolver4202 is expected to have nullable GraphQL type TodoConnection4203 #resolve4204 calls TodosFinder4205 when using no filter4206 returns pending todos4207 when using filters4208 returns the todos for multiple states4209 returns the todos for multiple filters4210 returns the todos for single filter4211 returns the todos for multiple groups4212 returns the todos for multiple authors4213 returns the todos for multiple actions4214 returns the todos for multiple projects4215 when no target is provided4216 returns no todos4217 when target user is not the current user4218 returns no todos4219 when request is for a todo target4220 returns only the todos for the target4221Gitlab::JsonCache4222 #active?4223 when backend respond to active? method4224 delegates to the underlying cache implementation4225 when backend does not respond to active? method4226 returns true4227 #cache_key4228 namespace: nil, cache_key_strategy: :revision, expanded_key: "foo:95754c794be"4229 is expected to eq "foo:95754c794be"4230 namespace: nil, cache_key_strategy: :version, expanded_key: "foo:16.1.0-pre:6.1.7.2"4231 is expected to eq "foo:16.1.0-pre:6.1.7.2"4232 namespace: "geo", cache_key_strategy: :revision, expanded_key: "geo:foo:95754c794be"4233 is expected to eq "geo:foo:95754c794be"4234 namespace: "geo", cache_key_strategy: :version, expanded_key: "geo:foo:16.1.0-pre:6.1.7.2"4235 is expected to eq "geo:foo:16.1.0-pre:6.1.7.2"4236 when cache_key_strategy is unknown4237 raises KeyError4238 #namespace4239 defaults to nil4240 #strategy_key_component4241 defaults to Gitlab.revision4242 when cache_key_strategy is :revision4243 is expected to eq "95754c794be"4244 when cache_key_strategy is :version4245 is expected to eq ["16.1.0-pre", "6.1.7.2"]4246 when cache_key_strategy is invalid4247 raises KeyError4248 #expire4249 expires the given key from the cache4250 #read4251 reads the given key from the cache4252 returns the cached value when there is data in the cache with the given key4253 returns nil when there is no data in the cache with the given key4254 when the cached value is true4255 parses the cached value4256 when the cached value is false4257 parses the cached value4258 when the cached value is a JSON true value4259 parses the cached value4260 when the cached value is a JSON false value4261 parses the cached value4262 when the cached value is a hash4263 parses the cached value4264 returns nil when klass is nil4265 gracefully handles bad cached entry4266 gracefully handles an empty hash4267 gracefully handles unknown attributes4268 gracefully handles excluded fields from attributes during serialization4269 when the cached value is an array4270 parses the cached value4271 returns an empty array when klass is nil4272 gracefully handles bad cached entry4273 gracefully handles an empty array4274 gracefully handles unknown attributes4275 #write4276 writes value to the cache with the given key4277 writes a string containing a JSON representation of the value to the cache4278 passes options the underlying cache implementation4279 passes options the underlying cache implementation when options is empty4280 passes options the underlying cache implementation when options is nil4281 #fetch4282 requires a block4283 passes options the underlying cache implementation4284 when the given key does not exist in the cache4285 when the result of the block is truthy4286 returns the result of the block4287 caches the value4288 when the result of the block is false4289 returns the result of the block4290 caches the value4291 when the result of the block is nil4292 returns the result of the block4293 caches the value4294 when the given key exists in the cache4295 when the cached value is a hash4296 parses the cached value4297 decodes enums correctly4298 returns the result of the block when 'as' option is nil4299 returns the result of the block when 'as' option is missing4300 when the cached value is an instance of ActiveRecord::Base4301 returns a persisted record when id is set4302 returns a new record when id is nil4303 returns a new record when id is missing4304 gracefully handles bad cached entry4305 gracefully handles an empty hash4306 gracefully handles unknown attributes4307 gracefully handles excluded fields from attributes during serialization4308 when the cached value is a array4309 parses the cached value4310 returns an empty array when 'as' option is nil4311 returns an empty array when 'as' option is not informed4312 when the cached value is true4313 returns the cached value4314 does not execute the block4315 does not write to the cache4316 when the cached value is false4317 returns the cached value4318 does not execute the block4319 does not write to the cache4320 when the cached value is nil4321 returns the result of the block4322 writes the result of the block to the cache4323Mutations::Issues::Update4324 is expected to require graphql authorizations :update_issue4325 #resolve4326 behaves like permission level for issue mutation is correctly verified4327 when the user is not a project member4328 behaves like when the user does not have access to the resource4329 raises an error4330 even if assigned to the issue4331 does not modify issue4332 even if author of the issue4333 does not modify issue4334 when the user is a project member4335 with guest role4336 behaves like when the user does not have access to the resource4337 raises an error4338 even if assigned to the issue4339 does not modify issue4340 even if author of the issue4341 does not modify issue4342 when the user can update the issue4343 when all attributes except timeEstimate are provided4344 updates issue with correct values4345 when iid does not exist4346 raises resource not available error4347 when setting milestone to nil4348 changes the milestone corrrectly4349 when changing state4350 closes issue4351 reopens issue4352 when changing labels4353 adds and removes labels correctly4354 does not add label if label id is nil4355 does not add label if label is not found4356 does not modify labels if label is already present4357 does not modify labels if label is addded and removed in the same request4358 when setting labels with label_ids4359 replaces existing labels with provided ones4360 raises error when label_ids is combined with remove_label_ids4361 raises error when label_ids is combined with add_label_ids4362 when changing type4363 changes the type of the issue4364 when timeEstimate attribute is provided4365 when timeEstimate is invalid4366 raises an argument error and changes are not applied4367 when timeEstimate is 04368 resets the time estimate4369 when timeEstimate is a valid human readable time4370 updates the time estimate4371Ci::PipelinesForMergeRequestFinder4372 #execute4373 when actor has permission to read pipelines in both parent and forked projects4374 returns all pipelines4375 when actor has permission to read pipelines in both parent and forked projects4376 returns all pipelines4377 when actor has permission to read pipelines in the parent project only4378 returns pipelines in parent4379 when actor has permission to read pipelines in the forked project only4380 returns pipelines in fork4381 when actor does not have permission to read pipelines4382 returns nothing4383 when actor is nil4384 returns nothing4385 #all4386 with single merge_request_diffs4387 behaves like returning pipelines with proper ordering4388 returns all pipelines4389 with multiple irrelevant merge_request_diffs4390 behaves like returning pipelines with proper ordering4391 returns all pipelines4392 with unsaved merge request4393 returns pipelines from diff_head_sha4394 when pipelines exist for the branch and merge request4395 returns merge request pipeline first4396 when there are a branch pipeline and a merge request pipeline4397 returns merge request pipelines first4398 when there are multiple merge request pipelines from the same branch4399 returns only related merge request pipelines4400 when detached merge request pipeline is run on head ref of the merge request4401 sets the head ref of the merge request to the pipeline ref4402 includes the detached merge request pipeline even though the ref is custom path4403MergeRequests::GetUrlsService4404 #execute4405 when project is nil4406 behaves like no_merge_request_url4407 returns no URL4408 pushing to default branch4409 behaves like no_merge_request_url4410 returns no URL4411 pushing to project with MRs disabled4412 behaves like no_merge_request_url4413 returns no URL4414 pushing one completely new branch4415 behaves like new_merge_request_link4416 returns url to create new merge request4417 pushing to existing branch but no merge request4418 behaves like new_merge_request_link4419 returns url to create new merge request4420 pushing to deleted branch4421 behaves like no_merge_request_url4422 returns no URL4423 pushing to existing branch and merge request opened4424 behaves like show_merge_request_url4425 returns url to view merge request4426 pushing to existing branch and merge request is reopened4427 behaves like show_merge_request_url4428 returns url to view merge request4429 pushing to existing branch from forked project4430 behaves like show_merge_request_url4431 returns url to view merge request4432 pushing to existing branch and merge request is closed4433 behaves like new_merge_request_link4434 returns url to create new merge request4435 pushing to existing branch and merge request is merged4436 behaves like new_merge_request_link4437 returns url to create new merge request4438 pushing new branch and existing branch (with merge request created) at once4439 returns 2 urls for both creating new and showing merge request4440 when printing_merge_request_link_enabled is false4441 returns empty array4442Gitlab::X509::Signature4443 behaves like signature with type checking4444 signature type checkers4445 method: :gpg?, expected: false4446 is expected to eq false4447 method: :ssh?, expected: false4448 is expected to eq false4449 method: :x509?, expected: true4450 is expected to eq true4451 commit signature4452 verified signature4453 with trusted certificate store4454 behaves like a verified signature4455 returns a verified signature if email does match4456 returns a verified signature if email does match, case-insensitively4457 returns an unverified signature if email does not match4458 returns an unverified signature if email does match and time is wrong4459 returns an unverified signature if certificate is revoked4460 if the email matches but isn't confirmed4461 returns an unverified signature4462 with the certificate defined by OpenSSL::X509::DEFAULT_CERT_FILE4463 behaves like a verified signature4464 returns a verified signature if email does match4465 returns a verified signature if email does match, case-insensitively4466 returns an unverified signature if email does not match4467 returns an unverified signature if email does match and time is wrong4468 returns an unverified signature if certificate is revoked4469 if the email matches but isn't confirmed4470 returns an unverified signature4471 without trusted certificate within store4472 returns an unverified signature4473 invalid signature4474 returns nil4475 invalid commit message4476 returns nil4477 certificate_crl4478 valid crlDistributionPoints4479 creates an issuer4480 valid crlDistributionPoints providing multiple http URIs4481 extracts the first URI4482 email4483 subjectAltName with email, othername4484 extracts email4485 subjectAltName with othername, email4486 extracts email4487 #signed_by_user4488 if email is not assigned to a user, return nil4489 if email is assigned to a user4490 returns user4491 tag signature4492 verified signature4493 with trusted certificate store4494 returns an unverified signature if the email matches but is not confirmed4495 when user email is confirmed4496 returns a verified signature if email does match4497 returns an unverified signature if email does not match4498 returns an unverified signature if email does match and time is wrong4499 returns an unverified signature if certificate is revoked4500 without trusted certificate within store4501 returns an unverified signature4502 invalid signature4503 returns nil4504 invalid message4505 returns nil4506Gitlab::Ci::Badge::Release::Template4507 #key_text4508 defaults to latest release4509 returns custom key text4510 #value_text4511 when a release exists4512 returns the tag of the release4513 no releases exist4514 returns string that latest release is none4515 #key_width4516 returns the default key width4517 returns custom key width4518 #value_width4519 returns the default value width4520 returns custom value width4521 returns VALUE_WIDTH_DEFAULT if the custom value_width supplied is greater than permissible limit4522 returns VALUE_WIDTH_DEFAULT if value_width is not a number4523 #key_color4524 always has the same color4525 #value_color4526 when release exists4527 is blue4528 when release does not exist4529 is red4530Banzai::Filter::ReferenceRedactorFilter4531 ignores non-GFM links4532 skips when the skip_redaction flag is set4533 with data-project4534 valid projects4535 allows permitted Project references4536 invalid projects4537 removes unpermitted references4538 handles invalid references4539 with data-issue4540 allows references for non confidential issues4541 for confidential issues4542 removes references for non project members4543 removes references for project members with guest role4544 allows references for author4545 allows references for assignee4546 allows references for project members4547 for admin4548 when admin mode is enabled4549 allows references4550 when admin mode is disabled4551 removes references4552 when a confidential issue is moved from a public project to a private one4553 removes references for author4554 removes references for assignee4555 allows references for project members4556 for user references4557 with data-group4558 removes unpermitted Group references4559 allows permitted Group references4560 handles invalid Group references4561 with data-user4562 allows any User reference4563Gitlab::Ci::Config::Entry::Variables4564 when entry config value has key-value pairs4565 behaves like valid config4566 #value4567 returns hash with key value strings4568 #errors4569 does not append errors4570 #valid?4571 is valid4572 #value_with_data4573 returns variable with data4574 #value_with_prefill_data4575 returns variable with prefill data4576 with numeric keys and values in the config4577 behaves like valid config4578 #value4579 returns hash with key value strings4580 #errors4581 does not append errors4582 #valid?4583 is valid4584 when key is an array4585 behaves like invalid config4586 #valid?4587 is not valid4588 #errors4589 saves errors4590 when value is a symbol4591 behaves like valid config4592 #value4593 returns hash with key value strings4594 #errors4595 does not append errors4596 #valid?4597 is valid4598 when value is a boolean4599 behaves like invalid config4600 #valid?4601 is not valid4602 #errors4603 saves errors4604 when entry config value has unallowed value key-value pair and value is a string4605 when there is no allowed_value_data metadata4606 behaves like invalid config4607 #valid?4608 is not valid4609 #errors4610 saves errors4611 when metadata has the allowed_value_data key4612 behaves like valid config4613 #value4614 returns hash with key value strings4615 #errors4616 does not append errors4617 #valid?4618 is valid4619 #value_with_data4620 returns variable with data4621 #value_with_prefill_data4622 returns variable with prefill data4623 when entry config value has options4624 when metadata has allowed_value_data4625 behaves like valid config4626 #value4627 returns hash with key value strings4628 #errors4629 does not append errors4630 #valid?4631 is valid4632 #value_with_data4633 returns variable with data4634 #value_with_prefill_data4635 returns variable with prefill data4636 when entry config value has key-value pair and hash4637 behaves like invalid config4638 #valid?4639 is not valid4640 #errors4641 saves errors4642 when metadata has allowed_value_data4643 behaves like valid config4644 #value4645 returns hash with key value strings4646 #errors4647 does not append errors4648 #valid?4649 is valid4650 #value_with_data4651 returns variable with data4652 #value_with_prefill_data4653 returns variable with prefill data4654 when entry value is an array4655 behaves like invalid config4656 #valid?4657 is not valid4658 #errors4659 saves errors4660 when metadata has allowed_value_data4661 when entry value has hash with other key-pairs4662 behaves like invalid config4663 #valid?4664 is not valid4665 #errors4666 saves errors4667 when entry config value has hash without description4668 behaves like valid config4669 #value4670 returns hash with key value strings4671 #errors4672 does not append errors4673 #valid?4674 is valid4675IssuableExportCsvWorker4676 when issuable type is Issue4677 emails a CSV4678 ensures that project_id is passed to issues_finder4679 defines the loggable_arguments4680 removes sort parameter4681 calls the issue export service4682 with params4683 allows symbol access for IssuesFinder4684 when issuable type is MergeRequest4685 emails a CSV4686 calls the MR export service4687 calls the MergeRequest finder4688 behaves like export with selected fields4689 calls the export service with selected fields4690 for type WorkItem4691 emails a CSV4692 calls the work item export service4693 calls the WorkItemsFinder4694 behaves like export with selected fields4695 calls the export service with selected fields4696 when issuable type is User4697 is expected to raise ArgumentError4698Banzai::Filter::SanitizationFilter4699 behaves like default allowlist4700 sanitizes tags that are not allowed4701 sanitizes tag attributes4702 sanitizes javascript in attributes4703 sanitizes mixed-cased javascript in attributes4704 allows whitelisted HTML tags from the user4705 sanitizes `class` attribute on any element4706 sanitizes `id` attribute on any element4707 custom allowlist4708 customizes the allowlist only once4709 customizes the allowlist only once for different instances4710 sanitizes `class` attribute from all elements4711 sanitizes `class` attribute from non-highlight spans4712 allows `text-align` property in `style` attribute on table elements4713 disallows other properties in `style` attribute on table elements4714 disallows `text-align` property in `style` attribute on other elements4715 allows `span` elements4716 allows `abbr` elements4717 disallows the `name` attribute globally, allows on `a`4718 allows `summary` elements4719 allows `details` elements4720 allows `rel=license` in links4721 allows `data-math-style` attribute on `code` and `pre` elements4722 allows the `data-sourcepos` attribute globally4723 behaves like XSS prevention4724 disallows protocol-based JS injection: simple, no spaces4725 disallows protocol-based JS injection: simple, spaces before4726 disallows protocol-based JS injection: simple, spaces after4727 disallows protocol-based JS injection: simple, spaces before and after4728 disallows protocol-based JS injection: preceding colon4729 disallows protocol-based JS injection: UTF-8 encoding4730 disallows protocol-based JS injection: long UTF-8 encoding4731 disallows protocol-based JS injection: long UTF-8 encoding without semicolons4732 disallows protocol-based JS injection: hex encoding4733 disallows protocol-based JS injection: long hex encoding4734 disallows protocol-based JS injection: hex encoding without semicolons4735 disallows protocol-based JS injection: null char4736 disallows protocol-based JS injection: invalid URL char4737 disallows protocol-based JS injection: Unicode4738 disallows protocol-based JS injection: spaces and entities4739 disallows protocol whitespace4740 disallows data links4741 disallows vbscript links4742 behaves like sanitize link4743 removes `rel` attribute from `a` elements4744 disallows invalid URIs4745 allows non-standard anchor schemes4746 allows relative links4747 footnotes4748 allows the footnote attributes4749 allows correct footnote id property on links4750 allows correct footnote id property on li element4751 removes invalid id for footnote links4752 removes invalid id for footnote li4753Gitlab::Chat::Command4754 #try_create_pipeline4755 returns nil when the command is not valid4756 tries to create the pipeline when a command is valid4757 #create_pipeline4758 creates the pipeline4759 creates the chat data for the pipeline4760 stores the chat name ID in the chat data4761 stores the response URL in the chat data4762 creates the environment variables for the pipeline4763Gitlab::MultiCollectionPaginator4764 raises an error for invalid page size4765 combines both collections4766 includes elements second collection if first collection is empty4767 with a full first page4768 knows the total count of the collection4769 fills the first page with elements of the first collection4770 fils the second page with a mixture of the first & second collection4771 fils the last page with elements from the second collection4772Gitlab::GithubImport::Importer::PullRequests::ReviewImporter4773 # order random4774 when the review author cannot be mapped to a gitlab user4775 when the review has no note text4776 when the review is "APPROVED"4777 creates a note for the review with *Approved by by<author>*4778 when the review is "COMMENTED"4779 creates a note for the review with *Commented by<author>*4780 when the review is "CHANGES_REQUESTED"4781 creates a note for the review with *Changes requested by <author>*4782 when original author was deleted in github4783 creates a note for the review without the author information4784 when original author cannot be found on github4785 creates a note for the review with the author username4786 when the submitted_at is not provided4787 creates a note for the review without the author information4788 when the review has a note text4789 when the review is "APPROVED"4790 creates a note for the review with *Approved by by<author>*4791 when the review is "COMMENTED"4792 creates a note for the review with *Commented by<author>*4793 when the review is "CHANGES_REQUESTED"4794 creates a note for the review with *Changes requested by <author>*4795 when the review author can be mapped to a gitlab user4796 when the review has no note text4797 when the review is "APPROVED"4798 creates a note for the review4799 behaves like imports an approval for the Merge Request4800 creates an approval for the Merge Request4801 behaves like imports a reviewer for the Merge Request4802 creates reviewer for the Merge Request4803 when reviewer already exists4804 does not change Merge Request reviewers4805 when because of concurrency an attempt of duplication appeared4806 does not change Merge Request reviewers4807 when the user already approved the merge request4808 does not import second approve and note4809 when the review is "COMMENTED"4810 does not create note for the review4811 behaves like imports a reviewer for the Merge Request4812 creates reviewer for the Merge Request4813 when reviewer already exists4814 does not change Merge Request reviewers4815 when because of concurrency an attempt of duplication appeared4816 does not change Merge Request reviewers4817 when the review is "CHANGES_REQUESTED"4818 does not create a note for the review4819 behaves like imports a reviewer for the Merge Request4820 creates reviewer for the Merge Request4821 when reviewer already exists4822 does not change Merge Request reviewers4823 when because of concurrency an attempt of duplication appeared4824 does not change Merge Request reviewers4825 when the review has a note text4826 when the review is "APPROVED"4827 creates a note for the review4828 behaves like imports an approval for the Merge Request4829 creates an approval for the Merge Request4830 behaves like imports a reviewer for the Merge Request4831 creates reviewer for the Merge Request4832 when reviewer already exists4833 does not change Merge Request reviewers4834 when because of concurrency an attempt of duplication appeared4835 does not change Merge Request reviewers4836 when the review is "COMMENTED"4837 creates a note for the review4838 when the review is "CHANGES_REQUESTED"4839 creates a note for the review4840Banzai::Filter::References::FeatureFlagReferenceFilter4841 requires project context4842 ignores valid references contained inside 'pre' element4843 ignores valid references contained inside 'code' element4844 ignores valid references contained inside 'a' element4845 ignores valid references contained inside 'style' element4846 with internal reference4847 links to a valid reference4848 links with adjacent text4849 ignores invalid feature flag IIDs4850 includes a title attribute4851 escapes the title attribute4852 includes default classes4853 includes a data-project attribute4854 includes a data-feature-flag attribute4855 supports an :only_path context4856 with cross-project / cross-namespace complete reference4857 links to a valid reference4858 produces a valid text in a link4859 produces a valid text4860 ignores invalid feature flag IIDs on the referenced project4861 with cross-project / same-namespace complete reference4862 links to a valid reference4863 produces a valid text in a link4864 produces a valid text4865 ignores invalid feature flag IIDs on the referenced project4866 with cross-project shorthand reference4867 links to a valid reference4868 produces a valid text in a link4869 produces a valid text4870 ignores invalid feature flag IDs on the referenced project4871 with cross-project URL reference4872 links to a valid reference4873 links with adjacent text4874 ignores invalid feature flag IIDs on the referenced project4875 with group context4876 links to a valid reference4877 ignores internal references4878Gitlab::Ci::Reports::TestSuiteComparer4879 #new_failures4880 when head suite has a newly failed test case which does not exist in base4881 returns the failed test case4882 when head suite still has a failed test case which failed in base4883 does not return the failed test case4884 when head suite has a success test case which failed in base4885 does not return the failed test case4886 #existing_failures4887 when head suite has a newly failed test case which does not exist in base4888 returns the failed test case4889 when head suite still has a failed test case which failed in base4890 does not return the failed test case4891 when head suite has a success test case which failed in base4892 does not return the failed test case4893 #resolved_failures4894 when head suite has a newly failed test case which does not exist in base4895 returns the failed test case4896 returns the correct resolved count4897 when head suite still has a failed test case which failed in base4898 does not return the failed test case4899 returns the correct resolved count4900 when head suite has a success test case which failed in base4901 does not return the resolved test case4902 returns the correct resolved count4903 #new_errors4904 when head suite has a new error test case which does not exist in base4905 returns the error test case4906 when head suite still has an error test case which errored in base4907 does not return the error test case4908 when head suite has a success test case which errored in base4909 does not return the error test case4910 #existing_errors4911 when head suite has a new error test case which does not exist in base4912 does not return the error test case4913 when head suite still has an error test case which errored in base4914 returns the error test case4915 when head suite has a success test case which errored in base4916 does not return the error test case4917 #resolved_errors4918 when head suite has a new error test case which does not exist in base4919 does not return the error test case4920 returns the correct resolved count4921 when head suite still has an error test case which errored in base4922 does not return the error test case4923 returns the correct resolved count4924 when head suite has a success test case which errored in base4925 returns the resolved test case4926 returns the correct resolved count4927 #total_count4928 returns the total test counts in head suite4929 #failed_count4930 when there are a new failure and an existing failure4931 returns the correct count4932 when there is a new failure4933 returns the correct count4934 when there is an existing failure4935 returns the correct count4936 #total_status4937 when all test cases in head suite are success4938 returns the total status in head suite4939 when there is a failed test case in head suite4940 returns the total status in head suite as failed4941 when there is an error test case in head suite4942 returns the total status in head suite as failed4943 #limited_tests4944 limits amount of tests returned4945 prefers new over existing and resolved4946 returns 2 of each new category, and 1 of each resolved and existing4947 does not affect the overall count4948 prefers existing over resolved4949 returns 2 of each existing category, and 1 of each resolved4950 does not affect the overall count4951 limits amount of resolved4952 returns 2 of each resolved category4953 does not affect the overall count4954Analytics::CycleAnalytics::Aggregation4955 associations4956 is expected to belong to namespace required: true4957 validations4958 is expected not to validate that :namespace cannot be empty/falsy4959 is expected not to validate that :enabled cannot be empty/falsy4960 validates the array length of incremental_runtimes_in_seconds4961 validates the array length of incremental_processed_records4962 validates the array length of full_runtimes_in_seconds4963 validates the array length of full_processed_records4964 behaves like value stream analytics namespace models4965 when ProjectNamespace is given4966 is valid4967 when Namespace is given4968 fails4969 attribute updater methods4970 #cursor_for4971 returns empty cursors4972 when cursor is not empty4973 returns the cursor values4974 #consistency_check_cursor_for4975 returns empty cursor4976 returns the cursor value for IssueStageEvent4977 returns the cursor value for MergeRequestStageEvent4978 #refresh_last_run4979 updates the run_at column4980 #reset_full_run_cursors4981 resets all full run cursors to nil4982 #set_cursor4983 sets the cursor values for the given mode4984 #set_stats4985 appends stats to the runtime and processed_records attributes4986 #safe_create_for_namespace4987 creates the aggregation record4988 when non top-level group is given4989 creates the aggregation record for the top-level group4990 when the record is already present4991 does nothing4992 when the aggregation was disabled for some reason4993 re-enables the aggregation4994 #load_batch4995 loads records in priority order4996 when loading batch for last_consistency_check_updated_at4997 loads records in priority order4998 #estimated_next_run_at4999 when aggregation was not yet executed for the given group5000 is expected to eq nil5001 when aggregation was already run5002 returns the duration between the previous run timestamp and the earliest last_incremental_run_at5003 when the aggregation has persisted previous runtimes5004 adds the runtime to the estimation5005 when no records are present in the DB5006 returns nil5007 when only one aggregation record present5008 returns the minutes until the next aggregation5009Gitlab::Ci::Config::External::File::Artifact5010 #matching?5011 when params contain artifact location5012 returns true5013 when params does not contain artifact location5014 returns false5015 #valid?5016 when used in non child pipeline context5017 behaves like is invalid5018 sets the expected error5019 when used in child pipeline context5020 when job is not provided5021 behaves like is invalid5022 sets the expected error5023 when job is provided5024 when job does not exist in the parent pipeline5025 behaves like is invalid5026 sets the expected error5027 when job exists in the parent pipeline5028 when job does not have artifacts5029 behaves like is invalid5030 sets the expected error5031 when job has archive artifacts5032 behaves like is invalid5033 sets the expected error5034 when job has artifacts exceeding the max allowed size5035 behaves like is invalid5036 sets the expected error5037 when job has artifacts metadata5038 behaves like is invalid5039 sets the expected error5040 when file is found in metadata5041 when file is empty5042 behaves like is invalid5043 sets the expected error5044 when file is not empty5045 is valid5046 propagates parent_pipeline to nested includes5047 when job is provided as a variable5048 when job does not exist in the parent pipeline5049 behaves like is invalid5050 sets the expected error5051 #metadata5052 is expected to eq {:context_project=>"namespace581/project-853", :context_sha=>nil, :extra=>{:job_name=>nil}, :location=>"generated.yml", :type=>:artifact}5053 when job name includes a masked variable5054 is expected to eq {:context_project=>"namespace582/project-854", :context_sha=>nil, :extra=>{:job_name=>"xxxxxxxxxxxxxxxxxxxxxxx"}, :location=>"generated.yml", :type=>:artifact}5055 #to_hash5056 when interpolation is being used5057 correctly interpolates content5058Files::DeleteService5059 #execute5060 when the file's last commit is earlier than the latest commit for this branch5061 returns a hash with the correct error message and a :error status5062 when the file's last commit sha does match the supplied last_commit_sha5063 behaves like successfully deletes the file5064 returns a hash with the :success status5065 deletes the file5066 uses the commit email5067 when the last_commit_sha is not supplied5068 behaves like successfully deletes the file5069 returns a hash with the :success status5070 deletes the file5071 uses the commit email5072Gitlab::GithubImport::Importer::PullRequestsImporter5073 #parallel?5074 returns true when running in parallel mode5075 returns false when running in sequential mode5076 #execute5077 when running in parallel mode5078 imports pull requests in parallel5079 when running in sequential mode5080 imports pull requests in sequence5081 #sequential_import5082 imports each pull request in sequence5083 #parallel_import5084 imports each note in parallel5085 #each_object_to_import5086 yields every pull request to the supplied block5087 updates the repository if a pull request was updated after the last clone5088 #update_repository5089 updates the repository5090 #update_repository?5091 when the pull request was updated after the last update5092 returns true when the head SHA is not present5093 returns true when the base SHA is not present5094 returns false if both the head and base SHAs are present5095 when the pull request was updated before the last update5096 returns false5097 #commit_exists?5098 returns true when a commit exists5099 returns false when a commit does not exist5100 #id_for_already_imported_cache5101 returns the PR number of the given PR5102SlackIntegration5103 # order random5104 authorized_scope_names5105 accepts assignment to nil5106 accepts assignment to a string5107 accepts assignment to an array of strings5108 accepts assignment to a comma-separated string5109 strips white-space5110 Associations5111 is expected to belong to integration required: false5112 feature_available?5113 without any scopes5114 is always true for :commands5115 is always false for others5116 with enough scopes for notifications5117 only has the correct features5118 with enough scopes for commands5119 only has the correct features5120 with all scopes5121 only has the correct features5122 Scopes5123 #with_bot5124 returns records with bot data5125 #by_team5126 returns records with shared team_id5127 all_features_supported?/upgrade_needed?5128 with enough scopes5129 is expected to be all features supported5130 is expected not to be upgrade needed5131 without chat:write.public5132 is expected not to be all features supported5133 is expected to be upgrade needed5134 without chat:write5135 is expected not to be all features supported5136 is expected to be upgrade needed5137 Validations5138 is expected to validate that :team_id cannot be empty/falsy5139 is expected to validate that :team_name cannot be empty/falsy5140 is expected to validate that :alias cannot be empty/falsy5141 is expected to validate that :user_id cannot be empty/falsy5142 is expected to validate that :integration cannot be empty/falsy5143Banzai::ObjectRenderer5144 #render5145 with cache5146 renders and redacts an Array of objects5147 calls Banzai::ReferenceRedactor to perform redaction5148 retrieves field content using Banzai::Renderer.render_field5149 passes context to PostProcessPipeline5150 without cache5151 renders and redacts an Array of objects5152 calls Banzai::ReferenceRedactor to perform redaction5153 retrieves field content using Banzai::Renderer.cacheless_render_field5154Resolvers::ContainerRepositoriesResolver5155 #resolve5156 with authorized user5157 when the object is a project5158 behaves like returning container repositories5159 is expected to contain exactly #<ContainerRepository id: 1, project_id: 885, name: "test_image_1", created_at: "2023-06-02 06:47:39....deleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>5160 with a named search5161 is expected to contain exactly #<ContainerRepository id: 2, project_id: 885, name: "Foobar", created_at: "2023-06-02 06:47:39.906922...deleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>5162 with a sort argument5163 created_desc5164 is expected to eq [#<ContainerRepository id: 4, project_id: 886, name: "foo", created_at: "2023-06-02 05:47:40.56066143...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5165 updated_asc5166 is expected to eq [#<ContainerRepository id: 4, project_id: 886, name: "foo", created_at: "2023-06-02 05:47:40.56066143...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5167 name_desc5168 is expected to eq [#<ContainerRepository id: 4, project_id: 886, name: "foo", created_at: "2023-06-02 05:47:40.56066143...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5169 created_asc5170 is expected to eq [#<ContainerRepository id: 3, project_id: 886, name: "bar", created_at: "2023-06-01 06:47:40.54955097...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5171 updated_desc5172 is expected to eq [#<ContainerRepository id: 3, project_id: 886, name: "bar", created_at: "2023-06-01 06:47:40.54955097...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5173 name_asc5174 is expected to eq [#<ContainerRepository id: 3, project_id: 886, name: "bar", created_at: "2023-06-01 06:47:40.54955097...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5175 when the object is a group5176 behaves like returning container repositories5177 is expected to contain exactly #<ContainerRepository id: 1, project_id: 885, name: "test_image_1", created_at: "2023-06-02 06:47:39....deleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>5178 with a named search5179 is expected to contain exactly #<ContainerRepository id: 5, project_id: 885, name: "Foobar", created_at: "2023-06-02 06:47:42.031147...deleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>5180 with a sort argument5181 created_desc5182 is expected to eq [#<ContainerRepository id: 7, project_id: 887, name: "foo", created_at: "2023-06-02 05:47:42.68510971...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5183 updated_asc5184 is expected to eq [#<ContainerRepository id: 7, project_id: 887, name: "foo", created_at: "2023-06-02 05:47:42.68510971...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5185 name_desc5186 is expected to eq [#<ContainerRepository id: 7, project_id: 887, name: "foo", created_at: "2023-06-02 05:47:42.68510971...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5187 created_asc5188 is expected to eq [#<ContainerRepository id: 6, project_id: 887, name: "bar", created_at: "2023-06-01 06:47:42.67102196...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5189 updated_desc5190 is expected to eq [#<ContainerRepository id: 6, project_id: 887, name: "bar", created_at: "2023-06-01 06:47:42.67102196...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5191 name_asc5192 is expected to eq [#<ContainerRepository id: 6, project_id: 887, name: "bar", created_at: "2023-06-01 06:47:42.67102196...eleted_tags_count: nil, delete_started_at: nil, status_updated_at: nil, verification_checksum: nil>]5193 when the object is an invalid type5194 is expected to raise Exception with "invalid subject_type"5195 with unauthorized user5196 is expected to equal nil5197PendingTodosFinder5198 #execute5199 returns all pending todos if no params are passed5200 supports retrieving only pending todos for chosen users5201 supports retrieving of todos for a specific project5202 supports retrieving of todos for a specific todo target5203 supports retrieving of todos for a specific target type5204 supports retrieving of todos from a specific author5205 supports retrieving of todos for a specific commit ID5206 supports retrieving of todos for specific discussion5207 supports retrieving of todos for a specific action5208ProjectMemberPresenter5209 #can_resend_invite?5210 when project_member is invited5211 and user can admin_project_member5212 is expected to eq true5213 and user cannot admin_project_member5214 is expected to eq false5215 when project_member is not invited5216 and user can admin_project_member5217 is expected to eq false5218 and user cannot admin_project_member5219 is expected to eq false5220 #last_owner?5221 when member is the holder of the personal namespace5222 is expected to eq true5223 when member is not the holder of the personal namespace5224 is expected to eq false5225 #can_update?5226 when user is NOT attempting to update an Owner5227 when user can update_project_member5228 is expected to eq true5229 when user cannot update_project_member5230 is expected to eq false5231 when user is attempting to update an Owner5232 when user can manage owners5233 is expected to eq true5234 when user cannot manage owners5235 is expected to eq false5236 #can_remove?5237 when user is NOT attempting to remove an Owner5238 when user can destroy_project_member5239 is expected to eq true5240 when user cannot destroy_project_member5241 is expected to eq false5242 when user is attempting to remove an Owner5243 when user can manage owners5244 is expected to eq true5245 when user cannot manage owners5246 is expected to eq false5247 #can_approve?5248 when project_member has request an invite5249 and user can update_project_member5250 is expected to eq true5251 and user cannot update_project_member5252 is expected to eq false5253 when project_member did not request an invite5254 and user can update_project_member5255 is expected to eq false5256 and user cannot update_project_member5257 is expected to eq false5258 valid level roles5259 when user cannot manage owners5260 behaves like #valid_level_roles5261 when no parent member is present5262 returns all permissible roles5263 when parent member is present5264 returns higher roles when a parent member is present5265 when user can manage owners5266 behaves like #valid_level_roles5267 when no parent member is present5268 returns all permissible roles5269 when parent member is present5270 returns higher roles when a parent member is present5271UpdateHeadPipelineForMergeRequestWorker5272 #perform5273 when pipeline exists for the source project and branch5274 updates the head_pipeline_id of the merge_request5275 behaves like an idempotent worker5276 is labeled as idempotent5277 performs multiple times sequentially without raising an exception5278 sets the pipeline as the head pipeline when run multiple times5279 when merge request sha does not equal pipeline sha5280 does not update head pipeline5281 behaves like an idempotent worker5282 is labeled as idempotent5283 performs multiple times sequentially without raising an exception5284 does not update the head_pipeline_id when run multiple times5285 when pipeline does not exist for the source project and branch5286 does not update the head_pipeline_id of the merge_request5287 behaves like an idempotent worker5288 is labeled as idempotent5289 performs multiple times sequentially without raising an exception5290 does not update the head_pipeline_id when run multiple times5291 when a merge request pipeline exists5292 sets the merge request pipeline as the head pipeline5293 behaves like an idempotent worker5294 is labeled as idempotent5295 performs multiple times sequentially without raising an exception5296 sets the merge request pipeline as the head pipeline when run multiple times5297 when branch pipeline exists5298 prioritizes the merge request pipeline as the head pipeline5299 behaves like an idempotent worker5300 is labeled as idempotent5301 performs multiple times sequentially without raising an exception5302 sets the merge request pipeline as the head pipeline when run multiple times5303Gitlab::Ci::Config::Normalizer5304 .normalize_jobs5305 with parallel config as integer5306 does not have original job5307 has parallelized jobs5308 sets job instance in options5309 parallelizes jobs with original config5310 when the job is not parallelized5311 returns the same hash5312 when there is a job with a slash in it5313 properly parallelizes job names5314 behaves like parallel dependencies5315 when job has dependencies on parallelized jobs5316 parallelizes dependencies5317 does not include original job name in RSpec::ExampleGroups::GitlabCiConfigNormalizer::NormalizeJobs::WithParallelConfigAsInteger::BehavesLikeParallelDependencies::WhenJobHasDependenciesOnParallelizedJobs::Anonymous5318 when there are dependencies which are both parallelized and not5319 parallelizes dependencies5320 includes the regular job in dependencies5321 behaves like parallel needs5322 when job has needs on parallelized jobs5323 parallelizes needs5324 when there are dependencies which are both parallelized and not5325 parallelizes dependencies5326 includes the regular job in dependencies5327 with parallel matrix config5328 does not have original job5329 sets job instance in options5330 sets job variables5331 parallelizes jobs with original config5332 has parallelized jobs5333 behaves like parallel dependencies5334 when job has dependencies on parallelized jobs5335 parallelizes dependencies5336 does not include original job name in RSpec::ExampleGroups::GitlabCiConfigNormalizer::NormalizeJobs::WithParallelMatrixConfig::BehavesLikeParallelDependencies::WhenJobHasDependenciesOnParallelizedJobs::Anonymous5337 when there are dependencies which are both parallelized and not5338 parallelizes dependencies5339 includes the regular job in dependencies5340 behaves like parallel needs5341 when job has needs on parallelized jobs5342 parallelizes needs5343 when there are dependencies which are both parallelized and not5344 parallelizes dependencies5345 includes the regular job in dependencies5346 when parallel config does not matches a factory5347 does not alter the job config5348 when jobs config is nil5349 is expected to eq {}5350Users::InProductMarketingEmail5351 associations5352 is expected to belong to user required: false5353 validations5354 is expected to validate that :user cannot be empty/falsy5355 for a track+series email5356 is expected to validate that :track cannot be empty/falsy5357 is expected to validate that :series cannot be empty/falsy5358 is expected to validate that :user_id is case-sensitively unique within the scope of :track and :series, producing a custom validation error on failure5359 for a campaign email5360 is expected to validate that :campaign cannot be empty/falsy5361 is expected not to validate that :track cannot be empty/falsy5362 is expected not to validate that :series cannot be empty/falsy5363 is expected to validate that :user_id is case-sensitively unique within the scope of :campaign, producing a custom validation error on failure5364 is expected to validate that :campaign is ‹"build_ios_app_guide"›5365 when mixing campaign and track+series5366 is not valid5367 .without_track_and_series5368 when given track and series already exists5369 is expected to be empty5370 when track does not exist5371 is expected to eq [#<User id:1075 @user441>]5372 when series does not exist5373 is expected to eq [#<User id:1075 @user441>]5374 when no track or series for a user exists5375 is expected to eq [#<User id:1076 @user442>]5376 .without_campaign5377 when record for campaign already exists5378 is expected to contain exactly #<User id:1078 @user444>5379 when record for campaign does not exist5380 is expected to contain exactly #<User id:1077 @user443> and #<User id:1078 @user444>5381 .for_user_with_track_and_series5382 when record for user with given track and series exists5383 is expected to eq #<Users::InProductMarketingEmail id: 16, user_id: 1079, cta_clicked_at: nil, track: "create", series:...3-06-02 06:48:07.497432814 +0000", updated_at: "2023-06-02 06:48:07.497432814 +0000", campaign: nil>5384 when user is different5385 is expected to be nil5386 when track is different5387 is expected to be nil5388 when series is different5389 is expected to be nil5390 .save_cta_click5391 when there is no record5392 does not error5393 when there is no record for the track and series5394 does not perform an update5395 when there is a record for the track and series5396 saves the cta click date5397 cta_clicked_at is already set5398 does not update5399 .ACTIVE_TRACKS5400 has an entry for every track5401 does not include INACTIVE_TRACK_NAMES5402Resolvers::LabelsResolver5403 is expected to have nullable GraphQL type LabelConnection5404 #resolve5405 with unauthorized user5406 returns no labels5407 with authorized user5408 returns no labels5409 without parent5410 returns no labels5411 association preloading5412 prevents N+1 queries5413 with a parent project5414 include_ancestor_groups: nil, search_term: nil, expected_labels: -> { [label1, label2, subgroup_label1, subgroup_label2] }5415 is expected to contain exactly #<ProjectLabel id:5 group207/group208/project-939~5>, #<ProjectLabel id:6 group207/group208/project-939~6>, #<GroupLabel id:9 ~9>, and #<GroupLabel id:10 ~10>5416 include_ancestor_groups: false, search_term: nil, expected_labels: -> { [label1, label2, subgroup_label1, subgroup_label2] }5417 is expected to contain exactly #<ProjectLabel id:5 group207/group208/project-939~5>, #<ProjectLabel id:6 group207/group208/project-939~6>, #<GroupLabel id:9 ~9>, and #<GroupLabel id:10 ~10>5418 include_ancestor_groups: true, search_term: nil, expected_labels: -> { [label1, label2, group_label1, group_label2, subgroup_label1, subgroup_label2] }5419 is expected to contain exactly #<ProjectLabel id:5 group207/group208/project-939~5>, #<ProjectLabel id:6 group207/group208/project-939~6>, #<GroupLabel id:7 ~7>, #<GroupLabel id:8 ~8>, #<GroupLabel id:9 ~9>, and #<GroupLabel id:10 ~10>5420 include_ancestor_groups: nil, search_term: "new", expected_labels: -> { [label2, subgroup_label2] }5421 is expected to contain exactly #<ProjectLabel id:6 group207/group208/project-939~6> and #<GroupLabel id:10 ~10>5422 include_ancestor_groups: false, search_term: "new", expected_labels: -> { [label2, subgroup_label2] }5423 is expected to contain exactly #<ProjectLabel id:6 group207/group208/project-939~6> and #<GroupLabel id:10 ~10>5424 include_ancestor_groups: true, search_term: "new", expected_labels: -> { [label2, group_label2, subgroup_label2] }5425 is expected to contain exactly #<ProjectLabel id:6 group207/group208/project-939~6>, #<GroupLabel id:8 ~8>, and #<GroupLabel id:10 ~10>5426PrometheusAlert5427 .distinct_projects5428 returns a count of all distinct projects which have an alert5429 operators5430 contains the correct equality operator5431 associations5432 is expected to belong to project required: false5433 is expected to belong to environment required: false5434 is expected to belong to prometheus_metric required: false5435 is expected to have many prometheus_alert_events5436 is expected to have many related_issues5437 is expected to have many alert_management_alerts5438 project validations5439 is expected to validate that :environment cannot be empty/falsy5440 is expected to validate that :project cannot be empty/falsy5441 is expected to validate that :prometheus_metric cannot be empty/falsy5442 is expected to validate that :operator cannot be empty/falsy5443 is expected to validate that :threshold cannot be empty/falsy5444 when environment and metric belongs same project5445 is expected to be valid5446 when environment belongs to different project5447 is expected not to be valid5448 when metric belongs to different project5449 is expected not to be valid5450 when metric is common5451 is expected to be valid5452 runbook validations5453 disallow invalid urls5454 allow valid urls5455 #full_query5456 returns the concatenated query5457 #to_param5458 returns the params of the prometheus alert5459Gitlab::SidekiqLogging::StructuredLogger5460 #call5461 with SIDEKIQ_LOG_ARGUMENTS enabled5462 logs start and end of job5463 logs real job wrapped by active job worker5464 logs an exception in job5465 logs the normalized SQL query for statement timeouts5466 logs the root cause of an Sidekiq::JobRetry::Skip exception in the job5467 logs the root cause of an Sidekiq::JobRetry::Handled exception in the job5468 keeps Sidekiq::JobRetry::Handled exception if the cause does not exist5469 does not modify the job5470 does not modify the wrapped job5471 with SIDEKIQ_LOG_ARGUMENTS disabled5472 logs start and end of job without args5473 logs without created_at and enqueued_at fields5474 with latency5475 logs with scheduling latency5476 with enqueue latency5477 logs with scheduling latency5478 with Gitaly, Rugged, and Redis calls5479 logs with Gitaly and Rugged timing data5480 when the job performs database queries5481 when load balancing is enabled5482 logs the database time5483 prevents database time from leaking to the next job5484 when the job uses load balancing capabilities5485 logs the database chosen5486 when there is extra metadata set for the done log5487 logs it in the done log5488 when instrumentation data is not loaded5489 does not raise exception5490 when the job payload is compressed5491 logs it in the done log5492 when the job is deferred5493 logs start and end of job with deferred job_status5494 #add_time_keys!5495 update payload correctly5496Gitlab::SlashCommands::IssueComment5497 #execute5498 when the issue exists5499 when project is private5500 when the user is not a member of the project5501 does not allow the user to comment5502 when the user is not a member of the project5503 when the discussion is locked in the issue5504 does not allow the user to comment5505 when the user can comment on the issue5506 when comment body exists5507 creates a new comment5508 a new comment has a correct body5509 when comment body does not exist5510 does not create a new comment5511 displays the errors5512 when the issue does not exist5513 returns not found5514 .match5515 when a command has an issue ID5516 when command has a comment body5517 matches an issue ID5518 matches an note body5519 when a command has a reference prefix for issue ID5520 matches an issue ID5521 when a command does not have an issue ID5522 does not match5523Gitlab::Ci::Ansi2json::Line5524 #<<5525 appends new data to the current segment5526 #style5527 when style is passed to the initializer5528 returns the same style5529 when style is not passed to the initializer5530 returns the default style5531 #update_style5532 sets the style5533 #add_section5534 appends a new section to the list5535 #set_section_options5536 sets the current section's options5537 #set_as_section_header5538 change the section_header to true5539 #set_section_duration5540 duration: nil, result: "00:00"5541 is expected to eq "00:00"5542 duration: "string", result: "00:00"5543 is expected to eq "00:00"5544 duration: 0 seconds, result: "00:00"5545 is expected to eq "00:00"5546 duration: 7 seconds, result: "00:07"5547 is expected to eq "00:07"5548 duration: 75, result: "01:15"5549 is expected to eq "01:15"5550 duration: 1 minute and 15 seconds, result: "01:15"5551 is expected to eq "01:15"5552 duration: 13 hours, 14 minutes, and 15 seconds, result: "13:14:15"5553 is expected to eq "13:14:15"5554 duration: 1 day, 13 hours, 14 minutes, and 15 seconds, result: "37:14:15"5555 is expected to eq "37:14:15"5556 duration: 1.7976931348623157e+308, result: "8765:00:00"5557 is expected to eq "8765:00:00"5558 duration: 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, result: "8765:00:00"5559 is expected to eq "8765:00:00"5560 #flush_current_segment!5561 when current segment is not empty5562 adds the segment to the list5563 updates the current segment pointer propagating the style5564 when current segment is empty5565 does not add any segments to the list5566 does not change the current segment5567 #to_h5568 when sections are present5569 when section header is set5570 serializes the attributes set5571 when section duration is set5572 serializes the attributes set5573 when there are no sections5574 serializes the attributes set5575JiraConnectSubscriptions::CreateService5576 remote user does not have access5577 behaves like a failed execution5578 does not create a subscription5579 returns an error status5580 remote user cannot be retrieved5581 behaves like a failed execution5582 does not create a subscription5583 returns an error status5584 when user does have access5585 creates a subscription5586 returns success5587 namespace has projects5588 starts workers to sync projects in batches with delay5589 when path is invalid5590 behaves like a failed execution5591 does not create a subscription5592 returns an error status5593 when user does not have access5594 behaves like a failed execution5595 does not create a subscription5596 returns an error status5597Gitlab::Ci::Pipeline::Chain::Limit::RateLimit5598 when the limit is exceeded5599 does not persist the pipeline5600 breaks the chain5601 creates a log entry5602 with child pipelines5603 does not break the chain5604 does not invalidate the pipeline5605 does not log anything5606 when saving incompleted pipelines5607 does not persist the pipeline5608 breaks the chain5609 when ci_enforce_throttle_pipelines_creation is disabled5610 does not break the chain5611 does not invalidate the pipeline5612 creates a log entry5613 when ci_enforce_throttle_pipelines_creation_override is enabled5614 does not break the chain5615 does not invalidate the pipeline5616 creates a log entry5617 when the limit is not exceeded5618 does not break the chain5619 does not invalidate the pipeline5620 does not log anything5621BroadcastMessagesHelper5622 # order random5623 #current_broadcast_banner_messages5624 user access level targeted messages5625 when in a project page5626 is expected to eq #<BroadcastMessage id: 2, message: "MyText", starts_at: "2023-06-02 06:48:33.158115291 +0000", ends_a..._path: nil, broadcast_type: "banner", dismissable: nil, target_access_levels: [30], theme: "indigo">5627 when in a group page5628 is expected to eq #<BroadcastMessage id: 2, message: "MyText", starts_at: "2023-06-02 06:48:33.158115291 +0000", ends_a..._path: nil, broadcast_type: "banner", dismissable: nil, target_access_levels: [30], theme: "indigo">5629 when not in a project, group, or sub-group page5630 is expected to be nil5631 #broadcast_message_data5632 returns the expected message data attributes5633 has the correct iso formatted date5634 #broadcast_message5635 returns nil when no current message5636 includes the current message5637 #broadcast_message_status5638 returns Active5639 returns Expired5640 returns Pending5641 #admin_broadcast_messages_data5642 returns the expected messages data attributes5643 has the correct iso formatted date5644 #current_broadcast_notification_message5645 with available broadcast notification messages5646 is expected to eq #<BroadcastMessage id: 4, message: "MyText", starts_at: "2023-06-02 06:48:34.697486672 +0000", ends_a...h: nil, broadcast_type: "notification", dismissable: nil, target_access_levels: [], theme: "indigo">5647 when last broadcast message is hidden5648 is expected to eq #<BroadcastMessage id: 5, message: "MyText", starts_at: "2023-06-01 06:48:34.768137515 +0000", ends_a...h: nil, broadcast_type: "notification", dismissable: nil, target_access_levels: [], theme: "indigo">5649 without broadcast notification messages5650 is expected to be nil5651 user access level targeted messages5652 when in a project page5653 is expected to eq #<BroadcastMessage id: 7, message: "MyText", starts_at: "2023-06-02 06:48:34.867576204 +0000", ends_a... nil, broadcast_type: "notification", dismissable: nil, target_access_levels: [30], theme: "indigo">5654 when in a group page5655 is expected to eq #<BroadcastMessage id: 7, message: "MyText", starts_at: "2023-06-02 06:48:34.867576204 +0000", ends_a... nil, broadcast_type: "notification", dismissable: nil, target_access_levels: [30], theme: "indigo">5656 when not in a project, group, or sub-group page5657 is expected to be nil5658RuboCop::Cop::Graphql::Descriptions5659 # order random5660 autocorrecting "this" to "the"5661 autocorrects if "this" is found5662 does not autocorrect if "this" is not found5663 autocorrects a heredoc if "this" is found5664 does not autocorrect a heredoc if "this" is not found5665 with fields5666 adds an offense when there is no description5667 adds an offense when description does not end in a period5668 adds an offense when description begins with "A"5669 adds an offense when description begins with "The"5670 adds an offense when description contains the demonstrative "this"5671 does not add an offense when a word does not contain the substring "this"5672 does not add an offense when description is correct5673 does not add an offense when there is a resolver5674 with arguments5675 adds an offense when there is no description5676 adds an offense when description does not end in a period5677 adds an offense when description begins with "A"5678 adds an offense when description begins with "The"5679 adds an offense when description contains the demonstrative "this"5680 does not add an offense when a word does not contain the substring "this"5681 does not add an offense when description is correct5682 with enum values5683 adds an offense when there is no description5684 adds an offense when description does not end in a period5685 adds an offense when description begins with "The"5686 adds an offense when description begins with "A"5687 adds an offense when description contains the demonstrative "this"5688 does not add an offense when a word does not contain the substring "this"5689 does not add an offense when description is correct (defined using `description:`)5690 does not add an offense when description is correct (defined as a second argument)5691 autocorrecting periods in descriptions5692 autocorrects missing periods5693 does not autocorrect if periods exist5694 autocorrects a heredoc5695 does not autocorrect a heredoc if periods exist5696Integrations::SlackSlashCommands5697 behaves like Integrations::BaseSlashCommands5698 Associations5699 is expected to respond to #token5700 default values5701 is expected to eq :chat5702 #valid_token?5703 when the token is empty5704 is false5705 when there is a token5706 accepts equal tokens5707 #trigger5708 no token is passed5709 returns nil5710 with a token passed5711 no user can be found5712 when no url can be generated5713 responds with the authorize url5714 when an auth url can be generated5715 generates the url5716 when the user is authenticated5717 triggers the command5718 when user is blocked5719 behaves like blocks command execution5720 is expected to match "you do not have access to the GitLab project"5721 when user is deactivated5722 behaves like blocks command execution5723 is expected to match "your account has been deactivated by your administrator"5724 #trigger5725 when an auth url is generated5726 uses slack compatible links5727Gitlab::AlertManagement::Payload::ManagedPrometheus5728 behaves like subclass has expected api5729 defines all public methods in the base class5730 #metric_id5731 is expected to be nil5732 with gitlab_alert_id5733 is expected to eq 125734 #gitlab_prometheus_alert_id5735 is expected to be nil5736 with gitlab_alert_id5737 is expected to eq 125738 #gitlab_alert5739 without alert info in payload5740 is expected to be nil5741 with metric id in payload5742 without matching alert5743 is expected to be nil5744 with matching alert5745 is expected to eq #<PrometheusAlert id: 4, created_at: "2023-06-02 06:48:41.433043904 +0000", updated_at: "2023-06-02 0...1.0, operator: "gt", environment_id: 51, project_id: 940, prometheus_metric_id: 4, runbook_url: nil>5746 when unclear which alert applies5747 is expected to be nil5748 with alert id5749 without matching alert5750 is expected to be nil5751 with matching alerts5752 is expected to eq #<PrometheusAlert id: 6, created_at: "2023-06-02 06:48:41.718344475 +0000", updated_at: "2023-06-02 0...1.0, operator: "gt", environment_id: 53, project_id: 940, prometheus_metric_id: 5, runbook_url: nil>5753 #full_query5754 is expected to be nil5755 with gitlab alert5756 is expected to eq "avg(metric) > 1.0"5757 with sufficient fallback info5758 is expected to eq "vector(1)"5759 #environment5760 with gitlab alert5761 is expected to eq #<Environment id: 55, project_id: 940, name: "environment40", created_at: "2023-06-02 06:48:41.972088...auto_stop_at: nil, auto_delete_at: nil, tier: "other", merge_request_id: nil, cluster_agent_id: nil>5762 with sufficient fallback info5763 is expected to eq #<Environment id: 56, project_id: 940, name: "production", created_at: "2023-06-02 06:48:42.064054039...stop_at: nil, auto_delete_at: nil, tier: "production", merge_request_id: nil, cluster_agent_id: nil>5764 #metrics_dashboard_url5765 without alert5766 is expected to be nil5767 with gitlab alert5768 is expected to eq "http://localhost/namespace694/project-966/prometheus/alerts/8/metrics_dashboard?embedded=true&end=2018-03-12T09%3A36%3A00Z&environment_id=57&start=2018-03-12T08%3A36%3A00Z"5769Uploads::Fog5770 #available?5771 when object storage is enabled5772 is expected to be truthy5773 when object storage is disabled5774[fog][WARNING] Your region 'eu-central-1' does not match the default region 'us-east-1'5775 is expected to be falsy5776 model with uploads5777 Fog provider acceptance tests5778 with AWS provider5779 behaves like Fog provider5780 #get_object5781[fog][WARNING] Your region 'eu-central-1' does not match the default region 'us-east-1'5782 returns a Hash with a body5783 #delete_object5784[fog][WARNING] Your region 'eu-central-1' does not match the default region 'us-east-1'5785 returns true5786 with Google provider5787 behaves like Fog provider5788 #get_object5789 returns a Hash with a body5790 #delete_object5791 returns true5792 with AzureRM provider5793 behaves like Fog provider5794 #get_object5795 returns a Hash with a body5796 #delete_object5797 returns true5798 #keys5799[fog][WARNING] Your region 'eu-central-1' does not match the default region 'us-east-1'5800 returns keys5801 #delete_keys5802[fog][WARNING] Your region 'eu-central-1' does not match the default region 'us-east-1'5803 deletes multiple data5804 with bucket prefix5805[fog][WARNING] Your region 'eu-central-1' does not match the default region 'us-east-1'5806 deletes multiple data5807 when one of keys is missing5808[fog][WARNING] Your region 'eu-central-1' does not match the default region 'us-east-1'5809 deletes only existing keys5810Metrics::Dashboard::GrafanaMetricEmbedService5811 .valid_params?5812 is expected to be truthy5813 missing embedded5814 is expected to be falsey5815 not embedded5816 is expected to be falsey5817 undefined grafana_url5818 is expected to be falsey5819 .from_cache5820 initializes an instance of GrafanaMetricEmbedService5821 with unknown users5822 when anonymous5823 current_user_id: nil5824 sets current_user as nil5825 current_user_id: ""5826 sets current_user as nil5827 when invalid5828 raise record not found error5829 #get_dashboard5830 without caching5831 behaves like raises error for users with insufficient permissions5832 when the user does not have sufficient access5833 behaves like misconfigured dashboard service response5834 returns an appropriate message and status code5835 when the user is anonymous5836 behaves like misconfigured dashboard service response5837 returns an appropriate message and status code5838 without a grafana integration5839 behaves like misconfigured dashboard service response5840 returns an appropriate message and status code5841 when grafana cannot be reached5842 behaves like misconfigured dashboard service response5843 returns an appropriate message and status code5844 when panelId is missing5845 behaves like misconfigured dashboard service response5846 returns an appropriate message and status code5847 when uid is missing5848 behaves like misconfigured dashboard service response5849 returns an appropriate message and status code5850 when the dashboard response contains misconfigured json5851 behaves like misconfigured dashboard service response5852 returns an appropriate message and status code5853 when the datasource response contains misconfigured json5854 behaves like misconfigured dashboard service response5855 returns an appropriate message and status code5856 when the embed was created successfully5857 when project is private and user is member5858 behaves like valid embedded dashboard service response5859 behaves like valid dashboard service response for schema5860 returns a json representation of the dashboard5861 when project is public and user is anonymous5862 behaves like valid embedded dashboard service response5863 behaves like valid dashboard service response for schema5864 returns a json representation of the dashboard5865 with caching5866 when value not present in cache5867 returns nil5868 when value present in cache5869 returns cached value5870Metrics::Dashboard::GrafanaUidParser5871 with a Grafana-defined uid5872 is expected to eq "XDaNK6amz"5873 with a user-defined uid5874 is expected to eq "pgbouncer-main"5875 when a uid is not present5876 is expected to equal nil5877 when the url starts with unrelated content5878 is expected to equal nil5879Metrics::Dashboard::DatasourceNameParser5880 is expected to eq "GitLab Omnibus"5881 when the panelId is missing from the url5882 is expected to equal nil5883 when the panel is not present5884 is expected to equal nil5885 when the dashboard panel does not have a datasource5886 is expected to equal nil5887ManualInverseAssociation5888 .manual_inverse_association5889 when the relation exists5890 loads the relation5891 does not perform extra queries after loading5892 allows reloading the relation5893 when the relation does not return a value5894 does not try to set an inverse5895Gitlab::Database::PostgresHll::BatchDistinctCounter5896 unit test for different counting parameters5897 #execute5898 builds hll buckets5899 defaults batch size to 100005900 when a transaction is open5901 raises an error5902 disallowed configurations5903 raises WRONG_CONFIGURATION_ERROR if start is bigger than finish5904 raises WRONG_CONFIGURATION_ERROR if data volume exceeds upper limit5905 raises WRONG_CONFIGURATION_ERROR if batch size is less than min required5906IssueLink5907 behaves like issuable link5908 Associations5909 is expected to belong to source class_name => Issue required: false5910 is expected to belong to target class_name => Issue required: false5911 Validation5912 is expected to validate that :source cannot be empty/falsy5913 is expected to validate that :target cannot be empty/falsy5914 is expected to validate that :source is case-sensitively unique within the scope of :target_id, producing a custom validation error on failure5915 is not valid if an opposite link already exists5916 when it relates to itself5917 when target is nil5918 does not invalidate object with self relation error5919 when source and target are present5920 invalidates object5921 scopes5922 .for_source_or_target5923 returns only links where id is either source or target id5924 .link_type5925 is expected to define :link_type as an enum backed by an integer with values ‹{relates_to: 0, blocks: 1}›5926 provides the "related" as default link_type5927 .issuable_type5928 is expected to eq :issue5929 Scopes5930 .for_source_issue5931 includes linked issues for source issue5932 .for_target_issue5933 includes linked issues for target issue5934ci/status/_badge5935 when rendering status for build5936 when user has ability to see details5937 has link to build details page5938 when user do not have ability to see build details5939 contains build status text5940 does not contain links5941 when rendering status for external job5942 when user has ability to see commit status details5943 status has external target url5944 contains valid commit status text5945 has link to external status page5946 status do not have external target url5947 contains valid commit status text5948 has link to external status page5949MergeRequests::CreateApprovalEventWorker5950 calls MergeRequests::CreateApprovalEventService5951 behaves like subscribes to event5952 consumes the published event5953 behaves like an idempotent worker5954 is labeled as idempotent5955 performs multiple times sequentially without raising an exception5956 when the user does not exist5957 behaves like when object does not exist5958 does not call MergeRequests::CreateApprovalEventService5959 when the merge request does not exist5960 behaves like when object does not exist5961 does not call MergeRequests::CreateApprovalEventService5962Gitlab::Database::AsyncIndexes::MigrationHelpers5963 #unprepare_async_index5964 destroys the record5965 when an explicit name is given5966 destroys the record5967 when the async index table does not exist5968 does not raise an error5969 #unprepare_async_index_by_name5970 destroys the record5971 when the async index table does not exist5972 does not raise an error5973 #prepare_async_index5974 creates the record for the async index5975 when an explicit name is given5976 creates the record with the given name5977 when the index already exists5978 does not create the record5979 when the record already exists5980 does attempt to create the record5981 updates definition if changed5982 does not update definition if not changed5983 when the async index table does not exist5984 does not raise an error5985 #prepare_async_index_from_sql5986 requires ddl mode5987 when the given index is invalid5988 raises a RuntimeError5989 when the given index is valid5990 when the index algorithm is not concurrent5991 raises a RuntimeError5992 when the index algorithm is concurrent5993 when the statement tries to create an index for non-existing table5994 raises a RuntimeError5995 when the statement tries to create an index for an existing table5996 when the async index creation is not available5997 does not raise an error5998 when the async index creation is available5999 when there is already an index with the given name6000 does not create the async index record6001 when there is no index with the given name6002 creates the async index record6003 sets the async index attributes correctly6004 #prepare_async_index_removal6005 creates the record for the async index removal6006 when the index does not exist6007 does not create the record6008 when the record already exists6009 does attempt to create the record6010Gitlab::Ci::Badge::Coverage::Template6011 behaves like a badge template6012 #key_text6013 says coverage by default6014 when custom key_text is defined6015 returns custom value6016 when its size is larger than the max allowed value6017 returns default value6018 #key_width6019 is fixed by default6020 when custom key_width is defined6021 returns custom value6022 when it is larger than the max allowed value6023 returns default value6024 #value_text6025 when coverage is known6026 returns coverage percentage6027 when coverage is known to many digits6028 returns rounded coverage percentage6029 when coverage is unknown6030 returns string that says coverage is unknown6031 #value_width6032 when coverage is known6033 is narrower when coverage is known6034 when coverage is unknown6035 is wider when coverage is unknown to fit text6036 #key_color6037 always has the same color6038 #value_color6039 when coverage is good6040 is green6041 when coverage is acceptable6042 is green-orange6043 when coverage is medium6044 is orange-yellow6045 when coverage is low6046 is red6047 when coverage is unknown6048 is grey6049 #width6050 when coverage is known6051 returns the key width plus value width6052 when coverage is unknown6053 returns key width plus wider value width6054Labels::CreateService6055 #execute6056 in a project6057 with color in hex-code6058 creates a label6059 with color in allowed name6060 creates a label6061 with color in up-case allowed name6062 creates a label6063 with color surrounded by spaces6064 creates a label6065 with unknown color6066 doesn't create a label6067 with no color6068 doesn't create a label6069 in a group6070 with color in hex-code6071 creates a label6072 with color in allowed name6073 creates a label6074 with color in up-case allowed name6075 creates a label6076 with color surrounded by spaces6077 creates a label6078 with unknown color6079 doesn't create a label6080 with no color6081 doesn't create a label6082 in admin area6083 with color in hex-code6084 creates a label6085 with color in allowed name6086 creates a label6087 with color in up-case allowed name6088 creates a label6089 with color surrounded by spaces6090 creates a label6091 with unknown color6092 doesn't create a label6093 with no color6094 doesn't create a label6095BulkImports::Common::Pipelines::MilestonesPipeline6096 group milestone6097 behaves like bulk_imports milestones pipeline6098 #run6099 imports milestones into destination6100 #load6101 when milestone is not persisted6102 saves the milestone6103 when milestone is missing6104 returns6105 project milestone6106 behaves like bulk_imports milestones pipeline6107 imports events6108 #run6109 imports milestones into destination6110 #load6111 when milestone is not persisted6112 saves the milestone6113 when milestone is missing6114 returns6115MergeRequests::CloseIssueWorker6116 #perform6117 calls the close issue service6118 when the project does not exist6119 behaves like when object does not exist6120 does not call the close issue service6121 when the user does not exist6122 behaves like when object does not exist6123 does not call the close issue service6124 when the issue does not exist6125 behaves like when object does not exist6126 does not call the close issue service6127 when the merge request does not exist6128 behaves like when object does not exist6129 does not call the close issue service6130Snippets::RepositoryStorageMove6131 behaves like handles repository moves6132 associations6133 is expected to belong to container required: false6134 validations6135 is expected to validate that :container cannot be empty/falsy6136 is expected to validate that :state cannot be empty/falsy6137 is expected to validate that :source_storage_name cannot be empty/falsy6138 is expected to validate that :destination_storage_name cannot be empty/falsy6139 source_storage_name inclusion6140 does not allow repository storages that don't match a label in the configuration6141 destination_storage_name inclusion6142 does not allow repository storages that don't match a label in the configuration6143 container repository read-only6144 does not allow the container to be read-only on create6145 defaults6146 destination_storage_name6147 can pick new storage6148 state transitions6149 when in the default state6150 and transits to scheduled6151 triggers the corresponding repository storage worker6152 when the transition fails6153 does not trigger the corresponding repository storage worker and adds an error6154 and transits to started6155 does not allow the transition6156 when started6157 and transits to replicated6158 marks the container as writable6159 updates the updated_at column of the container6160 and transits to failed6161 marks the container as writable6162ServiceDesk::CustomEmailVerifications::UpdateService6163 # order random6164 #execute6165 exits early6166 when feature flag :service_desk_custom_email is disabled6167 exits early6168 when verification exists6169 when we do not have a verification email6170 behaves like a failing verification process6171 refuses to verify and sends result emails6172 when already verified6173 behaves like an early exit from the verification process6174 exits early6175 when we already have an error6176 behaves like an early exit from the verification process6177 exits early6178 when we have a verification email6179 verifies and sends result emails6180 and verification tokens do not match6181 behaves like a failing verification process6182 refuses to verify and sends result emails6183 and from address does not match with custom email6184 behaves like a failing verification process6185 refuses to verify and sends result emails6186 and timeframe for receiving the email is over6187 behaves like a failing verification process6188 refuses to verify and sends result emails6189#<GitlabSettings::Settings:0x00007f6f340472c0>6190 omniauth6191 defaults to enabled6192 .load_dynamic_cron_schedules!6193 generates a valid cron schedule6194 .build_ci_component_fqdn6195 host: "acme.com", port: 9090, relative_url: "/gitlab", result: "acme.com:9090/gitlab/"6196 is expected to eq "acme.com:9090/gitlab/"6197 host: "acme.com", port: 443, relative_url: "/gitlab", result: "acme.com/gitlab/"6198 is expected to eq "acme.com/gitlab/"6199 host: "acme.com", port: 443, relative_url: "", result: "acme.com/"6200 is expected to eq "acme.com/"6201 host: "acme.com", port: 9090, relative_url: "", result: "acme.com:9090/"6202 is expected to eq "acme.com:9090/"6203 host: "test", port: 9090, relative_url: "", result: "test:9090/"6204 is expected to eq "test:9090/"6205 .attr_encrypted_db_key_base_truncated6206 is a string with maximum 32 bytes size6207 .attr_encrypted_db_key_base_126208 when db key base secret is less than 12 bytes6209 expands db key base secret to 12 bytes6210 when key has multiple multi-byte UTF chars exceeding 12 bytes6211 does not use more than 32 bytes6212 .attr_encrypted_db_key_base_326213 when db key base secret is less than 32 bytes6214 expands db key base secret to 32 bytes6215 when db key base secret is 32 bytes6216 returns original value6217 when db key base contains multi-byte UTF character6218 does not use more than 32 bytes6219 when db key base multi-byte UTF chars exceeding 32 bytes6220 does not use more than 32 bytes6221 .cron_for_service_ping6222 returns correct crontab for some manually calculated example6223 returns min, hour, day in the valid range6224 .encrypted6225 defaults to using the encrypted_settings_key_base for the key6226 returns empty encrypted config when a key has not been set6227 .microsoft_graph_mailer6228 defaults6229 .repositories6230 sets up storage settings6231 .build_sidekiq_routing_rules6232 input_rules: nil, result: [["*", "default"]]6233 is expected to eq [["*", "default"]]6234 input_rules: [], result: [["*", "default"]]6235 is expected to eq [["*", "default"]]6236 input_rules: [["name=foobar", "foobar"]], result: [["name=foobar", "foobar"]]6237 is expected to eq [["name=foobar", "foobar"]]6238Ml::ExperimentTracking::AssociateMlCandidateToPackageWorker6239 # order random6240 #handles_event?6241 package_name: "ml_experiment_1234", package_type: "generic", handles_event: true6242 is expected to eq true6243 package_name: "ml_experiment_1234", package_type: "maven", handles_event: false6244 is expected to eq false6245 package_name: "1234", package_type: "generic", handles_event: false6246 is expected to eq false6247 package_name: "ml_experiment_", package_type: "generic", handles_event: false6248 is expected to eq false6249 package_name: "blah", package_type: "generic", handles_event: false6250 is expected to eq false6251 .handle_event6252 behaves like subscribes to event6253 consumes the published event6254 behaves like an idempotent worker6255 is labeled as idempotent6256 performs multiple times sequentially without raising an exception6257 when package name matches ml_experiment_{id}6258 when candidate with iid exists6259 associates candidate to package6260 when no candidate with iid exists6261 does not associate candidate6262 when candidate with iid exists but in a different project6263 does not associate candidate6264 when package is deleted before event is called6265 does not associate candidate6266Ci::CompareCodequalityReportsService6267 #execute6268 when head pipeline has a codequality report6269 returns status and data6270 when base and head pipelines have codequality reports6271 returns status and data6272Gitlab::Database::LoadBalancing::ServiceDiscovery::Sampler6273 # order random6274 #sample6275 samples max_replica_pools addresses6276 samples random ports across all hosts6277 returns the same answer for the same input when called multiple times6278 gives a consistent answer regardless of input ordering6279 samples fairly across all hosts6280 when input is an empty array6281 returns an empty array6282 when there are less replicas than max_replica_pools6283 returns the same addresses6284 when max_replica_pools is nil6285 returns the same addresses6286ImportFailure6287 Scopes6288 returns failures with external_identifiers6289 returns failures for the given correlation ID6290 returns hard failures for the given correlation ID6291 orders hard failures by newest first6292 Associations6293 is expected to belong to project required: false6294 is expected to belong to group required: false6295 is expected to belong to user required: false6296 Validations6297 has project6298 is expected to validate that :group is empty/falsy6299 is expected to validate that :user is empty/falsy6300 has group6301 is expected to validate that :project is empty/falsy6302 is expected to validate that :user is empty/falsy6303 has user6304 is expected to validate that :project is empty/falsy6305 is expected to validate that :group is empty/falsy6306 #external_identifiers6307 is expected to allow :external_identifiers to be ‹{note_id: 234, noteable_id: 345, noteable_type: "MergeRequest"}›6308 is expected not to allow :external_identifiers to be ‹nil›6309 is expected not to allow :external_identifiers to be ‹{ids: [123]}›6310 allows up to 3 fields6311Gitlab::SlashCommands::IssueClose6312 #execute6313 when the user does not have permission6314 does not allow the user to close the issue6315 the issue exists6316 closes and returns the issue6317 when its reference is given6318 closes and returns the issue6319 the issue does not exist6320 returns not found6321 when the issue is already closed6322 shows the issue6323 .match6324 matches the iid6325 accepts a reference6326Gitlab::Checks::ContainerMoved6327 .fetch_message6328 with a redirect message queue6329 returns the redirect message6330 deletes the redirect message from redis6331 with a message in the legacy key6332 returns and deletes the legacy message6333 with no redirect message queue6334 returns nil6335 #add_message6336 queues a redirect message6337 when user is nil6338 handles anonymous clones6339 #message6340 with project6341 behaves like errors per protocol6342 when protocol is http6343 behaves like returns redirect message6344 is expected to eq "Project 'foo/bar' was moved to 'user516/project-1042'.\n\nPlease update your Git remote:\n\n git remote set-url origin http://localhost/user516/project-1042.git\n"6345 when protocol is ssh6346 behaves like returns redirect message6347 is expected to eq "Project 'foo/bar' was moved to 'user516/project-1042'.\n\nPlease update your Git remote:\n\n git remote set-url origin git@localhost:user516/project-1042.git\n"6348 with wiki6349 behaves like errors per protocol6350 when protocol is http6351 behaves like returns redirect message6352 is expected to eq "Project wiki 'foo/bar' was moved to 'user516/project-1042.wiki'.\n\nPlease update your Git remote:\n\n git remote set-url origin http://localhost/user516/project-1042.wiki.git\n"6353 when protocol is ssh6354 behaves like returns redirect message6355 is expected to eq "Project wiki 'foo/bar' was moved to 'user516/project-1042.wiki'.\n\nPlease update your Git remote:\n\n git remote set-url origin git@localhost:user516/project-1042.wiki.git\n"6356 with project snippet6357 behaves like errors per protocol6358 when protocol is http6359 behaves like returns redirect message6360 is expected to eq "Project snippet 'foo/bar' was moved to 'user516/project-1042/snippets/38'.\n\nPlease update your Git remote:\n\n git remote set-url origin http://localhost/user516/project-1042/snippets/38.git\n"6361 when protocol is ssh6362 behaves like returns redirect message6363 is expected to eq "Project snippet 'foo/bar' was moved to 'user516/project-1042/snippets/38'.\n\nPlease update your Git remote:\n\n git remote set-url origin git@localhost:user516/project-1042/snippets/38.git\n"6364 with personal snippet6365 behaves like errors per protocol6366 when protocol is http6367 behaves like returns redirect message6368 is expected to eq "Personal snippet 'foo/bar' was moved to 'snippets/39'.\n\nPlease update your Git remote:\n\n git remote set-url origin http://localhost/snippets/39.git\n"6369 when protocol is ssh6370 behaves like returns redirect message6371 is expected to eq "Personal snippet 'foo/bar' was moved to 'snippets/39'.\n\nPlease update your Git remote:\n\n git remote set-url origin git@localhost:snippets/39.git\n"6372Gitlab::Chat::Responder::Slack6373 #send_response6374 sends a response back to Slack6375 #success6376 returns the output for a successful build6377 limits the output to a fixed size6378 does not send a response if the output is empty6379 #failure6380 returns the output for a failed build6381 #scheduled_output6382 returns the output for a scheduled build6383Projects::ImportExport::ProjectExportPresenter6384 #description6385 override_description not provided6386 keeps original description6387 override_description provided6388 overrides description6389 #as_json6390 override_description not provided6391 keeps original description6392 override_description provided6393 overrides description6394 #protected_branches6395 returns the project exported protected branches6396 #project_members6397 does not export group members if it has no permission6398 does not export group members as maintainer6399 exports group members as group owner6400 as admin6401 when admin mode is enabled6402 exports group members as admin6403 exports group members as project members6404 when admin mode is disabled6405 does not export group members6406Gitlab::Ci::Status::Processable::WaitingForResource6407 fabricates status with correct details6408 when resource is retained by a build6409 fabricates status with correct details6410 #illustration6411 is expected to include :image, :size, and :title6412 .matches?6413 when processable is waiting for resource6414 is a correct match6415 when processable is not waiting for resource6416 does not match6417RuboCop::Cop::RedisQueueUsage6418 # order random6419 registers offence for any invocation of Gitlab::Redis::Queues methods6420 registers offence for using Gitlab::Redis::Queues as parameter in method calls6421 when assigning Gitlab::Redis::Queues as a part of a hash6422 registers offence for variable assignments6423 registers offence for constant assignments6424 registers offence for constant assignments while invoking function6425 registers offence for constant assignments while invoking multiple functions6426 when assigning Gitlab::Redis::Queues as a part of an array6427 registers offence for variable assignments6428 registers offence for constant assignments6429 registers offence for constant assignments while invoking function6430 registers offence for constant assignments while invoking multiple functions6431 when assigning Gitlab::Redis::Queues as a variable6432 registers offence for any variable assignment6433 registers offence for constant assignment6434Gitlab::Spamcheck::Result6435 # order random6436 #initialize6437 verdict_value: 0, expected: "allow", verdict_evaluated: true, verdict_score: 0.016438 returns expected verdict6439 returns expected evaluated?6440 returns expected score6441 verdict_value: 1, expected: "conditional_allow", verdict_evaluated: true, verdict_score: 0.56442 returns expected verdict6443 returns expected evaluated?6444 returns expected score6445 verdict_value: 2, expected: "disallow", verdict_evaluated: true, verdict_score: 0.756446 returns expected verdict6447 returns expected evaluated?6448 returns expected score6449 verdict_value: 3, expected: "block", verdict_evaluated: true, verdict_score: 0.996450 returns expected verdict6451 returns expected evaluated?6452 returns expected score6453 verdict_value: 4, expected: "noop", verdict_evaluated: false, verdict_score: 0.06454 returns expected verdict6455 returns expected evaluated?6456 returns expected score6457Gitlab::Git::Push6458 #branch_name6459 when it is a branch push6460 returns branch name6461 when it is a tag push6462 returns nil6463 #branch_push?6464 when pushing a branch ref6465 is expected to be branch push6466 when it is a tag push6467 is expected not to be branch push6468 #branch_updated?6469 when it is a branch push with correct old and new revisions6470 is expected to be branch updated6471 when it is not a branch push6472 is expected not to be branch updated6473 when old revision is blank6474 is expected not to be branch updated6475 when it is not a branch push6476 is expected not to be branch updated6477 when oldrev is nil6478 is expected not to be branch updated6479 #force_push?6480 when old revision is an ancestor of the new revision6481 is expected not to be force push6482 when old revision is not an ancestor of the new revision6483 is expected to be force push6484 when called mulitiple times6485 does not make make multiple calls to the force push check6486 #branch_added?6487 when old revision is defined6488 is expected not to be branch added6489 when old revision is not defined6490 is expected to be branch added6491 #branch_removed?6492 when new revision is defined6493 is expected not to be branch removed6494 when new revision is not defined6495 is expected to be branch removed6496 #modified_paths6497 when a push is a branch update6498 returns modified paths6499 when a push is not a branch update6500 raises an error6501 #oldrev6502 when a valid oldrev is provided6503 returns oldrev6504 when a nil valud is provided6505 returns blank SHA6506 #newrev6507 when valid newrev is provided6508 returns newrev6509 when a nil valud is provided6510 returns blank SHA6511RepositoryCleanupWorker6512 #perform6513 executes the cleanup service and sends a success notification6514 raises an error if the project cannot be found6515 raises an error if the user cannot be found6516 #sidekiq_retries_exhausted6517 does not send a failure notification for a RecordNotFound error6518 sends a failure notification6519 cleans up the attempt6520SearchServicePresenter6521 #search_objects6522 objects do not respond to eager_load6523 users scope6524 does not eager load anything6525 #show_results_status?6526 with_count: true, show_snippets: true, show_sort_dropdown: true, result: true6527 is expected to eq true6528 with_count: false, show_snippets: true, show_sort_dropdown: false, result: true6529 is expected to eq true6530 with_count: false, show_snippets: false, show_sort_dropdown: true, result: true6531 is expected to eq true6532 with_count: false, show_snippets: false, show_sort_dropdown: false, result: false6533 is expected to eq false6534 #advanced_search_enabled?6535 is expected to eq false6536Gitlab::DoorkeeperSecretStoring::Secret::Pbkdf2Sha5126537 # order random6538 .secret_matches?6539 match by hashing the input if the stored value is hashed6540 SALT6541 is empty6542 .transform_secret6543 generates a PBKDF2+SHA512 hashed value in the correct format6544 STRETCHES6545 is 20_0006546X509IssuerCrlCheckWorker6547 #perform6548 valid crl6549 changes certificate status for revoked certificates6550 invalid crl6551 does not change certificate status6552 not found crl6553 does not change certificate status6554 unreachable crl6555 does not change certificate status6556Gitlab::Kas::Client6557 #initialize6558 kas is not enabled6559 raises a configuration error6560 internal url is not set6561 raises a configuration error6562 gRPC calls6563 #get_connected_agents6564 is expected to eq [#<Double (anonymous)>]6565 #list_agent_config_files6566 is expected to eq [#<Double (anonymous)>]6567 #send_git_push_event6568 is expected to eq #<Double Gitlab::Agent::Notifications::Rpc::GitPushEventResponse>6569 with grpcs6570 uses a ChannelCredentials object with the correct certificates6571Ci::GenerateCodequalityMrDiffReportService6572 #execute6573 when head pipeline has codequality mr diff report6574 returns status and data6575 when head pipeline does not have a codequality mr diff report6576 returns status and error message6577 when head pipeline has codequality mr diff report and no merge request associated6578 returns status and error message6579Gitlab::DataBuilder::WikiPage6580 .build6581 is expected to be a kind of Hash6582 is expected to eq "wiki_page"6583 is expected to eq {:avatar_url=>"https://www.gravatar.com/avatar/ece2f1e10f0bed61ad4846b8bd065f7b?s=80&d=identicon", :email=>"[REDACTED]", :id=>1305, :name=>"Sidney Jones1436", :username=>"user558"}6584 is expected to eq {:avatar_url=>nil, :ci_config_path=>nil, :default_branch=>"master", :description=>nil, :git_http_url=...798/project-1071.git", :visibility_level=>0, :web_url=>"http://localhost/namespace798/project-1071"}6585 is expected to eq {:default_branch=>"master", :git_http_url=>"http://localhost/namespace798/project-1071.wiki.git", :gi...amespace798/project-1071.wiki", :web_url=>"http://localhost/namespace798/project-1071/-/wikis/home"}6586 is expected to include {:slug => "Page-98", :title => "Page 98", :content => "Content for wiki page", :format => :markdown, :message => nil, "content" => "Content for wiki page"}6587 is expected to include {:url => "http://localhost/namespace798/project-1071/-/wikis/Page-98"}6588 is expected to include {:action => "create"}6589 is expected to include {:diff_url => "http://localhost/namespace798/project-1071/-/wikis/Page-98/diff?version_id=bdd40bf2efe82e572b30a27cfc27ee14e6826e6d"}6590Gitlab::DependencyLinker::ComposerJsonLinker6591 .support?6592 supports composer.json6593 does not support other files6594 #link6595 does not link the module name6596 links the homepage6597 links the repository URL6598 links the license6599 links dependencies6600 does not link core dependencies6601Projects::TriggeredHooks6602 executes hooks by scope6603 applies branch filters, when they match6604 applies branch filters, when they do not match6605Mutations::Issues::SetLocked6606 is expected to require graphql authorizations :update_issue6607 #resolve6608 behaves like permission level for issue mutation is correctly verified6609 when the user is not a project member6610 behaves like when the user does not have access to the resource6611 raises an error6612 even if assigned to the issue6613 does not modify issue6614 even if author of the issue6615 does not modify issue6616 when the user is a project member6617 with guest role6618 behaves like when the user does not have access to the resource6619 raises an error6620 even if assigned to the issue6621 does not modify issue6622 even if author of the issue6623 does not modify issue6624 when the user can update the issue6625 returns the issue as discussion locked6626 when passing locked as false6627 unlocks the discussion6628gitlab:gitaly namespace rake task6629 clone6630 no dir given6631 aborts and display a help message6632 no storage path given6633 aborts and display a help message6634 when an underlying Git command fail6635 aborts and display a help message6636 checkout or clone6637 calls checkout_or_clone_version with the right arguments6638 install6639 gmake/make6640 gmake is available6641 calls gmake in the gitaly directory6642 when gmake fails6643 aborts process6644 gmake is not available6645 calls make in the gitaly directory6646Packages::SemVer6647 #parse6648 behaves like #parse with a valid semver6649 with 1.0.06650 returns v1.0.0 with prefix6651 returns 1.0.0 without prefix6652 behaves like #parse with a valid semver6653 with 1.0.0-pre6654 returns v1.0.0-pre with prefix6655 returns 1.0.0-pre without prefix6656 behaves like #parse with a valid semver6657 with 1.0.0+build6658 returns v1.0.0+build with prefix6659 returns 1.0.0+build without prefix6660 behaves like #parse with a valid semver6661 with 1.0.0-pre+build6662 returns v1.0.0-pre+build with prefix6663 returns 1.0.0-pre+build without prefix6664 behaves like #parse with an invalid semver6665 with 01.0.06666 returns nil with prefix6667 returns nil without prefix6668 behaves like #parse with an invalid semver6669 with 0.01.06670 returns nil with prefix6671 returns nil without prefix6672 behaves like #parse with an invalid semver6673 with 0.0.016674 returns nil with prefix6675 returns nil without prefix6676 behaves like #parse with an invalid semver6677 with 1.0.0asdf6678 returns nil with prefix6679 returns nil without prefix6680Resolvers::Ci::JobsResolver6681 #resolve6682 when none of the optional params are given6683 returns all of the pipeline's jobs6684 when security_report_types is present6685 returns the pipeline's jobs with the given security report types6686 when a job has tags6687 returns jobs with tags when applicable6688 when a job is manual6689 returns jobs with when set to 'manual'6690 when filtering by job kind6691 returns jobs with that type6692Puma6693{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"Puma starting in cluster mode..."}6694{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Puma version: 6.3.0 (ruby 3.0.6-p216) (\"Mugi No Toki Itaru\")"}6695{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Min threads: 1"}6696{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Max threads: 4"}6697{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Environment: test"}6698{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Master PID: 22316"}6699{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Workers: 1"}6700{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Restarts: (✔) hot (✖) phased"}6701{"timestamp":"2023-06-02T06:50:41.522Z","pid":22316,"message":"* Preloading application"}6702{"timestamp":"2023-06-02T06:50:41.534Z","pid":22316,"message":"* Listening on unix:///builds/gitlab-org/gitlab/tmp/tests/puma.socket"}6703{"timestamp":"2023-06-02T06:50:41.534Z","pid":22316,"message":"Use Ctrl-C to stop"}6704{"timestamp":"2023-06-02T06:50:41.534Z","pid":22316,"message":"! WARNING: Detected running cluster mode with 1 worker."}6705{"timestamp":"2023-06-02T06:50:41.534Z","pid":22316,"message":"! Running Puma in cluster mode with a single worker is often a misconfiguration."}6706{"timestamp":"2023-06-02T06:50:41.534Z","pid":22316,"message":"! Consider running Puma in single-mode (workers = 0) in order to reduce memory overhead."}6707{"timestamp":"2023-06-02T06:50:41.534Z","pid":22316,"message":"! Set the `silence_single_worker_warning` option to silence this warning message."}6708{"timestamp":"2023-06-02T06:50:41.537Z","pid":22316,"message":"- Worker 0 (PID: 22317) booted in 0.0s, phase: 0"}6709{"timestamp":"2023-06-02T06:50:42.032Z","pid":22316,"message":"- Worker 0 (PID: 22324) booted in 0.0s, phase: 0"}6710 has a worker that self-terminates on signal SIGQUIT6711{"timestamp":"2023-06-02T06:50:42.860Z","pid":22316,"message":"- Worker 0 (PID: 22331) booted in 0.0s, phase: 0"}6712 has a worker that self-terminates on signal SIGTERM6713{"timestamp":"2023-06-02T06:50:43.900Z","pid":22316,"message":"- Worker 0 (PID: 22338) booted in 0.0s, phase: 0"}6714 has a worker that self-terminates on signal SIGKILL6715{"timestamp":"2023-06-02T06:50:43.904Z","pid":22316,"message":"=== puma shutdown: 2023-06-02 06:50:43 +0000 ==="}6716{"timestamp":"2023-06-02T06:50:43.905Z","pid":22316,"message":"- Goodbye!"}6717{"timestamp":"2023-06-02T06:50:43.905Z","pid":22316,"message":"- Gracefully shutting down workers..."}6718Limitable6719 is expected to eq "test_classes"6720 with scoped limit6721 is expected to eq :project6722 triggers scoped validations6723 with custom relation and feature flags6724 limit_feature_flag: nil, limit_feature_flag_value: nil, limit_feature_flag_for_override: nil, limit_feature_flag_override_value: nil, expect_limit_applied?: true6725 acts according to the feature flag settings6726 limit_feature_flag: :some_feature_flag, limit_feature_flag_value: false, limit_feature_flag_for_override: nil, limit_feature_flag_override_value: nil, expect_limit_applied?: false6727DEPRECATION WARNING: Invalid Feature Flag some_feature_flag stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6728 acts according to the feature flag settings6729 limit_feature_flag: :some_feature_flag, limit_feature_flag_value: true, limit_feature_flag_for_override: nil, limit_feature_flag_override_value: nil, expect_limit_applied?: true6730DEPRECATION WARNING: Invalid Feature Flag some_feature_flag stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6731 acts according to the feature flag settings6732 limit_feature_flag: :some_feature_flag, limit_feature_flag_value: true, limit_feature_flag_for_override: :some_feature_flag_disable, limit_feature_flag_override_value: false, expect_limit_applied?: true6733DEPRECATION WARNING: Invalid Feature Flag some_feature_flag stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6734DEPRECATION WARNING: Invalid Feature Flag some_feature_flag_disable stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6735 acts according to the feature flag settings6736 limit_feature_flag: :some_feature_flag, limit_feature_flag_value: false, limit_feature_flag_for_override: :some_feature_flag_disable, limit_feature_flag_override_value: false, expect_limit_applied?: false6737DEPRECATION WARNING: Invalid Feature Flag some_feature_flag stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6738DEPRECATION WARNING: Invalid Feature Flag some_feature_flag_disable stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6739 acts according to the feature flag settings6740 limit_feature_flag: :some_feature_flag, limit_feature_flag_value: false, limit_feature_flag_for_override: :some_feature_flag_disable, limit_feature_flag_override_value: true, expect_limit_applied?: false6741DEPRECATION WARNING: Invalid Feature Flag some_feature_flag stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6742DEPRECATION WARNING: Invalid Feature Flag some_feature_flag_disable stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6743 acts according to the feature flag settings6744 limit_feature_flag: :some_feature_flag, limit_feature_flag_value: true, limit_feature_flag_for_override: :some_feature_flag_disable, limit_feature_flag_override_value: true, expect_limit_applied?: false6745DEPRECATION WARNING: Invalid Feature Flag some_feature_flag stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6746DEPRECATION WARNING: Invalid Feature Flag some_feature_flag_disable stubbed (called from each at /builds/gitlab-org/gitlab/spec/support/helpers/stub_feature_flags.rb:39)6747 acts according to the feature flag settings6748 with global limit6749 is expected to eq :limitable_global_scope6750 triggers scoped validations6751Gitlab::Database::SchemaValidation::Database6752 # order random6753 when having indexes6754 #fetch_index_by_name6755 returns nil when schema object does not exists6756 returns the schema object by name6757 #index_exists?6758 returns true when schema object exists6759 returns false when schema object does not exists6760 #indexes6761 returns all the schema objects6762 when having triggers6763 #fetch_trigger_by_name6764 returns nil when schema object does not exists6765 returns the schema object by name6766 #trigger_exists?6767 returns true when schema object exists6768 returns false when schema object does not exists6769 #triggers6770 returns all the schema objects6771 when having tables6772 #fetch_table_by_name6773 returns nil when schema object does not exists6774 returns the schema object by name6775 #table_exists?6776 returns true when schema object exists6777 returns false when schema object does not exists6778 #tables6779 returns all the schema objects6780Gitlab::SlashCommands::Presenters::Deploy6781 #present6782 is expected to have key :text6783 is expected to have key :response_type6784 is expected to have key :status6785 is expected not to have key :attachments6786 messages the channel of the deploy6787 #action_not_found6788 is expected to have key :text6789 is expected to have key :response_type6790 is expected to have key :status6791 is expected not to have key :attachments6792 tells the user there is no action6793Ci::PipelineSchedulesFinder6794 #execute6795 when the scope is nil6796 selects all pipeline schedules6797 when the id is nil6798 selects all pipeline schedules6799 when the id is a single pipeline schedule6800 selects one pipeline schedule6801 when multiple ids are provided6802 selects multiple pipeline schedules6803 when multiple ids are provided and a scope is set6804 selects one pipeline schedule6805 when the scope is active6806 selects only active pipelines6807 when the scope is inactve6808 selects only inactive pipelines6809Ci::GenerateTerraformReportsService6810 #execute6811 when head pipeline has terraform reports6812 returns status and data6813 when head pipeline has corrupted terraform reports6814 returns a report with error messages6815 when head pipeline is corrupted6816 returns status and error message6817Gitlab::Ci::ProjectConfig::Repository6818 # order random6819 #internal_include_prepended?6820 is expected to eq true6821 #content6822 when file is in repository6823 is expected to eq "---\ninclude:\n- local: \".gitlab-ci.yml\"\n"6824 when file is not in repository6825 is expected to be nil6826 when Gitaly raises error6827 is expected to be nil6828 #source6829 is expected to eq :repository_source6830BulkImports::Projects::Graphql::GetSnippetRepositoryQuery6831 has a valid query6832 returns snippet httpUrlToRepo6833 returns snippet createdAt6834 returns snippet title6835 .variables6836 queries project based on source_full_path and pagination6837 .data_path6838 .data_path returns data path6839 .page_info_path6840 .page_info_path returns pagination information path6841DiffsMetadataEntity6842 as json6843 contain only required attributes6844 diff_files6845 serializes diff files metadata using DiffFileMetadataEntity6846 when there are conflicts6847 serializes diff files with conflicts6848Gitlab::RepositorySizeChecker6849 #enabled?6850 when enabled6851 returns true6852 when limit is zero6853 returns false6854 #changes_will_exceed_size_limit?6855 returns true when changes go over6856 returns false when changes do not go over6857 #above_size_limit?6858 returns false when not over the limit6859 when size is above the limit6860 returns true6861 #exceeded_size6862 when no change size provided6863 when current size is below the limit6864 returns zero6865 when current size is equal to the limit6866 returns zero6867 when current size is over the limit6868 returns a positive number6869 when a change size is provided6870 when change size will be over the limit6871 returns a positive number6872 when change size will be at the limit6873 returns zero6874 when change size will be under the limit6875 returns zero6876 #additional_repo_storage_available?6877 returns false6878X509CertificateCredentialsValidator6879 is not valid when the certificate is not valid6880 is not valid without a certificate6881 when a valid certificate is passed6882 does not track an error for the certificate6883 adds an error when not passing a correct private key6884 adds an error when private key does not match certificate6885 has no error when the private key is correct6886 when using a passphrase6887 is valid with the correct data6888 adds an error when the passphrase is wrong6889Gitlab::Ci::Status::Build::FailedUnmetPrerequisites6890 #illustration6891 is expected to include :image, :size, :title, and :content6892 .matches?6893 when build has not failed6894 is expected to be falsey6895 when build has failed6896 with unmet prerequisites6897 is expected to be truthy6898 with a different error6899 is expected to be falsey6900Clusters::Agents::AuthorizeProxyUserService6901 # order random6902 returns forbidden when user has no access to any project6903 when user is member of an authorized project6904 authorizes developers6905 does not authorize reporters6906 when user is member of an authorized group6907 authorizes developers6908 does not authorize reporters6909Gitlab::Ci::Badge::Coverage::Report6910 #entity6911 describes a coverage6912 #metadata6913 returns correct metadata6914 #template6915 returns correct template6916 #status6917 with no job specified6918 returns the most recent successful pipeline coverage value6919 and no successful pipelines6920 returns nil6921 with a blank job name6922 returns the latest successful pipeline coverage value6923 with an unmatching job name specified6924 returns nil6925 with a matching job name specified6926 returns the pipeline coverage value6927 with a more recent running pipeline6928 returns the running pipeline coverage value6929 with a more recent failed pipeline6930 returns the failed pipeline coverage value6931NotifyHelper6932 merge_request_reference_link6933 returns link to merge request with the text reference6934 issue_reference_link6935 returns link to issue with the text reference6936 #invited_to_description6937 truncates long descriptions6938 source: #<Project id: namespace1/project-1>>, description: /Projects are/6939 is expected to match /Projects are/6940 source: #<Group id: @group1>, description: /Groups assemble/6941 is expected to match /Groups assemble/6942 source: #<Project id: namespace2/project-2>>, description: "_description_"6943 is expected to match "_description_"6944 source: #<Group id: @group2>, description: "_description_"6945 is expected to match "_description_"6946 #merge_request_hash_param6947 returns MR approved description6948Gitlab::Changelog::Release6949 #to_markdown6950 when there are no entries6951 includes a notice about the lack of entries6952 when all data is present6953 includes all data6954 when no merge request is present6955 doesn't include a merge request link6956 when the author is not a contributor6957 doesn't include the author6958 when the author should always be credited6959 includes the author6960 when a category has no entries6961 isn't included in the output6962 when template parser raises an error6963 raises a Changelog error6964 #header_start_position6965 returns a regular expression for finding the start of a release section6966Ci::CreatePipelineService6967 #execute6968 when source is a dangling build6969 parameter config content6970 creates a pipeline6971 creates builds with the correct names6972 creates stages with the correct names6973 sets the correct config source6974Gitlab::Ci::Config::Entry::PullPolicy6975 #value6976 when config value is nil6977 is expected to be nil6978 when retry value is an empty array6979 is expected to eq nil6980 when retry value is string6981 is expected to eq ["always"]6982 when retry value is array6983 is expected to eq ["always", "if-not-present"]6984 validation6985 when retry value is nil6986 is expected to eq false6987 when retry value is an empty array6988 is expected to eq false6989 when retry value is a hash6990 is expected to eq false6991 when retry value is string6992 is expected to eq true6993 when it is an invalid policy6994 is expected to eq false6995 when it is an empty string6996 is expected to eq false6997 when retry value is array6998 is expected to eq true6999 when config contains an invalid policy7000 is expected to eq false7001Sidebars::Admin::Menus::DeployKeysMenu7002 # order random7003 behaves like Admin menu7004 renders the correct link7005 renders the correct title7006 renders the correct icon7007 renders the separator if needed7008 #render?7009 when user is admin7010 renders7011 when user is not admin7012 does not render7013 when user is not logged in7014 does not render7015 behaves like Admin menu without sub menus7016 does not contain any sub menu(s)7017 defines correct active route7018API::Helpers::MergeRequestsHelpers7019 #handle_merge_request_errors!7020 when merge request is valid7021 returns nil7022 when merge request is invalid7023 responds to a project_access error with unprocessable_entity7024 responds to a branch_conflict error with unprocessable_entity7025 responds to a validate_fork error with unprocessable_entity7026 responds to a base error with unprocessable_entity7027 responds to a validate_branches error with conflict7028 responds with bad request7029BulkImports::Groups::Loaders::GroupLoader7030 #load7031 when path is missing7032 raises an error7033 when destination namespace is not a group7034 raises an error7035 when there are other group errors7036 raises an error with those errors7037 when user can create group7038 when there is no parent group7039 calls Group Create Service to create a new group7040 when there is parent group7041 calls Group Create Service to create a new group7042 when user cannot create group7043 when there is no parent group7044 does not create new group7045 when there is parent group7046 does not create new group7047Gitlab::GithubImport::Importer::ProtectedBranchesImporter7048 # order random7049 #sequential_import7050 imports each protected branch in sequence7051 #importer_class7052 is expected to eq Gitlab::GithubImport::Importer::ProtectedBranchImporter7053 #id_for_already_imported_cache7054 returns the ID of the given protected branch7055 #object_type7056 is expected to eq :protected_branch7057 #each_object_to_import7058 imports each protected branch page by page7059 when protected branch is already processed7060 doesn't process this branch7061 #parallel?7062 when running in parallel mode7063 is expected to be parallel7064 when running in sequential mode7065 is expected not to be parallel7066 #representation_class7067 is expected to eq Gitlab::GithubImport::Representation::ProtectedBranch7068 #execute7069 when running in parallel mode7070 imports protected branches in parallel7071 when running in sequential mode7072 imports protected branches in sequence7073 #parallel_import7074 imports each protected branch in parallel7075 #collection_method7076 is expected to eq :protected_branches7077 #collection_options7078 returns an empty Hash7079 #sidekiq_worker_class7080 is expected to eq Gitlab::GithubImport::ImportProtectedBranchWorker7081Clusters::AgentTokenPolicy7082 rules7083 when reporter7084 is expected to be disallowed :admin_cluster7085 is expected to be disallowed :read_cluster7086 when developer7087 is expected to be disallowed :admin_cluster7088 is expected to be allowed :read_cluster7089 when maintainer7090 is expected to be allowed :admin_cluster7091 is expected to be allowed :read_cluster7092StorageHelper7093 #storage_counter7094 formats bytes to one decimal place7095 does not add decimals for sizes < 1 MB7096 does not add decimals for zeroes7097 uses commas as thousands separator7098 #storage_counters_details7099 works on ProjectStatistics7100 works on Namespace.with_statistics7101Metrics::UsersStarredDashboards::DeleteService7102 #execute7103 without dashboard_path7104 does not scope user starred dashboards by dashboard path7105 with dashboard_path7106 does scope user starred dashboards by dashboard path7107PagesDomains::CreateAcmeOrderService7108 saves order to database before requesting validation7109 generates and saves private key7110 properly saves order attributes7111 properly saves challenge attributes7112admin/application_settings/_ci_cd7113 limits7114 has fields for CI/CD limits7115 does not display the plan name when there is only one plan7116 with multiple plans7117 displays the plan name when there is more than one plan7118Snippets::ScheduleBulkRepositoryShardMovesWorker7119 behaves like schedules bulk repository shard moves7120 #perform7121 is labeled as idempotent7122 performs multiple times sequentially without raising an exception7123 schedules container repository storage moves7124Gitlab::Ci::Pipeline::Chain::Limit::ActiveJobs7125 # order random7126 when active jobs limit is exceeded7127 fails the pipeline with an error7128 logs the failure7129 breaks the chain7130 when active jobs limit not enabled7131 behaves like successful step7132 doest not fail the pipeline and does not interrupt the chain7133 when active jobs limit is not exceeded7134 behaves like successful step7135 doest not fail the pipeline and does not interrupt the chain7136Mutations::CustomEmoji::Destroy7137 field tests7138 is expected to have graphql arguments :id7139 is expected to have graphql field :custom_emoji7140 #resolve7141 when the user7142 has no permissions7143 behaves like does not delete custom emoji7144 raises exception7145 when the user is developer and not the owner of custom emoji7146 behaves like does not delete custom emoji7147 raises exception7148 when user7149 is maintainer7150 behaves like deletes custom emoji7151 returns deleted custom emoji7152 is owner7153 behaves like deletes custom emoji7154 returns deleted custom emoji7155 is developer and creator of the emoji7156 behaves like deletes custom emoji7157 returns deleted custom emoji7158Gitlab::Ci::Parsers::Security::SecretDetection7159 #parse!7160 when parsing valid reports7161 report_format: :secret_detection7162 parses all identifiers and findings7163 generates expected location7164 generates expected metadata_version7165 when parsing an empty report7166 is expected to be empty7167Onboarding::ProgressWorker#perform7168 # order random7169 behaves like records an onboarding progress action7170 is expected to receive execute({:action=>:git_pull}) 1 time7171 is labeled as idempotent7172 performs multiple times sequentially without raising an exception7173 behaves like does not record an onboarding progress action7174 is expected not to receive new(*(any args)) 0 times7175 behaves like does not record an onboarding progress action7176 is expected not to receive new(*(any args)) 0 times7177groups/group_members/index7178 when user can invite members for the group7179 renders as expected7180 when user can not invite members for the group7181 renders as expected7182 when @banned is nil7183 calls group_members_app_data with { banned: [] }7184Sidebars::Projects::Panel7185 has a scope menu7186 Confluence menu item7187 when integration is present and active7188 confluence only7189 contains Confluence menu item7190 does not contain Wiki menu item7191 shimo only7192 contains Shimo menu item7193 confluence & shimo7194 contains Confluence menu item, not Shimo7195 when integration is not present7196 does not contain Confluence menu item7197 contains Wiki menu item7198RuboCop::Cop::Migration::AddLimitToTextColumns7199 # order random7200 when in migration7201 when text columns are defined without a limit7202 registers an offense7203 when text columns are defined with a limit7204 registers no offense7205 when text array columns are defined without a limit7206 registers no offense7207 when the limit is defined for a same name attribute but different table7208 registers an offense7209 when text columns are used for encryption7210 registers no offenses7211 on down7212 registers no offense7213 when outside of migration7214 registers no offense7215Gitlab::BitbucketServerImport::ParallelImporter7216 # order random7217 .track_start_import7218 tracks the start of import7219 #execute7220 schedules the importing of the repository7221 sets the JID in Redis7222 .async?7223 returns true7224Banzai::Filter::BroadcastMessagePlaceholdersFilter7225 when current user is set7226 replaces placeholder in text7227 is expected to eq "Email: helloworld@example.com"7228 replaces placeholder when they are in a link7229 is expected to eq "<a href=\"http://example.com?email=helloworld%40example.com\">link</a>"7230 replaces placeholder when they are in an escaped link7231 is expected to eq "<a href=\"http://example.com?name=GitLab+Tanunki+%3A%29\">link</a>"7232 works with empty text7233 is expected to eq " "7234 replaces multiple placeholders in a given text7235 is expected to eq "helloworld@example.com GitLab Tanunki :)"7236 available placeholders7237 replaces the email of the user7238 is expected to eq "helloworld@example.com"7239 replaces the name of the user7240 is expected to eq "GitLab Tanunki :)"7241 replaces the ID of the user7242 is expected to eq "1388"7243 replaces the username of the user7244 is expected to eq "user598"7245 replaces the instance_id7246 is expected to eq "123"7247 when there is no current user set7248 replaces placeholder with empty string7249 is expected to eq "Email: "7250Gitlab::Ci::Input::Arguments::Options7251 # order random7252 returns an error if user-provided value is not allowlisted7253 returns an error if specification is not correct7254 returns a user-provided value if it is an allowed one7255 returns an empty value if it is allowlisted7256 returns an error if specification is using a hash7257 .matches?7258 matches specs with options configuration7259 does not match specs different configuration keyword7260SafeZip::ExtractParams7261 #extract_path7262 is expected to eq "/tmp/safe-zip20230602-325-5yf4it"7263 #matching_target_directory7264 path: "/public/index.html", result: "/public/"7265 is expected to eq "/tmp/safe-zip20230602-325-j1hddq/public/"7266 path: "/non/existing/path", result: nil7267 is expected to eq nil7268 path: "/public", result: nil7269 is expected to eq nil7270 path: "/folder/with/index.html", result: nil7271 is expected to eq nil7272 #target_directories7273 starts with target_path7274 ends with / for all paths7275 #directories_wildcard7276 adds * for all paths7277 #matching_target_file7278 path: "/public/index.html", result: true7279 is expected to eq true7280 path: "/non/existing/path", result: false7281 is expected to eq false7282 path: "/public/", result: false7283 is expected to eq false7284 path: "/folder/with/index.html", result: false7285 is expected to eq false7286 when directories and files are empty7287 is invalid7288Projects::RecordTargetPlatformsService#execute7289 when project is an XCode project7290 creates a new setting record for the project7291 returns array of detected target platforms7292 when a project has an existing setting record7293 when target platforms changed7294 updates7295 is expected to contain exactly "ios" and "osx"7296 when target platforms are the same7297 does not update7298 Build iOS guide email experiment7299 experiment candidate7300 executes a Projects::InProductMarketingCampaignEmailsService7301 behaves like tracks experiment assignment event7302 tracks the assignment event7303 experiment control7304 does not execute a Projects::InProductMarketingCampaignEmailsService7305 behaves like tracks experiment assignment event7306 tracks the assignment event7307 when project is not an XCode project7308 does nothing7309 is expected to be nil7310RuboCop::Cop::CodeReuse::ServiceClass7311 # order random7312 flags the use of a Service class in a Presenter7313 does not flag the use of a Service class in a regular class7314 flags the use of a Service class in a Finder7315 flags the use of a Service class in a model7316 flags the use of a Service class in a Serializer7317Gitlab::Ci::Config::Entry::Services7318 when configuration is valid7319 #valid?7320 is valid7321 #value7322 returns valid array7323 when configuration is invalid7324 #valid?7325 is invalid7326 when configuration has ports7327 when with_image_ports metadata is not enabled7328 #valid?7329 is not valid7330 when with_image_ports metadata is enabled7331 #valid?7332 is valid7333 #value7334 returns valid array7335 services alias7336 when they are not unique7337 #valid?7338 is invalid7339 when they are unique7340 #valid?7341 is valid7342 when one of the duplicated alias is in a service without ports7343 is valid7344 when there are not any ports7345 is valid7346IdInOrdered7347 Issue7348 .id_in_ordered7349 returns issues matching the ids in the same order as the ids7350 when the ids are not an array of integers7351 raises ArgumentError7352 when an empty array is given7353 does not raise error7354JsonHelper7355 # order random7356 .json_parse7357 parses JSON7358 calls the Gitlab::Json class7359 .json_generate7360 generates JSON7361 calls the Gitlab::Json class7362API::Helpers::Version7363 .new7364 is possible to initialize it with existing API version7365 raises an error when unsupported API version is provided7366 #root_path7367 returns a root path of the API version7368 #root_url7369 returns an URL for a root path for the API version7370RuboCop::Cop::PutProjectRoutesUnderScope7371 # order random7372 does not register an offense when resource is deep inside the scope7373 registers an offense when route is outside scope for `post`7374 does not register an offense for the root route within scope7375 registers an offense when route is outside scope for `resources`7376 does not register an offense when resource inside the scope7377 registers an offense when route is outside scope for `delete`7378 registers an offense when route is outside scope for `patch`7379 registers an offense when route is outside scope for `get`7380 does not register an offense for the root route7381 registers an offense when route is outside scope for `put`7382 registers an offense when route is outside scope for `resource`7383Gitlab::HealthChecks::Middleware7384 #call7385 handling /readiness requests7386 handles the request7387 handling /liveness requests7388 handles the request7389 handling other requests7390 forwards them to the next middleware7391be_sorted7392 matches empty collections, regardless of arguments7393 matches in both directions7394 can match on a projection7395Types::CommitSignatures::X509SignatureType7396 # order random7397 is expected to require graphql authorizations :download_code7398 is expected to include Types::CommitSignatureInterface7399 contains attributes related to X.509 signatures7400 is expected to eq "X509Signature"7401Packages::Conan::CreatePackageService7402 #execute7403 valid params7404 creates a new package7405 behaves like assigns the package creator7406 assigns the package creator7407 behaves like assigns build to package7408 with build info7409 assigns the pipeline to the package7410 behaves like assigns status to package7411 with status param7412 assigns the status to the package7413 invalid params7414 fails7415Types::WorkItems::Widgets::DescriptionInputType7416 is expected to eq "WorkItemWidgetDescriptionInput"7417 is expected to contain exactly "description"7418Gitlab::Diff::InlineDiffMarker7419 #mark7420 when the rich text is html safe7421 marks the range7422 when the text is not html safe7423 marks the range7424Atlassian::JiraConnect::Serializers::FeatureFlagEntity7425 when the feature flag does not belong to any Jira issue7426 #issue_keys7427 is empty7428 #to_json7429 can encode the object7430 is invalid, since it has no issue keys7431 when the feature flag does belong to a Jira issue7432 #issue_keys7433 is not empty7434 #to_json7435 is valid according to the feature flag info schema7436 it has a percentage strategy7437 is valid according to the feature flag info schema7438 has the correct summary7439 includes the correct environments7440Gitlab::Prometheus::Queries::ValidateQuery7441 valid query7442 passess query to prometheus7443 invalid query7444 returns invalid7445 when exceptions occur7446 Gitlab::HTTP::BlockedUrlError7447 catches exception and returns invalid7448Gitlab::DatabaseImporters::WorkItems::BaseTypeImporter7449 behaves like work item base types importer7450 creates all base work item types if they don't exist7451 creates all default widget definitions7452 upserts base work item types if they already exist7453 upserts default widget definitions if they already exist and type changes7454 does not change default widget definitions if they already exist with changed disabled status7455 executes single INSERT query per types and widget definitions7456 when some base types exist7457 inserts all types and does nothing if some already existed7458 when some widget definitions exist7459 inserts all widget definitions and does nothing if some already existed7460Ci::SecureFilesHelper7461 #show_secure_files_setting7462 authenticated user with admin permissions7463 is expected to equal true7464 authenticated user with read permissions7465 is expected to equal true7466 authenticated user with guest permissions7467 is expected to equal false7468 authenticated user with no permissions7469 is expected to equal false7470 unconfirmed user7471 is expected to equal false7472 unauthenticated user7473 is expected to equal false7474Mutations::Clusters::Agents::Delete7475 is expected to require graphql authorizations :admin_cluster7476 #resolve7477 without user permissions7478 fails to delete the cluster agent7479 with user permissions7480 deletes a cluster agent7481dashboard/projects/_blank_state_welcome.html.haml7482 with regular user7483 with project creation enabled7484 has a doc_url7485 shows create project panel7486 with project creation disabled7487 doesn't show create project panel7488 shows an alert7489 with external user7490 doesn't show create project panel7491 shows an alert7492Types::AlertManagement::DomainFilterEnum7493 is expected to eq "AlertManagementDomainFilter"7494 exposes all the severity values7495Packages::UpdateTagsService7496 #execute7497 behaves like updating tags7498 updates a tag7499 with an existing tag7500 on the same package7501 behaves like updating tags7502 updates a tag7503 with different name7504 behaves like updating tags7505 updates a tag7506 on a different package7507 behaves like updating tags7508 updates a tag7509 with empty tags7510 is a no op7511JiraConnect::SyncDeploymentsWorker7512 behaves like worker with data consistency7513 .get_data_consistency_feature_flag_enabled?7514 returns true7515 .get_data_consistency7516 returns correct data consistency7517 #perform7518 when the object exists7519 calls the Jira sync service7520 when the object does not exist7521 does not call the sync service7522RspecFlaky::Report7523 delegates to #flaky_examples using SimpleDelegator7524 .load7525 loads the report file7526 .load_json7527 loads the report file7528 #initialize7529 accepts a RspecFlaky::FlakyExamplesCollection7530 does not accept anything else7531 #write7532 when RspecFlaky::Config.generate_report? is false7533 does not write any report file7534 when RspecFlaky::Config.generate_report? is true7535 delegates the writes to RspecFlaky::Report7536 #prune_outdated7537 returns a new collection without the examples older than 30 days by default7538 accepts a given number of days7539BulkImports::Projects::Pipelines::ProjectAttributesPipeline7540 #run7541 imports project attributes7542 when project is archived7543 sets project as archived7544 #transform7545 removes prohibited attributes from hash7546 #load7547 assigns attributes, drops visibility and reconciles shared runner setting7548 #after_run7549 calls extractor#remove_tmpdir7550 .relation7551 is expected to eq "self"7552Gitlab::Memory::Watchdog::Handlers::SidekiqHandler7553 # order random7554 #call7555 when stop is received after TSTP7556 behaves like handler issues kill command7557 logs sending signal7558 sends TERM to the current process7559 when stop is received after TERM7560 behaves like handler issues kill command7561 logs sending signal7562 sends TERM to the current process7563 when stop is not received7564 when process is not group leader7565 behaves like handler issues kill command7566 logs sending signal7567 sends TERM to the current process7568 when process is a group leader7569 behaves like handler issues kill command7570 logs sending signal7571 sends TERM to the current process7572Gitlab::Database::Migrations::RunnerBackoff::Communicator7573 # order random7574 .execute_with_lock7575 delegates to a new instance object7576 #execute_with_lock7577 is expected to yield control7578 raises error if it can not set the key7579 removes the lease after executing the migration7580 with logger7581 logs messages around execution7582 .backoff_runner?7583 is expected to be falsey7584 is true when the lock is held7585 reads from Redis7586 with runner_migrations_backoff disabled7587 is false when the lock is held7588Gitlab::Tracking::ServicePingContext7589 # order random7590 #init7591 with valid configuration7592 data_source: :redis, event: nil, key_path: "counts.some_metric"7593 does not raise errors7594 data_source: :redis_hll, event: "some_event", key_path: nil7595 does not raise errors7596 with invalid configuration7597 data_source: :redis, event: nil, key_path: nil7598 does not raise errors7599 data_source: :redis, event: "some_event", key_path: nil7600 does not raise errors7601 data_source: :redis_hll, event: nil, key_path: nil7602 does not raise errors7603 data_source: :redis_hll, event: nil, key_path: "some key_path"7604 does not raise errors7605 data_source: :random, event: "some_event", key_path: nil7606 does not raise errors7607 #to_context7608 for redis_hll data source7609 contains event_name7610 for redis data source7611 contains event_name7612Gitlab::Ci::Status::Pipeline::Delayed7613 #text7614 overrides status text7615 #label7616 overrides status label7617 .matches?7618 when pipeline is scheduled7619 is a correct match7620 when pipeline is not scheduled7621 does not match7622BulkImports::LfsObjectsExportService7623 #execute7624 exports lfs objects and their repository types7625 when export is batched7626 exports only specified lfs objects7627 when lfs object has file on disk missing7628 does not attempt to copy non-existent file7629 when lfs object is remotely stored7630 downloads lfs object from object storage7631 #exported_objects_count7632 return the number of exported lfs objects7633Gitlab::Ci::SecureFiles::Cer7634 # order random7635 when the supplied certificate cannot be parsed7636 #certificate_data7637 assigns the error message and returns nil7638 #metadata7639 returns an empty hash7640 #expires_at7641 returns nil7642 when the supplied certificate can be parsed7643 #certificate_data7644 returns an OpenSSL::X509::Certificate object7645 #metadata7646 returns a hash with the expected keys7647 #id7648 returns the certificate serial number7649 #expires_at7650 returns the certificate expiration timestamp7651 #issuer7652 calls parse on X509Name7653 #subject7654 calls parse on X509Name7655Gitlab::Git::PreReceiveError7656 uses the fallback message7657 uses the fallback message7658 error messages prefixed with GitLab:7659 accepts only errors lines with the prefix7660 makes its message HTML-friendly7661 prefers the original message over the fallback7662 error messages prefixed with GL-HOOK-ERR:7663 accepts only errors lines with the prefix7664 makes its message HTML-friendly7665 prefers the original message over the fallback7666ObjectStorage::CDN7667 # order random7668 with CDN config7669 with a known CDN provider7670 #cdn_enabled_url7671 calls #cdn_signed_url7672 #use_cdn?7673 returns true7674 #cdn_signed_url7675 returns a URL7676 with an unknown CDN provider7677 raises an error7678 without CDN config7679 #cdn_enabled_url7680 calls #url7681 #use_cdn?7682 returns false7683Integrations::Pushover7684 Validations7685 when integration is active7686 is expected to validate that :api_key cannot be empty/falsy7687 is expected to validate that :user_key cannot be empty/falsy7688 is expected to validate that :priority cannot be empty/falsy7689 when integration is inactive7690 is expected not to validate that :api_key cannot be empty/falsy7691 is expected not to validate that :user_key cannot be empty/falsy7692 is expected not to validate that :priority cannot be empty/falsy7693 Execute7694 calls Pushover API7695Gitlab::HealthChecks::PumaCheck7696 when Puma is not loaded7697 does not provide readiness and metrics7698 when Puma is loaded7699 when stats are missing7700 behaves like with state7701 does provide readiness7702 does provide metrics7703 for Single mode7704 behaves like with state7705 does provide readiness7706 does provide metrics7707 for Cluster mode7708 behaves like with state7709 does provide readiness7710 does provide metrics7711Gitlab::DependencyLinker::PodspecLinker7712 .support?7713 supports *.podspec7714 does not support other files7715 #link7716 does not link the pod name7717 links the license7718 links the homepage7719 links the source URL7720 links dependencies7721projects/settings/operations/show7722 Operations > Alerts7723 renders the Operations Settings page7724 Operations > Error Tracking7725 Settings page7726 renders the Operations Settings page7727Banzai::CommitRenderer7728 .render7729 renders a commit description and title7730Gitlab::Git::WikiPageVersion7731 #author7732 user exists in gitlab7733 returns the user7734 user does not exist in gitlab7735 returns nil7736AdminEmailWorker7737 .perform7738 does not attempt to send repository check mail when they are disabled7739 repository_checks enabled7740 checks if repository check mail should be sent7741 does not send mail when there are no failed repos7742 send mail when there is a failed repo7743Environments::CanaryIngress::UpdateWorker7744 #perform7745 executes the update service7746 when an environment does not exist7747 does not execute the update service7748RuboCop::Cop::Gitlab::ConstGetInheritFalse7749 # order random7750 Object.const_get7751 registers an offense with no 2nd argument and corrects7752 inherit=false7753 does not register an offense7754 inherit=true7755 registers an offense and corrects7756 const_get for a nested class7757 registers an offense on reload usage and corrects7758 inherit=false7759 does not register an offense7760 inherit=true7761 registers an offense if inherit is true and corrects7762GroupCustomAttribute7763 assocations7764 is expected to belong to group required: false7765 validations7766 is expected to validate that :group cannot be empty/falsy7767 is expected to validate that :key cannot be empty/falsy7768 is expected to validate that :value cannot be empty/falsy7769 is expected to validate that :key is case-sensitively unique within the scope of :group_id7770Every API endpoint7771 feature categories7772 has feature categories7773 recognizes the feature categories7774 has no routes with multiple paths7775 doesn't define or exclude categories on removed actions7776DependencyProxy::Registry7777 image name without namespace7778 #auth_url7779 returns a correct auth url7780 #manifest_url7781 returns a correct manifest url7782 #blob_url7783 returns a correct blob url7784 image name with namespace7785 #auth_url7786 returns a correct auth url7787 #manifest_url7788 returns a correct manifest url7789 #blob_url7790 returns a correct blob url7791 #authenticate_header7792 returns the OAuth realm and service header7793BulkImports::ArchiveExtractionService7794 #execute7795 extracts files from archive and removes symlinks7796 when dir is not in tmpdir7797 raises an error7798 when archive file is a symlink7799 raises an error7800 when filepath is being traversed7801 raises an error7802Gitlab::ReferenceCounter7803 #increase7804 increases and sets the expire time of a reference count for a path7805 #decrease7806 decreases the reference count for a path7807 warns if attempting to decrease a counter with a value of zero or less, and resets the counter7808 #value7809 get the reference count for a path7810 #reset!7811 resets reference count down to zero7812 #expires_in7813 displays the expiration time in seconds7814Ci::TrackFailedBuildWorker7815 #perform7816 when a build has failed7817 executes track service7818 behaves like an idempotent worker7819 is labeled as idempotent7820 performs multiple times sequentially without raising an exception7821Gitlab::IssuableSorter7822 sorts references by a given key7823 for Jira issues7824 sorts references by a given key7825 for references from multiple projects and namespaces7826 sorts references by project and then by a given key7827BizibleHelper7828 #bizible_enabled?7829 when bizible config is not true7830 is expected to be falsy7831 when bizible config is enabled7832 is expected to be truthy7833 with ecomm_instrumentation feature flag disabled7834 is expected to be falsey7835 with ecomm_instrumentation feature flag enabled7836 is expected to be truthy7837 with invite_email present7838 is expected to be falsy7839Gitlab::Graphql::MountMutation7840 .mount_mutation7841 mounts a mutation7842 .mount_aliased_mutation7843 mounts a mutation7844 has a correct `graphql_name`7845 has a correct type7846 has a correct input argument7847GroupLink::GroupLinkEntity7848 matches json schema7849 correctly exposes `valid_roles`7850 correctly exposes `shared_with_group.avatar_url`7851Types::MergeRequests::ReviewerType7852 behaves like a user type with merge request interaction type7853 is expected to require graphql authorizations :read_user7854 has the expected fields7855 #merge_request_interaction7856 returns the correct type7857 has the correct arguments7858Admin::AbuseReportEntity7859 # order random7860 #as_json7861 exposes correct attributes7862 correctly exposes `reported user`7863 correctly exposes `reporter`7864 correctly exposes :report_path7865Gitlab::GithubImport::Stage::ImportRepositoryWorker7866 #import7867 when the import succeeds7868 with issues7869 schedules the importing of the base data7870 without issues7871 schedules the importing of the base data7872 when retrying7873 does not allocate internal ids7874 when the import fails7875 does not schedule the importing of the base data7876Types::DiffRefsType7877 is expected to eq "DiffRefs"7878 is expected to have graphql fields :head_sha, :base_sha, and :start_sha7879 is expected to be non null7880 is expected not to be non null7881 is expected to be non null7882Mutations::SavedReplies::Destroy7883 #resolve7884 when feature is disabled7885 raises Gitlab::Graphql::Errors::ResourceNotAvailable7886 when feature is enabled for current user7887 when service fails to delete a new saved reply7888 raises Gitlab::Graphql::Errors::ResourceNotAvailable7889 when service successfully deletes the saved reply7890 is expected to be empty7891RuboCop::Cop::Migration::AddConcurrentForeignKey7892 # order random7893 when outside of a migration7894 does not register any offenses7895 when in a migration7896 registers an offense when using add_foreign_key7897 does not register an offense when a `NOT VALID` foreign key is added7898 does not register an offense when `add_foreign_key` is within `with_lock_retries`7899Gitlab::Usage::Metrics::Aggregates::Sources::RedisHll7900 .calculate_events_union7901 calls Gitlab::UsageDataCounters::HLLRedisCounter.calculate_events_union7902 prevents from using fallback value as valid union result7903 .calculate_metrics_intersections7904 uses values returned by union to compute the intersection7905 raises error if union is < 07906Types::Ci::PipelineScheduleType7907 # order random7908 exposes the expected fields7909 is expected to expose permissions using Types::PermissionTypes::Ci::PipelineSchedules7910 is expected to eq "PipelineSchedule"7911RuboCop::Cop::Graphql::ResolverType7912 # order random7913 adds an offense when there is no type annotation7914 does not add an offense for resolvers that have a type call7915 does not add an offense unless the class is named using the Resolver convention7916 ignores type calls on other objects7917Import::GitlabProjects::RemoteFileValidator7918 does nothing when the oject is valid7919 content_length validation7920 is invalid with file too small7921 is invalid with file too large7922 content_type validation7923 only allows ALLOWED_CONTENT_TYPES as content_type7924Gitlab::GithubImport::Stage::ImportPullRequestsWorker7925 raises an error7926 #import7927 imports all the pull requests7928Types::Clusters::AgentType7929 is expected to eq "ClusterAgent"7930 is expected to require graphql authorizations :read_cluster_agent7931 is expected to include graphql fields :created_at, :created_by_user, :id, :name, :project, :updated_at, :tokens, :web_path, :connections, and :activity_events7932Gitlab::Database::SchemaValidation::SchemaObjects::Column7933 # order random7934 #table_name7935 is expected to eq "projects"7936 #statement7937 is expected to eq "id bigint NOT NULL"7938 #name7939 is expected to eq "id"7940Gitlab::GithubImport::Attachments::ImportReleaseWorker7941 # order random7942 #import7943 imports an release attachments7944ObjectStorage::FogHelpers7945 # order random7946 #available?7947 when object storage is enabled7948 is expected to eq true7949 when object storage is disabled7950 is expected to eq false7951 when implementing class did not define storage_location_identifier7952 raises an error7953Gitlab::AppJsonLogger7954 logs a hash as a JSON7955 logs a string as a JSON7956Gitlab::Kubernetes::Kubeconfig::Entry::Context7957 #to_h7958 is expected to eq {:context=>{:cluster=>"cluster", :user=>"user"}, :name=>"name"}7959 with a namespace7960 is expected to eq {:context=>{:cluster=>"cluster", :namespace=>"namespace", :user=>"user"}, :name=>"name"}7961Types::Notes::NoteableInterface7962 exposes the expected fields7963 .resolve_type7964 knows the correct type for objects7965Types::Ci::TestCaseType7966 is expected to eq "TestCase"7967 contains attributes related to a pipeline test case7968DatabaseReflection7969 .reflect7970 returns a Reflection instance7971 memoizes the result79726_validations7973 validate_storages_config7974 with correct settings7975 passes through7976 with invalid storage names7977 throws an error7978Gitlab::Database::SchemaValidation::SchemaObjects::Index7979 # order random7980 #table_name7981 returns schema object table_name7982 #statement7983 returns schema object statement7984 #name7985 returns schema object name7986Gitlab::UsageDataCounters::SearchCounter7987 all_searches counter7988 behaves like usage counter with totals7989 increments counter and returns total count7990 navbar_searches counter7991 behaves like usage counter with totals7992 increments counter and returns total count7993 .fetch_supported_event7994 is expected to eq "all_searches"7995SystemCheck::App::HashedStorageEnabledCheck7996 #check?7997 fails when hashed storage is disabled7998 succeeds when hashed storage is enabled7999Gitlab::SidekiqMiddleware::SizeLimiter::Server8000 yields block8001 calls the Compressor8002ProtectedRefsHelper8003 # order random8004 #protected_access_level_dropdown_roles8005 returns dropdown options for each protected ref access level8006 #protected_access_levels_for_dropdowns8007 returns roles for {create,push,merge}_access_levels8008Types::Ci::Config::IncludeType8009 is expected to eq "CiConfigInclude"8010 exposes the expected fields8011Types::JiraUserType8012 is expected to eq "JiraUser"8013 has the expected fields8014API::Entities::PublicGroupDetails8015 #as_json8016 includes public group fields8017DeployKeys::CreateService8018 creates a deploy key8019Types::UserCalloutFeatureNameEnum8020 is expected to eq "UserCalloutFeatureNameEnum"8021 exposes all the existing user callout feature names8022Gitlab::Database::ObsoleteIgnoredColumns8023 # order random8024 #execute8025 returns a list of class names and columns pairs8026Types::CiConfiguration::Sast::UiComponentSizeEnum8027 is expected to eq "SastUiComponentSize"8028 exposes all sizes of ui components8029Gitlab::Kubernetes::RoleBinding#generate8030 builds a Kubeclient Resource8031Fog::Storage::GoogleXML::File8032 delegates to #get_https_url8033Tooling::Danger::Database8034 # order random8035 #find_migration_files_before8036 returns migrations that are before the cutoff8037Gitlab::Graphql::QueryAnalyzers::AST::LoggerAnalyzer8038 #result8039 returns the complexity, depth, duration, etc8040Types::Packages::Nuget::DependencyLinkMetadatumType8041 includes nuget dependency link metadatum fields8042Types::Ci::VariableInterface8043 is expected to have graphql fields :id, :key, :raw, :value, and :variable_type8044Issues::BaseService8045 # order random8046 #constructor_container_arg8047 is expected to eq {:container=>"some-value"}8048Gitlab::Diff::FileCollectionSorter8049 #sort8050 returns list sorted directory first8051Types::SubscriptionType8052 has the expected fields8053Asset proxy settings initialization8054 #asset_proxy8055 defaults to disabled8056Knapsack report was generated. Preview:8057{8058 "spec/models/merge_request_spec.rb": 350.36481323300006,8059 "spec/lib/gitlab/usage_data_metrics_spec.rb": 114.1515836609999,8060 "spec/models/wiki_page_spec.rb": 97.09559431700006,8061 "spec/lib/gitlab/database/migration_helpers_spec.rb": 33.256736848999935,8062 "spec/services/merge_requests/merge_service_spec.rb": 67.89299733999997,8063 "spec/services/members/update_service_spec.rb": 60.217466511,8064 "spec/lib/gitlab/ci/templates/Jobs/deploy_gitlab_ci_yaml_spec.rb": 55.934133012000075,8065 "spec/presenters/projects/security/configuration_presenter_spec.rb": 34.19089982300011,8066 "spec/serializers/group_child_entity_spec.rb": 31.648079130000042,8067 "spec/lib/gitlab/ci/build/rules/rule/clause/exists_spec.rb": 25.123955531000092,8068 "spec/lib/banzai/reference_parser/snippet_parser_spec.rb": 34.656843480999896,8069 "spec/services/ci/process_sync_events_service_spec.rb": 24.176047848999815,8070 "spec/models/ci/bridge_spec.rb": 19.74773393999999,8071 "spec/models/integrations/field_spec.rb": 6.103701993999948,8072 "spec/lib/banzai/color_parser_spec.rb": 5.906018229999972,8073 "spec/models/operations/feature_flag_spec.rb": 15.757282787000122,8074 "spec/finders/group_descendants_finder_spec.rb": 21.010138049000034,8075 "spec/services/issues/import_csv_service_spec.rb": 23.230689942000026,8076 "spec/workers/projects/import_export/create_relation_exports_worker_spec.rb": 20.56874441900004,8077 "spec/lib/gitlab/file_type_detection_spec.rb": 6.905901627000048,8078 "spec/graphql/resolvers/todos_resolver_spec.rb": 18.742849107999973,8079 "spec/lib/gitlab/json_cache_spec.rb": 4.8466692209999565,8080 "spec/graphql/mutations/issues/update_spec.rb": 17.590490519000014,8081 "spec/finders/ci/pipelines_for_merge_request_finder_spec.rb": 15.770040935999987,8082 "spec/services/merge_requests/get_urls_service_spec.rb": 14.21304572300005,8083 "spec/lib/gitlab/x509/signature_spec.rb": 7.2503339609997965,8084 "spec/lib/gitlab/ci/badge/release/template_spec.rb": 12.373315302000037,8085 "spec/lib/banzai/filter/reference_redactor_filter_spec.rb": 12.942484702999991,8086 "spec/lib/gitlab/ci/config/entry/variables_spec.rb": 3.296272820000013,8087 "spec/workers/issuable_export_csv_worker_spec.rb": 10.536443104,8088 "spec/lib/banzai/filter/sanitization_filter_spec.rb": 4.0100908850001815,8089 "spec/lib/gitlab/chat/command_spec.rb": 9.324108475999992,8090 "spec/lib/gitlab/multi_collection_paginator_spec.rb": 11.341851865999843,8091 "spec/lib/gitlab/github_import/importer/pull_requests/review_importer_spec.rb": 5.173273382999923,8092 "spec/lib/banzai/filter/references/feature_flag_reference_filter_spec.rb": 3.9038392759998715,8093 "spec/lib/gitlab/ci/reports/test_suite_comparer_spec.rb": 1.6364267789999758,8094 "spec/models/analytics/cycle_analytics/aggregation_spec.rb": 4.109537729000067,8095 "spec/lib/gitlab/ci/config/external/file/artifact_spec.rb": 8.288770859000124,8096 "spec/services/files/delete_service_spec.rb": 9.277135832000113,8097 "spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb": 10.599999961000094,8098 "spec/models/slack_integration_spec.rb": 10.58214299400015,8099 "spec/lib/banzai/object_renderer_spec.rb": 7.399625223999919,8100 "spec/graphql/resolvers/container_repositories_resolver_spec.rb": 5.586497381000072,8101 "spec/finders/pending_todos_finder_spec.rb": 11.04608373799988,8102 "spec/presenters/project_member_presenter_spec.rb": 4.852757498000074,8103 "spec/workers/update_head_pipeline_for_merge_request_worker_spec.rb": 3.662019189000148,8104 "spec/lib/gitlab/ci/config/normalizer_spec.rb": 1.4844020599998657,8105 "spec/models/users/in_product_marketing_email_spec.rb": 3.214117673999908,8106 "spec/graphql/resolvers/labels_resolver_spec.rb": 4.403193182999985,8107 "spec/models/prometheus_alert_spec.rb": 3.188870070000121,8108 "spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb": 1.537473208999927,8109 "spec/lib/gitlab/slash_commands/issue_comment_spec.rb": 5.709930975000134,8110 "spec/lib/gitlab/ci/ansi2json/line_spec.rb": 3.2059949220001727,8111 "spec/services/jira_connect_subscriptions/create_service_spec.rb": 3.9670327900000757,8112 "spec/lib/gitlab/ci/pipeline/chain/limit/rate_limit_spec.rb": 2.1675463849999232,8113 "spec/helpers/broadcast_messages_helper_spec.rb": 2.8831895820001137,8114 "spec/rubocop/cop/graphql/descriptions_spec.rb": 1.8826633850001144,8115 "spec/models/integrations/slack_slash_commands_spec.rb": 2.99817394899992,8116 "spec/lib/gitlab/alert_management/payload/managed_prometheus_spec.rb": 1.670750517000215,8117 "spec/models/uploads/fog_spec.rb": 5.958083282999951,8118 "spec/services/metrics/dashboard/grafana_metric_embed_service_spec.rb": 3.7964509189996534,8119 "spec/models/concerns/manual_inverse_association_spec.rb": 5.730158692000032,8120 "spec/lib/gitlab/database/postgres_hll/batch_distinct_counter_spec.rb": 2.494558305000055,8121 "spec/models/issue_link_spec.rb": 5.727185860999953,8122 "spec/views/ci/status/_badge.html.haml_spec.rb": 8.339547682999864,8123 "spec/workers/merge_requests/create_approval_event_worker_spec.rb": 5.512521240000069,8124 "spec/lib/gitlab/database/async_indexes/migration_helpers_spec.rb": 1.8249969299999975,8125 "spec/lib/gitlab/ci/badge/coverage/template_spec.rb": 1.0019100240001535,8126 "spec/services/labels/create_service_spec.rb": 3.784261943000047,8127 "spec/lib/bulk_imports/common/pipelines/milestones_pipeline_spec.rb": 5.7200893979998,8128 "spec/workers/merge_requests/close_issue_worker_spec.rb": 4.874959001999969,8129 "spec/models/snippets/repository_storage_move_spec.rb": 1.1953708949999964,8130 "spec/services/service_desk/custom_email_verifications/update_service_spec.rb": 2.5250632370000403,8131 "spec/config/settings_spec.rb": 1.1973878649998824,8132 "spec/workers/ml/experiment_tracking/associate_ml_candidate_to_package_worker_spec.rb": 3.551218153000036,8133 "spec/services/ci/compare_codequality_reports_service_spec.rb": 2.256065832999866,8134 "spec/lib/gitlab/database/load_balancing/service_discovery/sampler_spec.rb": 0.595299832000137,8135 "spec/models/import_failure_spec.rb": 1.2811076600000888,8136 "spec/lib/gitlab/slash_commands/issue_close_spec.rb": 3.3250812599999335,8137 "spec/lib/gitlab/checks/container_moved_spec.rb": 2.6838061229998402,8138 "spec/lib/gitlab/chat/responder/slack_spec.rb": 3.9646315969998795,8139 "spec/presenters/projects/import_export/project_export_presenter_spec.rb": 3.6534049859999413,8140 "spec/lib/gitlab/ci/status/processable/waiting_for_resource_spec.rb": 3.805247261999966,8141 "spec/rubocop/cop/redis_queue_usage_spec.rb": 2.6671004149998225,8142 "spec/lib/gitlab/spamcheck/result_spec.rb": 0.8261606359999405,8143 "spec/lib/gitlab/git/push_spec.rb": 2.072391956999809,8144 "spec/workers/repository_cleanup_worker_spec.rb": 3.316829224999992,8145 "spec/presenters/search_service_presenter_spec.rb": 1.1910783990001619,8146 "spec/lib/gitlab/doorkeeper_secret_storing/secret/pbkdf2_sha512_spec.rb": 0.41590183399989655,8147 "spec/workers/x509_issuer_crl_check_worker_spec.rb": 4.514219764000018,8148 "spec/lib/gitlab/kas/client_spec.rb": 0.9350822090000293,8149 "spec/services/ci/generate_codequality_mr_diff_report_service_spec.rb": 3.7739171810001153,8150 "spec/lib/gitlab/data_builder/wiki_page_spec.rb": 3.409735759000114,8151 "spec/lib/gitlab/dependency_linker/composer_json_linker_spec.rb": 0.6538391009999032,8152 "spec/models/projects/triggered_hooks_spec.rb": 0.9794172219999382,8153 "spec/graphql/mutations/issues/set_locked_spec.rb": 2.8915228520002074,8154 "spec/tasks/gitlab/gitaly_rake_spec.rb": 3.1140896190001968,8155 "spec/models/packages/sem_ver_spec.rb": 0.916131569000072,8156 "spec/graphql/resolvers/ci/jobs_resolver_spec.rb": 1.6995126540000456,8157 "spec/rack_servers/puma_spec.rb": 3.4382894699999724,8158 "spec/models/concerns/limitable_spec.rb": 0.7744960439999886,8159 "spec/lib/gitlab/database/schema_validation/database_spec.rb": 0.9537419799999043,8160 "spec/lib/gitlab/slash_commands/presenters/deploy_spec.rb": 2.6280185730001904,8161 "spec/finders/ci/pipeline_schedules_finder_spec.rb": 3.119287199999917,8162 "spec/services/ci/generate_terraform_reports_service_spec.rb": 1.7876825170001212,8163 "spec/lib/gitlab/ci/project_config/repository_spec.rb": 4.429241850999915,8164 "spec/lib/bulk_imports/projects/graphql/get_snippet_repository_query_spec.rb": 0.5947618489999513,8165 "spec/serializers/diffs_metadata_entity_spec.rb": 4.1760613459998694,8166 "spec/lib/gitlab/repository_size_checker_spec.rb": 0.8393777900000714,8167 "spec/validators/x509_certificate_credentials_validator_spec.rb": 1.0175386100002015,8168 "spec/lib/gitlab/ci/status/build/failed_unmet_prerequisites_spec.rb": 1.8041664810000384,8169 "spec/services/clusters/agents/authorize_proxy_user_service_spec.rb": 2.753385400999832,8170 "spec/lib/gitlab/ci/badge/coverage/report_spec.rb": 1.39352486100006,8171 "spec/helpers/notify_helper_spec.rb": 4.6848469409999325,8172 "spec/lib/gitlab/changelog/release_spec.rb": 1.0151415309999265,8173 "spec/services/ci/create_pipeline_service/parameter_content_spec.rb": 2.6960148709999885,8174 "spec/lib/gitlab/ci/config/entry/pull_policy_spec.rb": 0.8254419209999924,8175 "spec/lib/sidebars/admin/menus/deploy_keys_menu_spec.rb": 0.6813850499997898,8176 "spec/lib/api/helpers/merge_requests_helpers_spec.rb": 0.5943498400001772,8177 "spec/lib/bulk_imports/groups/loaders/group_loader_spec.rb": 0.857557130000032,8178 "spec/lib/gitlab/github_import/importer/protected_branches_importer_spec.rb": 0.7846255700001166,8179 "spec/policies/clusters/agent_token_policy_spec.rb": 2.320825010999897,8180 "spec/helpers/storage_helper_spec.rb": 0.863687660000096,8181 "spec/services/metrics/users_starred_dashboards/delete_service_spec.rb": 1.1443570709998312,8182 "spec/services/pages_domains/create_acme_order_service_spec.rb": 3.4847897499998908,8183 "spec/views/admin/application_settings/_ci_cd.html.haml_spec.rb": 0.6207915810000486,8184 "spec/workers/snippets/schedule_bulk_repository_shard_moves_worker_spec.rb": 1.0179218499999934,8185 "spec/lib/gitlab/ci/pipeline/chain/limit/active_jobs_spec.rb": 2.016684370000121,8186 "spec/graphql/mutations/custom_emoji/destroy_spec.rb": 1.6191418410001006,8187 "spec/lib/gitlab/ci/parsers/security/secret_detection_spec.rb": 4.253110540999842,8188 "spec/workers/onboarding/progress_worker_spec.rb": 0.5085200099999838,8189 "spec/views/groups/group_members/index.html.haml_spec.rb": 0.8382784300001731,8190 "spec/lib/sidebars/projects/panel_spec.rb": 2.6568965409999237,8191 "spec/rubocop/cop/migration/add_limit_to_text_columns_spec.rb": 0.5632801500000824,8192 "spec/lib/gitlab/bitbucket_server_import/parallel_importer_spec.rb": 0.767741820000083,8193 "spec/lib/banzai/filter/broadcast_message_placeholders_filter_spec.rb": 0.8446490709998216,8194 "spec/lib/gitlab/ci/input/arguments/options_spec.rb": 0.5048261399999774,8195 "spec/lib/safe_zip/extract_params_spec.rb": 0.7372756400000071,8196 "spec/services/projects/record_target_platforms_service_spec.rb": 1.2079983199998878,8197 "spec/rubocop/cop/code_reuse/service_class_spec.rb": 0.4636090300000433,8198 "spec/lib/gitlab/ci/config/entry/services_spec.rb": 0.5758902600000511,8199 "spec/models/concerns/id_in_ordered_spec.rb": 2.5794348809999974,8200 "spec/helpers/json_helper_spec.rb": 0.395818669999926,8201 "spec/lib/api/helpers/version_spec.rb": 0.41085114999987127,8202 "spec/rubocop/cop/put_project_routes_under_scope_spec.rb": 0.8229447899998377,8203 "spec/lib/gitlab/health_checks/middleware_spec.rb": 0.37617842999998174,8204 "spec/support_specs/matchers/be_sorted_spec.rb": 0.34533377000002474,8205 "spec/graphql/types/commit_signatures/x509_signature_type_spec.rb": 0.37242012000001523,8206 "spec/services/packages/conan/create_package_service_spec.rb": 3.4597027199999957,8207 "spec/graphql/types/work_items/widgets/description_input_type_spec.rb": 0.30034935000003316,8208 "spec/lib/gitlab/diff/inline_diff_marker_spec.rb": 0.28924663099996906,8209 "spec/lib/atlassian/jira_connect/serializers/feature_flag_entity_spec.rb": 0.9874598300000343,8210 "spec/lib/gitlab/prometheus/queries/validate_query_spec.rb": 0.5383651899999222,8211 "spec/lib/gitlab/database_importers/work_items/base_type_importer_spec.rb": 0.8900698400000238,8212 "spec/helpers/ci/secure_files_helper_spec.rb": 1.4098555900000065,8213 "spec/graphql/mutations/clusters/agents/delete_spec.rb": 1.7962458940000943,8214 "spec/views/dashboard/projects/_blank_state_welcome.html.haml_spec.rb": 0.9679240699999809,8215 "spec/graphql/types/alert_management/domain_filter_enum_spec.rb": 0.3124822199999926,8216 "spec/services/packages/update_tags_service_spec.rb": 1.2333986579999419,8217 "spec/workers/jira_connect/sync_deployments_worker_spec.rb": 1.3800560439999572,8218 "spec/tooling/rspec_flaky/report_spec.rb": 0.6264883609999288,8219 "spec/lib/bulk_imports/projects/pipelines/project_attributes_pipeline_spec.rb": 0.9126930840000114,8220 "spec/lib/gitlab/memory/watchdog/handlers/sidekiq_handler_spec.rb": 0.5835712410000724,8221 "spec/lib/gitlab/database/migrations/runner_backoff/communicator_spec.rb": 0.5716786680000041,8222 "spec/lib/gitlab/tracking/service_ping_context_spec.rb": 0.5602885939999851,8223 "spec/lib/gitlab/ci/status/pipeline/delayed_spec.rb": 1.1697267609999926,8224 "spec/services/bulk_imports/lfs_objects_export_service_spec.rb": 1.0068256590000146,8225 "spec/lib/gitlab/ci/secure_files/cer_spec.rb": 0.5204759339999327,8226 "spec/lib/gitlab/git/pre_receive_error_spec.rb": 0.5878432810000049,8227 "spec/uploaders/object_storage/cdn_spec.rb": 0.5241117349999058,8228 "spec/models/integrations/pushover_spec.rb": 0.5345465670000067,8229 "spec/lib/gitlab/health_checks/puma_check_spec.rb": 2.2685335640001085,8230 "spec/lib/gitlab/dependency_linker/podspec_linker_spec.rb": 0.5435163790000388,8231 "spec/views/projects/settings/operations/show.html.haml_spec.rb": 1.036288716000172,8232 "spec/lib/banzai/commit_renderer_spec.rb": 1.0587892420001026,8233 "spec/lib/gitlab/git/wiki_page_version_spec.rb": 1.1435040540000045,8234 "spec/workers/admin_email_worker_spec.rb": 0.7432549110001219,8235 "spec/workers/environments/canary_ingress/update_worker_spec.rb": 1.1167099169999801,8236 "spec/rubocop/cop/gitlab/const_get_inherit_false_spec.rb": 0.612067627999977,8237 "spec/models/group_custom_attribute_spec.rb": 0.8195674309999958,8238 "spec/lib/api/every_api_endpoint_spec.rb": 2.2961855410001135,8239 "spec/models/dependency_proxy/registry_spec.rb": 0.5120337109999582,8240 "spec/services/bulk_imports/archive_extraction_service_spec.rb": 0.6407400450000296,8241 "spec/lib/gitlab/reference_counter_spec.rb": 0.5721679480000148,8242 "spec/workers/ci/track_failed_build_worker_spec.rb": 3.1955848509999214,8243 "spec/lib/gitlab/issuable_sorter_spec.rb": 0.7649620670001696,8244 "spec/helpers/bizible_helper_spec.rb": 0.4901831959998617,8245 "spec/lib/gitlab/graphql/mount_mutation_spec.rb": 0.4618857680000019,8246 "spec/serializers/group_link/group_link_entity_spec.rb": 0.5501417820000825,8247 "spec/graphql/types/merge_requests/reviewer_type_spec.rb": 0.3635521939997943,8248 "spec/serializers/admin/abuse_report_entity_spec.rb": 0.4486415950000264,8249 "spec/workers/gitlab/github_import/stage/import_repository_worker_spec.rb": 0.6716154129999268,8250 "spec/graphql/types/diff_refs_type_spec.rb": 0.3907249400001547,8251 "spec/graphql/mutations/saved_replies/destroy_spec.rb": 0.53720381800008,8252 "spec/rubocop/cop/migration/add_concurrent_foreign_key_spec.rb": 0.38121996800009583,8253 "spec/lib/gitlab/usage/metrics/aggregates/sources/redis_hll_spec.rb": 0.44785000499996386,8254 "spec/graphql/types/ci/pipeline_schedule_type_spec.rb": 0.3543597109999155,8255 "spec/rubocop/cop/graphql/resolver_type_spec.rb": 0.42244582800003627,8256 "spec/validators/import/gitlab_projects/remote_file_validator_spec.rb": 0.38997525100012354,8257 "spec/workers/gitlab/github_import/stage/import_pull_requests_worker_spec.rb": 0.6304013530000248,8258 "spec/graphql/types/clusters/agent_type_spec.rb": 0.3205357419999473,8259 "spec/lib/gitlab/database/schema_validation/schema_objects/column_spec.rb": 0.4269026990000384,8260 "spec/workers/gitlab/github_import/attachments/import_release_worker_spec.rb": 0.5685236070000883,8261 "spec/lib/object_storage/fog_helpers_spec.rb": 0.3381013969999458,8262 "spec/lib/gitlab/app_json_logger_spec.rb": 0.2888528739999856,8263 "spec/lib/gitlab/kubernetes/kubeconfig/entry/context_spec.rb": 0.2855391129999134,8264 "spec/graphql/types/notes/noteable_interface_spec.rb": 0.4016627629998766,8265 "spec/graphql/types/ci/test_case_type_spec.rb": 0.30387859800021033,8266 "spec/models/concerns/database_reflection_spec.rb": 0.28130845300006513,8267 "spec/initializers/6_validations_spec.rb": 0.29827467599989177,8268 "spec/lib/gitlab/database/schema_validation/schema_objects/index_spec.rb": 0.3675719149998713,8269 "spec/lib/gitlab/usage_data_counters/search_counter_spec.rb": 0.3547028510001837,8270 "spec/lib/system_check/app/hashed_storage_enabled_check_spec.rb": 0.31977419200006807,8271 "spec/lib/gitlab/sidekiq_middleware/size_limiter/server_spec.rb": 0.3786685769998712,8272 "spec/helpers/protected_refs_helper_spec.rb": 0.35492533199999343,8273 "spec/graphql/types/ci/config/include_type_spec.rb": 0.29761086600001363,8274 "spec/graphql/types/jira_user_type_spec.rb": 0.3360341969998899,8275 "spec/lib/api/entities/public_group_details_spec.rb": 0.44133264400011285,8276 "spec/services/deploy_keys/create_service_spec.rb": 0.5382515290000356,8277 "spec/graphql/types/user_callout_feature_name_enum_spec.rb": 0.3364067770000929,8278 "spec/lib/gitlab/database/obsolete_ignored_columns_spec.rb": 0.2776768109999921,8279 "spec/graphql/types/ci_configuration/sast/ui_component_size_enum_spec.rb": 0.29974769699992976,8280 "spec/lib/gitlab/kubernetes/role_binding_spec.rb": 0.30740242899992154,8281 "spec/initializers/fog_google_https_private_urls_spec.rb": 0.3267494639999313,8282 "spec/tooling/danger/database_spec.rb": 0.2802733220000846,8283 "spec/lib/gitlab/graphql/query_analyzers/ast/logger_analyzer_spec.rb": 0.2553856459999224,8284 "spec/graphql/types/packages/nuget/dependency_link_metdatum_type_spec.rb": 0.2531558949999635,8285 "spec/graphql/types/ci/variable_interface_spec.rb": 0.2584960960000444,8286 "spec/services/issues/base_service_spec.rb": 0.27011920999984795,8287 "spec/lib/gitlab/diff/file_collection_sorter_spec.rb": 0.2540914349999639,8288 "spec/graphql/types/subscription_type_spec.rb": 0.2712413300000662,8289 "spec/initializers/asset_proxy_setting_spec.rb": 0.28387845399993248290}8291Knapsack global time execution for tests: 26m 02s8292Pending: (Failures listed here are expected and do not affect your suite's status)8293 1) MergeRequest modules behaves like AtomicInternalId .has_internal_id Validation when presence validation is not required when creating an object does not raise an error if the internal id is blank8294 # No reason given8295 # ./spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb:498296 2) MergeRequest modules behaves like AtomicInternalId .has_internal_id Validation when presence validation is not required when updating an object does not raise an error if the internal id is blank8297 # No reason given8298 # ./spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb:578299 3) Ci::Bridge metadata partitioning creates the metadata record and assigns its partition8300 # Skipping partitioning tests until `ci_builds` is partitioned8301 Failure/Error: skip 'Skipping partitioning tests until `ci_builds` is partitioned'8302 RSpec::Core::Pending::SkipDeclaredInExample8303 # ./spec/support/helpers/models/ci/partitioning_testing/rspec_hooks.rb:8:in `block (2 levels) in <top (required)>'8304 # ./spec/support/fast_quarantine.rb:23:in `block (2 levels) in <top (required)>'8305 # ./spec/support/database/prevent_cross_joins.rb:108:in `block (3 levels) in <top (required)>'8306 # ./spec/support/database/prevent_cross_joins.rb:62:in `with_cross_joins_prevented'8307 # ./spec/support/database/prevent_cross_joins.rb:108:in `block (2 levels) in <top (required)>'8308 4) Operations::FeatureFlag validations behaves like AtomicInternalId .has_internal_id Validation when presence validation is not required when creating an object does not raise an error if the internal id is blank8309 # No reason given8310 # ./spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb:498311 5) Operations::FeatureFlag validations behaves like AtomicInternalId .has_internal_id Validation when presence validation is not required when updating an object does not raise an error if the internal id is blank8312 # No reason given8313 # ./spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb:578314Finished in 26 minutes 6 seconds (files took 55.17 seconds to load)83153728 examples, 0 failures, 5 pending8316Randomized with seed 66148317[TEST PROF INFO] Time spent in factories: 13:35.341 (51.84% of total time)8318RSpec exited with 0.8319No examples to retry, congrats!8321Not uploading cache ruby-gems-debian-bullseye-ruby-3.0-16 due to policy8323Uploading artifacts...8324coverage/: found 5 matching artifact files and directories 8325crystalball/: found 2 matching artifact files and directories 8326deprecations/: found 4 matching artifact files and directories 8327knapsack/: found 4 matching artifact files and directories 8328WARNING: query_recorder/: no matching files. Ensure that the artifact path is relative to the working directory (/builds/gitlab-org/gitlab) 8329rspec/: found 16 matching artifact files and directories 8330WARNING: tmp/capybara/: no matching files. Ensure that the artifact path is relative to the working directory (/builds/gitlab-org/gitlab) 8331log/*.log: found 19 matching artifact files and directories 8332WARNING: Upload request redirected location=https://gitlab.com/api/v4/jobs/4400964206/artifacts?artifact_format=zip&artifact_type=archive&expire_in=31d new-url=https://gitlab.com8333WARNING: Retrying... context=artifacts-uploader error=request redirected8334Uploading artifacts as "archive" to coordinator... 201 Created id=4400964206 responseStatus=201 Created token=64_KpzJ38335Uploading artifacts...8336rspec/rspec-*.xml: found 1 matching artifact files and directories 8337WARNING: Upload request redirected location=https://gitlab.com/api/v4/jobs/4400964206/artifacts?artifact_format=gzip&artifact_type=junit&expire_in=31d new-url=https://gitlab.com8338WARNING: Retrying... context=artifacts-uploader error=request redirected8339Uploading artifacts as "junit" to coordinator... 201 Created id=4400964206 responseStatus=201 Created token=64_KpzJ38341Job succeeded