Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2020-07-21 15:09:40 +00:00
parent 5459ed73b0
commit a657825211
30 changed files with 680 additions and 201 deletions

View File

@ -302,10 +302,424 @@ Performance/Detect:
RSpec/ContextWording:
Enabled: false
# Offense count: 626
# Offense count: 638
# Cop supports --auto-correct.
RSpec/EmptyLineAfterLetBlock:
Enabled: false
Enabled: true
Exclude:
- 'ee/spec/controllers/admin/application_settings_controller_spec.rb'
- 'ee/spec/controllers/ee/projects/protected_branches_controller_spec.rb'
- 'ee/spec/controllers/ee/sent_notifications_controller_spec.rb'
- 'ee/spec/controllers/projects/security/network_policies_controller_spec.rb'
- 'ee/spec/features/admin/admin_emails_spec.rb'
- 'ee/spec/features/merge_request/user_creates_merge_request_spec.rb'
- 'ee/spec/features/merge_requests/user_filters_by_approvers_spec.rb'
- 'ee/spec/features/merge_requests/user_resets_approvers_spec.rb'
- 'ee/spec/finders/group_saml_identity_finder_spec.rb'
- 'ee/spec/finders/merge_requests/by_approvers_finder_spec.rb'
- 'ee/spec/finders/security/vulnerability_findings_finder_spec.rb'
- 'ee/spec/helpers/application_helper_spec.rb'
- 'ee/spec/helpers/ee/namespaces_helper_spec.rb'
- 'ee/spec/helpers/push_rules_helper_spec.rb'
- 'ee/spec/helpers/vulnerabilities_helper_spec.rb'
- 'ee/spec/lib/audit/details_spec.rb'
- 'ee/spec/lib/container_registry/client_spec.rb'
- 'ee/spec/lib/ee/api/entities/analytics/code_review/merge_request_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/access_levels_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/group_spec.rb'
- 'ee/spec/lib/ee/gitlab/auth/ldap/sync/group_spec.rb'
- 'ee/spec/lib/ee/gitlab/background_migration/move_epic_issues_after_epics_spec.rb'
- 'ee/spec/lib/ee/gitlab/ci/config_spec.rb'
- 'ee/spec/lib/gitlab/auth/ldap/user_spec.rb'
- 'ee/spec/lib/gitlab/auth/smartcard/ldap_certificate_spec.rb'
- 'ee/spec/lib/gitlab/auth_spec.rb'
- 'ee/spec/lib/gitlab/background_migration/user_mentions/create_resource_user_mention_spec.rb'
- 'ee/spec/lib/gitlab/ci/reports/security/report_spec.rb'
- 'ee/spec/lib/gitlab/contribution_analytics/data_collector_spec.rb'
- 'ee/spec/lib/gitlab/elastic/client_spec.rb'
- 'ee/spec/lib/gitlab/elastic/search_results_spec.rb'
- 'ee/spec/lib/gitlab/expiring_subscription_message_spec.rb'
- 'ee/spec/lib/gitlab/graphql/aggregations/epics/lazy_epic_aggregate_spec.rb'
- 'ee/spec/lib/gitlab/insights/finders/issuable_finder_spec.rb'
- 'ee/spec/lib/gitlab/insights/reducers/count_per_label_reducer_spec.rb'
- 'ee/spec/lib/gitlab/insights/reducers/count_per_period_reducer_spec.rb'
- 'ee/spec/lib/gitlab/insights/reducers/label_count_per_period_reducer_spec.rb'
- 'ee/spec/lib/gitlab/prometheus/queries/packet_flow_metrics_query_spec.rb'
- 'ee/spec/lib/gitlab/prometheus/queries/packet_flow_query_spec.rb'
- 'ee/spec/lib/gitlab/subscription_portal/client_spec.rb'
- 'ee/spec/lib/pseudonymizer/uploader_spec.rb'
- 'ee/spec/migrations/set_report_type_for_vulnerabilities_spec.rb'
- 'ee/spec/migrations/set_resolved_state_on_vulnerabilities_spec.rb'
- 'ee/spec/models/burndown_spec.rb'
- 'ee/spec/models/ci/build_spec.rb'
- 'ee/spec/models/elasticsearch_indexed_namespace_spec.rb'
- 'ee/spec/models/elasticsearch_indexed_project_spec.rb'
- 'ee/spec/models/group_member_spec.rb'
- 'ee/spec/models/operations/feature_flag_spec.rb'
- 'ee/spec/models/vulnerability_spec.rb'
- 'ee/spec/policies/project_policy_spec.rb'
- 'ee/spec/requests/api/epics_spec.rb'
- 'ee/spec/requests/api/feature_flags_spec.rb'
- 'ee/spec/requests/api/geo_spec.rb'
- 'ee/spec/requests/api/graphql/current_user/todos_query_spec.rb'
- 'ee/spec/requests/api/graphql/geo/geo_node_spec.rb'
- 'ee/spec/requests/api/graphql/group/epic/epic_aggregate_query_spec.rb'
- 'ee/spec/requests/api/helpers_spec.rb'
- 'ee/spec/requests/api/internal/base_spec.rb'
- 'ee/spec/requests/api/license_spec.rb'
- 'ee/spec/requests/api/merge_request_approval_rules_spec.rb'
- 'ee/spec/requests/api/projects_spec.rb'
- 'ee/spec/requests/api/settings_spec.rb'
- 'ee/spec/requests/api/v3/github_spec.rb'
- 'ee/spec/requests/lfs_http_spec.rb'
- 'ee/spec/requests/projects/mirrors_controller_spec.rb'
- 'ee/spec/requests/smartcard_controller_spec.rb'
- 'ee/spec/serializers/user_analytics_entity_spec.rb'
- 'ee/spec/services/approval_rules/params_filtering_service_spec.rb'
- 'ee/spec/services/dashboard/operations/list_service_spec.rb'
- 'ee/spec/services/ee/audit_events/bulk_insert_service_spec.rb'
- 'ee/spec/services/ee/issues/create_from_vulnerability_data_service_spec.rb'
- 'ee/spec/services/ee/merge_requests/create_from_vulnerability_data_service_spec.rb'
- 'ee/spec/services/ee/merge_requests/refresh_service_spec.rb'
- 'ee/spec/services/ee/preview_markdown_service_spec.rb'
- 'ee/spec/services/elastic/indexing_control_service_spec.rb'
- 'ee/spec/services/epics/update_dates_service_spec.rb'
- 'ee/spec/services/epics/update_service_spec.rb'
- 'ee/spec/services/geo/file_registry_removal_service_spec.rb'
- 'ee/spec/services/group_saml/saml_provider/update_service_spec.rb'
- 'ee/spec/services/groups/create_service_spec.rb'
- 'ee/spec/services/groups/destroy_service_spec.rb'
- 'ee/spec/services/groups/update_service_spec.rb'
- 'ee/spec/services/projects/create_service_spec.rb'
- 'ee/spec/services/projects/destroy_service_spec.rb'
- 'ee/spec/services/projects/group_links/create_service_spec.rb'
- 'ee/spec/services/projects/group_links/destroy_service_spec.rb'
- 'ee/spec/services/projects/prometheus/alerts/notify_service_spec.rb'
- 'ee/spec/services/projects/transfer_service_spec.rb'
- 'ee/spec/services/projects/update_service_spec.rb'
- 'ee/spec/services/search/snippet_service_spec.rb'
- 'ee/spec/services/todo_service_spec.rb'
- 'ee/spec/support/shared_examples/requests/api/graphql/geo/registries_shared_examples.rb'
- 'ee/spec/workers/concerns/elastic/indexing_control_spec.rb'
- 'qa/qa/specs/features/api/3_create/repository/changing_repository_storage_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/gitaly/high_availability_spec.rb'
- 'qa/qa/specs/features/browser_ui/3_create/repository/move_project_create_fork_spec.rb'
- 'qa/qa/specs/features/browser_ui/5_package/maven_repository_spec.rb'
- 'qa/qa/specs/features/browser_ui/5_package/npm_registry_spec.rb'
- 'qa/qa/specs/features/browser_ui/6_release/pipeline/parent_child_pipelines_dependent_relationship_spec.rb'
- 'qa/qa/specs/features/browser_ui/6_release/pipeline/parent_child_pipelines_independent_relationship_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_ldap_sync_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb'
- 'qa/qa/specs/features/ee/browser_ui/6_release/multi-project_pipelines_spec.rb'
- 'qa/spec/resource/base_spec.rb'
- 'qa/spec/resource/events/project_spec.rb'
- 'qa/spec/scenario/test/integration/mattermost_spec.rb'
- 'spec/config/object_store_settings_spec.rb'
- 'spec/controllers/boards/issues_controller_spec.rb'
- 'spec/controllers/groups/milestones_controller_spec.rb'
- 'spec/controllers/groups/settings/repository_controller_spec.rb'
- 'spec/controllers/import/gitlab_controller_spec.rb'
- 'spec/controllers/projects/forks_controller_spec.rb'
- 'spec/controllers/projects/logs_controller_spec.rb'
- 'spec/controllers/projects/notes_controller_spec.rb'
- 'spec/controllers/projects/protected_branches_controller_spec.rb'
- 'spec/controllers/projects/serverless/functions_controller_spec.rb'
- 'spec/controllers/projects/settings/repository_controller_spec.rb'
- 'spec/controllers/projects/variables_controller_spec.rb'
- 'spec/controllers/repositories/git_http_controller_spec.rb'
- 'spec/controllers/sent_notifications_controller_spec.rb'
- 'spec/features/admin/admin_mode/login_spec.rb'
- 'spec/features/atom/users_spec.rb'
- 'spec/features/markdown/metrics_spec.rb'
- 'spec/features/merge_request/user_comments_on_diff_spec.rb'
- 'spec/features/merge_request/user_customizes_merge_commit_message_spec.rb'
- 'spec/features/merge_request/user_merges_immediately_spec.rb'
- 'spec/features/merge_request/user_merges_when_pipeline_succeeds_spec.rb'
- 'spec/features/merge_request/user_posts_notes_spec.rb'
- 'spec/features/merge_request/user_resolves_wip_mr_spec.rb'
- 'spec/features/merge_request/user_sees_avatar_on_diff_notes_spec.rb'
- 'spec/features/merge_request/user_sees_closing_issues_message_spec.rb'
- 'spec/features/merge_request/user_sees_discussions_spec.rb'
- 'spec/features/merge_request/user_sees_merge_request_pipelines_spec.rb'
- 'spec/features/merge_request/user_sees_pipelines_from_forked_project_spec.rb'
- 'spec/features/merge_request/user_sees_versions_spec.rb'
- 'spec/features/merge_request/user_suggests_changes_on_diff_spec.rb'
- 'spec/features/merge_request/user_tries_to_access_private_project_info_through_new_mr_spec.rb'
- 'spec/features/merge_request/user_views_diffs_file_by_file_spec.rb'
- 'spec/features/merge_request/user_views_diffs_spec.rb'
- 'spec/features/merge_requests/user_views_diffs_commit_spec.rb'
- 'spec/features/profiles/chat_names_spec.rb'
- 'spec/features/projects/classification_label_on_project_pages_spec.rb'
- 'spec/features/projects/commit/mini_pipeline_graph_spec.rb'
- 'spec/features/projects/files/user_browses_files_spec.rb'
- 'spec/features/projects/files/user_creates_directory_spec.rb'
- 'spec/features/projects/files/user_creates_files_spec.rb'
- 'spec/features/projects/files/user_deletes_files_spec.rb'
- 'spec/features/projects/files/user_replaces_files_spec.rb'
- 'spec/features/projects/import_export/export_file_spec.rb'
- 'spec/features/projects/issues/viewing_issues_with_external_authorization_enabled_spec.rb'
- 'spec/features/projects/pipelines/pipeline_spec.rb'
- 'spec/features/projects/wiki/user_views_wiki_pages_spec.rb'
- 'spec/finders/fork_targets_finder_spec.rb'
- 'spec/frontend/fixtures/merge_requests.rb'
- 'spec/graphql/features/authorization_spec.rb'
- 'spec/graphql/mutations/issues/update_spec.rb'
- 'spec/graphql/resolvers/commit_pipelines_resolver_spec.rb'
- 'spec/graphql/types/design_management/design_at_version_type_spec.rb'
- 'spec/graphql/types/snippet_type_spec.rb'
- 'spec/helpers/blame_helper_spec.rb'
- 'spec/helpers/groups_helper_spec.rb'
- 'spec/helpers/namespaces_helper_spec.rb'
- 'spec/lib/api/entities/nuget/dependency_group_spec.rb'
- 'spec/lib/api/entities/nuget/dependency_spec.rb'
- 'spec/lib/api/entities/nuget/metadatum_spec.rb'
- 'spec/lib/api/entities/nuget/search_result_spec.rb'
- 'spec/lib/banzai/filter/absolute_link_filter_spec.rb'
- 'spec/lib/banzai/filter/merge_request_reference_filter_spec.rb'
- 'spec/lib/banzai/issuable_extractor_spec.rb'
- 'spec/lib/banzai/object_renderer_spec.rb'
- 'spec/lib/banzai/pipeline/full_pipeline_spec.rb'
- 'spec/lib/container_registry/client_spec.rb'
- 'spec/lib/gitlab/alert_management/alert_params_spec.rb'
- 'spec/lib/gitlab/application_rate_limiter_spec.rb'
- 'spec/lib/gitlab/asciidoc/include_processor_spec.rb'
- 'spec/lib/gitlab/asciidoc_spec.rb'
- 'spec/lib/gitlab/auth/auth_finders_spec.rb'
- 'spec/lib/gitlab/auth/ldap/user_spec.rb'
- 'spec/lib/gitlab/auth/o_auth/auth_hash_spec.rb'
- 'spec/lib/gitlab/auth/o_auth/user_spec.rb'
- 'spec/lib/gitlab/auth/request_authenticator_spec.rb'
- 'spec/lib/gitlab/auth/saml/user_spec.rb'
- 'spec/lib/gitlab/auth_spec.rb'
- 'spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb'
- 'spec/lib/gitlab/background_migration/legacy_upload_mover_spec.rb'
- 'spec/lib/gitlab/background_migration/migrate_issue_trackers_sensitive_data_spec.rb'
- 'spec/lib/gitlab/background_migration_spec.rb'
- 'spec/lib/gitlab/bitbucket_import/importer_spec.rb'
- 'spec/lib/gitlab/ci/ansi2html_spec.rb'
- 'spec/lib/gitlab/ci/config/entry/service_spec.rb'
- 'spec/lib/gitlab/ci/config/external/file/local_spec.rb'
- 'spec/lib/gitlab/ci/config/external/processor_spec.rb'
- 'spec/lib/gitlab/ci/pipeline/chain/validate/repository_spec.rb'
- 'spec/lib/gitlab/ci/reports/accessibility_reports_comparer_spec.rb'
- 'spec/lib/gitlab/ci/yaml_processor_spec.rb'
- 'spec/lib/gitlab/cleanup/remote_uploads_spec.rb'
- 'spec/lib/gitlab/cross_project_access/class_methods_spec.rb'
- 'spec/lib/gitlab/danger/commit_linter_spec.rb'
- 'spec/lib/gitlab/danger/roulette_spec.rb'
- 'spec/lib/gitlab/danger/teammate_spec.rb'
- 'spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb'
- 'spec/lib/gitlab/database/custom_structure_spec.rb'
- 'spec/lib/gitlab/database/partitioning_migration_helpers/foreign_key_helpers_spec.rb'
- 'spec/lib/gitlab/database/partitioning_migration_helpers/table_management_helpers_spec.rb'
- 'spec/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin_spec.rb'
- 'spec/lib/gitlab/diff/file_collection/commit_spec.rb'
- 'spec/lib/gitlab/diff/file_collection/compare_spec.rb'
- 'spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb'
- 'spec/lib/gitlab/diff/file_spec.rb'
- 'spec/lib/gitlab/diff/position_collection_spec.rb'
- 'spec/lib/gitlab/diff/suggestion_spec.rb'
- 'spec/lib/gitlab/email/message/repository_push_spec.rb'
- 'spec/lib/gitlab/encoding_helper_spec.rb'
- 'spec/lib/gitlab/fogbugz_import/importer_spec.rb'
- 'spec/lib/gitlab/git/branch_spec.rb'
- 'spec/lib/gitlab/git/commit_spec.rb'
- 'spec/lib/gitlab/git/conflict/parser_spec.rb'
- 'spec/lib/gitlab/git/diff_spec.rb'
- 'spec/lib/gitlab/git/patches/collection_spec.rb'
- 'spec/lib/gitlab/git/patches/commit_patches_spec.rb'
- 'spec/lib/gitlab/git/patches/patch_spec.rb'
- 'spec/lib/gitlab/git/repository_spec.rb'
- 'spec/lib/gitlab/gitaly_client/commit_service_spec.rb'
- 'spec/lib/gitlab/gitaly_client/conflicts_service_spec.rb'
- 'spec/lib/gitlab/gitaly_client/operation_service_spec.rb'
- 'spec/lib/gitlab/gitaly_client/wiki_service_spec.rb'
- 'spec/lib/gitlab/gitlab_import/project_creator_spec.rb'
- 'spec/lib/gitlab/google_code_import/importer_spec.rb'
- 'spec/lib/gitlab/google_code_import/project_creator_spec.rb'
- 'spec/lib/gitlab/grape_logging/formatters/lograge_with_timestamp_spec.rb'
- 'spec/lib/gitlab/graphql/authorize/authorize_resource_spec.rb'
- 'spec/lib/gitlab/graphql/find_argument_in_parent_spec.rb'
- 'spec/lib/gitlab/graphql/pagination/keyset/connection_spec.rb'
- 'spec/lib/gitlab/hook_data/issuable_builder_spec.rb'
- 'spec/lib/gitlab/import_export/base/object_builder_spec.rb'
- 'spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb'
- 'spec/lib/gitlab/import_export/project/tree_restorer_spec.rb'
- 'spec/lib/gitlab/import_export/project/tree_saver_spec.rb'
- 'spec/lib/gitlab/incident_management/pager_duty/incident_issue_description_spec.rb'
- 'spec/lib/gitlab/issuable_sorter_spec.rb'
- 'spec/lib/gitlab/jira_import/issue_serializer_spec.rb'
- 'spec/lib/gitlab/jira_import/metadata_collector_spec.rb'
- 'spec/lib/gitlab/kubernetes/network_policy_spec.rb'
- 'spec/lib/gitlab/language_detection_spec.rb'
- 'spec/lib/gitlab/legacy_github_import/importer_spec.rb'
- 'spec/lib/gitlab/legacy_github_import/issuable_formatter_spec.rb'
- 'spec/lib/gitlab/legacy_github_import/milestone_formatter_spec.rb'
- 'spec/lib/gitlab/lograge/custom_options_spec.rb'
- 'spec/lib/gitlab/markdown_cache/redis/store_spec.rb'
- 'spec/lib/gitlab/metrics/dashboard/finder_spec.rb'
- 'spec/lib/gitlab/metrics/dashboard/processor_spec.rb'
- 'spec/lib/gitlab/phabricator_import/user_finder_spec.rb'
- 'spec/lib/gitlab/project_search_results_spec.rb'
- 'spec/lib/gitlab/prometheus/queries/matched_metric_query_spec.rb'
- 'spec/lib/gitlab/prometheus_client_spec.rb'
- 'spec/lib/gitlab/sidekiq_cluster_spec.rb'
- 'spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb'
- 'spec/lib/gitlab/sidekiq_middleware_spec.rb'
- 'spec/lib/gitlab/url_blocker_spec.rb'
- 'spec/lib/gitlab/usage_data/topology_spec.rb'
- 'spec/lib/json_web_token/rsa_token_spec.rb'
- 'spec/lib/mattermost/session_spec.rb'
- 'spec/lib/omni_auth/strategies/jwt_spec.rb'
- 'spec/lib/rspec_flaky/example_spec.rb'
- 'spec/lib/rspec_flaky/flaky_example_spec.rb'
- 'spec/lib/rspec_flaky/flaky_examples_collection_spec.rb'
- 'spec/lib/rspec_flaky/listener_spec.rb'
- 'spec/lib/rspec_flaky/report_spec.rb'
- 'spec/lib/sentry/client/event_spec.rb'
- 'spec/lib/sentry/client/issue_spec.rb'
- 'spec/mailers/notify_spec.rb'
- 'spec/migrations/20190924152703_migrate_issue_trackers_data_spec.rb'
- 'spec/migrations/20200123155929_remove_invalid_jira_data_spec.rb'
- 'spec/migrations/20200127090233_remove_invalid_issue_tracker_data_spec.rb'
- 'spec/migrations/20200130145430_reschedule_migrate_issue_trackers_data_spec.rb'
- 'spec/migrations/migrate_k8s_service_integration_spec.rb'
- 'spec/migrations/remove_duplicate_labels_from_project_spec.rb'
- 'spec/migrations/remove_orphaned_invited_members_spec.rb'
- 'spec/models/ability_spec.rb'
- 'spec/models/alert_management/alert_spec.rb'
- 'spec/models/blob_viewer/composer_json_spec.rb'
- 'spec/models/blob_viewer/gemspec_spec.rb'
- 'spec/models/blob_viewer/go_mod_spec.rb'
- 'spec/models/blob_viewer/package_json_spec.rb'
- 'spec/models/blob_viewer/podspec_json_spec.rb'
- 'spec/models/blob_viewer/podspec_spec.rb'
- 'spec/models/blob_viewer/route_map_spec.rb'
- 'spec/models/ci/build_spec.rb'
- 'spec/models/ci/daily_build_group_report_result_spec.rb'
- 'spec/models/ci/pipeline_spec.rb'
- 'spec/models/clusters/platforms/kubernetes_spec.rb'
- 'spec/models/commit_collection_spec.rb'
- 'spec/models/commit_with_pipeline_spec.rb'
- 'spec/models/concerns/featurable_spec.rb'
- 'spec/models/concerns/issuable_spec.rb'
- 'spec/models/design_management/design_at_version_spec.rb'
- 'spec/models/merge_request_diff_commit_spec.rb'
- 'spec/models/merge_request_spec.rb'
- 'spec/models/namespace_spec.rb'
- 'spec/models/note_spec.rb'
- 'spec/models/pages_domain_spec.rb'
- 'spec/models/project_services/jira_service_spec.rb'
- 'spec/models/project_services/microsoft_teams_service_spec.rb'
- 'spec/models/project_spec.rb'
- 'spec/models/repository_spec.rb'
- 'spec/models/snippet_repository_spec.rb'
- 'spec/models/wiki_page_spec.rb'
- 'spec/policies/design_management/design_policy_spec.rb'
- 'spec/policies/project_policy_spec.rb'
- 'spec/presenters/blob_presenter_spec.rb'
- 'spec/presenters/packages/detail/package_presenter_spec.rb'
- 'spec/requests/api/ci/runner_spec.rb'
- 'spec/requests/api/commits_spec.rb'
- 'spec/requests/api/deploy_keys_spec.rb'
- 'spec/requests/api/files_spec.rb'
- 'spec/requests/api/go_proxy_spec.rb'
- 'spec/requests/api/graphql/mutations/container_expiration_policy/update_spec.rb'
- 'spec/requests/api/graphql/mutations/discussions/toggle_resolve_spec.rb'
- 'spec/requests/api/graphql/mutations/merge_requests/create_spec.rb'
- 'spec/requests/api/graphql/mutations/notes/update/image_diff_note_spec.rb'
- 'spec/requests/api/graphql/mutations/snippets/update_spec.rb'
- 'spec/requests/api/graphql/project/container_expiration_policy_spec.rb'
- 'spec/requests/api/graphql/project/issue/designs/designs_spec.rb'
- 'spec/requests/api/graphql/project/issues_spec.rb'
- 'spec/requests/api/graphql/project/jira_import_spec.rb'
- 'spec/requests/api/graphql/project/repository_spec.rb'
- 'spec/requests/api/graphql/project/tree/tree_spec.rb'
- 'spec/requests/api/graphql/user_query_spec.rb'
- 'spec/requests/api/group_import_spec.rb'
- 'spec/requests/api/groups_spec.rb'
- 'spec/requests/api/helpers_spec.rb'
- 'spec/requests/api/internal/base_spec.rb'
- 'spec/requests/api/internal/pages_spec.rb'
- 'spec/requests/api/issues/get_group_issues_spec.rb'
- 'spec/requests/api/issues/get_project_issues_spec.rb'
- 'spec/requests/api/issues/issues_spec.rb'
- 'spec/requests/api/issues/post_projects_issues_spec.rb'
- 'spec/requests/api/notes_spec.rb'
- 'spec/requests/api/pages_domains_spec.rb'
- 'spec/requests/api/projects_spec.rb'
- 'spec/requests/api/snippets_spec.rb'
- 'spec/requests/groups/milestones_controller_spec.rb'
- 'spec/requests/lfs_http_spec.rb'
- 'spec/requests/rack_attack_global_spec.rb'
- 'spec/rubocop/cop/gitlab/finder_with_find_by_spec.rb'
- 'spec/rubocop/cop/rspec/any_instance_of_spec.rb'
- 'spec/serializers/accessibility_reports_comparer_entity_spec.rb'
- 'spec/serializers/accessibility_reports_comparer_serializer_spec.rb'
- 'spec/serializers/ci/daily_build_group_report_result_serializer_spec.rb'
- 'spec/serializers/commit_entity_spec.rb'
- 'spec/serializers/diff_file_base_entity_spec.rb'
- 'spec/serializers/environment_serializer_spec.rb'
- 'spec/serializers/import/bitbucket_provider_repo_entity_spec.rb'
- 'spec/serializers/import/bitbucket_server_provider_repo_entity_spec.rb'
- 'spec/serializers/import/fogbugz_provider_repo_entity_spec.rb'
- 'spec/serializers/paginated_diff_entity_spec.rb'
- 'spec/services/ci/create_pipeline_service_spec.rb'
- 'spec/services/ci/daily_build_group_report_result_service_spec.rb'
- 'spec/services/clusters/cleanup/project_namespace_service_spec.rb'
- 'spec/services/clusters/cleanup/service_account_service_spec.rb'
- 'spec/services/commits/commit_patch_service_spec.rb'
- 'spec/services/git/base_hooks_service_spec.rb'
- 'spec/services/git/process_ref_changes_service_spec.rb'
- 'spec/services/groups/group_links/create_service_spec.rb'
- 'spec/services/issuable/clone/content_rewriter_spec.rb'
- 'spec/services/merge_requests/conflicts/resolve_service_spec.rb'
- 'spec/services/merge_requests/create_service_spec.rb'
- 'spec/services/merge_requests/ff_merge_service_spec.rb'
- 'spec/services/merge_requests/rebase_service_spec.rb'
- 'spec/services/merge_requests/refresh_service_spec.rb'
- 'spec/services/merge_requests/squash_service_spec.rb'
- 'spec/services/metrics/dashboard/cluster_metrics_embed_service_spec.rb'
- 'spec/services/notes/create_service_spec.rb'
- 'spec/services/packages/create_dependency_service_spec.rb'
- 'spec/services/packages/npm/create_package_service_spec.rb'
- 'spec/services/pod_logs/elasticsearch_service_spec.rb'
- 'spec/services/preview_markdown_service_spec.rb'
- 'spec/services/projects/alerting/notify_service_spec.rb'
- 'spec/services/projects/fork_service_spec.rb'
- 'spec/services/projects/operations/update_service_spec.rb'
- 'spec/services/releases/create_service_spec.rb'
- 'spec/services/snippets/create_service_spec.rb'
- 'spec/services/snippets/update_service_spec.rb'
- 'spec/services/spam/spam_action_service_spec.rb'
- 'spec/services/spam/spam_verdict_service_spec.rb'
- 'spec/services/suggestions/create_service_spec.rb'
- 'spec/services/system_notes/design_management_service_spec.rb'
- 'spec/services/users/create_service_spec.rb'
- 'spec/services/web_hook_service_spec.rb'
- 'spec/services/wikis/create_attachment_service_spec.rb'
- 'spec/support/shared_contexts/finders/merge_requests_finder_shared_contexts.rb'
- 'spec/support/shared_contexts/policies/group_policy_shared_context.rb'
- 'spec/support/shared_examples/controllers/metrics/dashboard/prometheus_api_proxy_shared_examples.rb'
- 'spec/support/shared_examples/controllers/variables_shared_examples.rb'
- 'spec/support/shared_examples/graphql/design_fields_shared_examples.rb'
- 'spec/support/shared_examples/graphql/notes_on_noteables_shared_examples.rb'
- 'spec/support/shared_examples/models/chat_service_shared_examples.rb'
- 'spec/support/shared_examples/models/issuable_hook_data_shared_examples.rb'
- 'spec/support/shared_examples/requests/api/milestones_shared_examples.rb'
- 'spec/support/shared_examples/requests/api/nuget_packages_shared_examples.rb'
- 'spec/support/shared_examples/requests/api/pypi_packages_shared_examples.rb'
- 'spec/support/shared_examples/services/wikis/create_attachment_service_shared_examples.rb'
- 'spec/tasks/gitlab/backup_rake_spec.rb'
- 'spec/tooling/lib/tooling/helm3_client_spec.rb'
- 'spec/uploaders/file_mover_spec.rb'
- 'spec/validators/qualified_domain_array_validator_spec.rb'
- 'spec/workers/pages_domain_ssl_renewal_cron_worker_spec.rb'
- 'spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb'
- 'spec/workers/update_highest_role_worker_spec.rb'
# Offense count: 1121
# Cop supports --auto-correct.

View File

@ -214,7 +214,7 @@ gem 're2', '~> 1.2.0'
gem 'version_sorter', '~> 2.2.4'
# Export Ruby Regex to Javascript
gem 'js_regex', '~> 3.1'
gem 'js_regex', '~> 3.4'
# User agent parsing
gem 'device_detector'

View File

@ -149,7 +149,7 @@ GEM
activemodel (>= 4.0.0)
activesupport (>= 4.0.0)
mime-types (>= 1.16)
character_set (1.1.2)
character_set (1.4.0)
charlock_holmes (0.7.6)
childprocess (3.0.0)
chunky_png (1.3.5)
@ -562,9 +562,9 @@ GEM
multipart-post
oauth (~> 0.5, >= 0.5.0)
jmespath (1.4.0)
js_regex (3.1.1)
character_set (~> 1.1)
regexp_parser (~> 1.1)
js_regex (3.4.0)
character_set (~> 1.4)
regexp_parser (~> 1.5)
regexp_property_values (~> 0.3)
json (2.3.0)
json-jwt (1.11.0)
@ -889,7 +889,7 @@ GEM
redis-store (1.8.1)
redis (>= 4, < 5)
regexp_parser (1.5.1)
regexp_property_values (0.3.4)
regexp_property_values (0.3.5)
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
@ -1291,7 +1291,7 @@ DEPENDENCIES
icalendar
invisible_captcha (~> 0.12.1)
jira-ruby (~> 2.0.0)
js_regex (~> 3.1)
js_regex (~> 3.4)
json (~> 2.3.0)
json-schema (~> 2.8.0)
jwt (~> 2.1.0)

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

View File

@ -40,9 +40,6 @@ export default class BranchGraph {
}
prepareData(days, commits) {
let c = 0;
let j = 0;
let len = 0;
this.days = days;
this.commits = commits;
this.collectParents();
@ -53,38 +50,33 @@ export default class BranchGraph {
this.r = Raphael(this.element.get(0), cw, ch);
this.top = this.r.set();
this.barHeight = Math.max(this.graphHeight, this.unitTime * this.days.length + 320);
const ref = this.commits;
for (j = 0, len = ref.length; j < len; j += 1) {
c = ref[j];
if (c.id in this.parents) {
c.isParent = true;
this.commits = this.commits.reduce((acc, commit) => {
const updatedCommit = commit;
if (commit.id in this.parents) {
updatedCommit.isParent = true;
}
this.preparedCommits[c.id] = c;
this.markCommit(c);
}
acc.push(updatedCommit);
this.preparedCommits[commit.id] = commit;
this.markCommit(commit);
return acc;
}, []);
return this.collectColors();
}
collectParents() {
let j = 0;
let l = 0;
let len = 0;
let len1 = 0;
const ref = this.commits;
const results = [];
for (j = 0, len = ref.length; j < len; j += 1) {
const c = ref[j];
ref.forEach(c => {
this.mtime = Math.max(this.mtime, c.time);
this.mspace = Math.max(this.mspace, c.space);
const ref1 = c.parents;
const results1 = [];
for (l = 0, len1 = ref1.length; l < len1; l += 1) {
const p = ref1[l];
ref1.forEach(p => {
this.parents[p[0]] = true;
results1.push((this.mspace = Math.max(this.mspace, p[1])));
}
});
results.push(results1);
}
});
return results;
}
@ -114,7 +106,6 @@ export default class BranchGraph {
fill: '#444',
});
const ref = this.days;
for (mm = 0, len = ref.length; mm < len; mm += 1) {
const day = ref[mm];
if (cuday !== day[0] || cumonth !== day[1]) {
@ -295,7 +286,6 @@ export default class BranchGraph {
const { r } = this;
const ref = commit.parents;
const results = [];
for (i = 0, len = ref.length; i < len; i += 1) {
const parent = ref[i];
const parentCommit = this.preparedCommits[parent[0]];

View File

@ -1,40 +1,38 @@
<script>
import { GlEmptyState, GlLink, GlSprintf } from '@gitlab/ui';
import { mapState } from 'vuex';
export default {
props: {
clustersPath: {
type: String,
required: true,
},
helpPath: {
type: String,
required: true,
},
components: {
GlEmptyState,
GlLink,
GlSprintf,
},
computed: {
...mapState(['clustersPath', 'emptyImagePath', 'helpPath']),
},
};
</script>
<template>
<div class="row empty-state js-empty-state">
<div class="col-12">
<div class="text-content">
<h4 class="state-title text-center">
{{ s__('Serverless|Getting started with serverless') }}
</h4>
<p class="state-description">
{{
s__(`Serverless| In order to start using functions as a service,
you must first install Knative on your Kubernetes cluster.`)
}}
<a :href="helpPath"> {{ __('More information') }} </a>
</p>
<div class="text-center">
<a :href="clustersPath" class="btn btn-success">
{{ s__('Serverless|Install Knative') }}
</a>
</div>
</div>
</div>
</div>
<gl-empty-state
:svg-path="emptyImagePath"
:title="s__('Serverless|Getting started with serverless')"
:primary-button-link="clustersPath"
:primary-button-text="s__('Serverless|Install Knative')"
>
<template #description>
<gl-sprintf
:message="
s__(
'Serverless|In order to start using functions as a service, you must first install Knative on your Kubernetes cluster. %{linkStart}More information%{linkEnd}',
)
"
>
<template #link="{ content }">
<gl-link :href="helpPath">{{ content }}</gl-link>
</template>
</gl-sprintf>
</template>
</gl-empty-state>
</template>

View File

@ -23,14 +23,6 @@ export default {
required: false,
default: false,
},
clustersPath: {
type: String,
required: true,
},
helpPath: {
type: String,
required: true,
},
},
data() {
return {
@ -96,8 +88,6 @@ export default {
<area-chart v-if="hasPrometheusData" :graph-data="graphData" :container-width="elWidth" />
<missing-prometheus
v-if="!hasPrometheus || hasPrometheusMissingData"
:help-path="helpPath"
:clusters-path="clustersPath"
:missing-data="hasPrometheusMissingData"
/>
</section>

View File

@ -1,6 +1,6 @@
<script>
import { mapState, mapActions, mapGetters } from 'vuex';
import { GlLoadingIcon } from '@gitlab/ui';
import { GlLink, GlLoadingIcon } from '@gitlab/ui';
import { sprintf, s__ } from '~/locale';
import EnvironmentRow from './environment_row.vue';
import EmptyState from './empty_state.vue';
@ -10,24 +10,11 @@ export default {
components: {
EnvironmentRow,
EmptyState,
GlLink,
GlLoadingIcon,
},
props: {
clustersPath: {
type: String,
required: true,
},
helpPath: {
type: String,
required: true,
},
statusPath: {
type: String,
required: true,
},
},
computed: {
...mapState(['installed', 'isLoading', 'hasFunctionData']),
...mapState(['installed', 'isLoading', 'hasFunctionData', 'helpPath', 'statusPath']),
...mapGetters(['getFunctions']),
checkingInstalled() {
@ -118,14 +105,14 @@ export default {
}}
</p>
<div class="text-center">
<a :href="helpPath" class="btn btn-success">
{{ s__('Serverless|Learn more about Serverless') }}
</a>
<gl-link :href="helpPath" class="btn btn-success">{{
s__('Serverless|Learn more about Serverless')
}}</gl-link>
</div>
</div>
</div>
</div>
<empty-state v-else :clusters-path="clustersPath" :help-path="helpPath" />
<empty-state v-else />
</section>
</template>

View File

@ -1,5 +1,6 @@
<script>
import { GlDeprecatedButton, GlLink } from '@gitlab/ui';
import { mapState } from 'vuex';
import { s__ } from '../../locale';
export default {
@ -8,20 +9,13 @@ export default {
GlLink,
},
props: {
clustersPath: {
type: String,
required: true,
},
helpPath: {
type: String,
required: true,
},
missingData: {
type: Boolean,
required: true,
},
},
computed: {
...mapState(['clustersPath', 'helpPath']),
missingStateClass() {
return this.missingData ? 'missing-prometheus-state' : 'empty-prometheus-state';
},

View File

@ -6,6 +6,9 @@ import { createStore } from './store';
export default class Serverless {
constructor() {
if (document.querySelector('.js-serverless-function-details-page') != null) {
const entryPointData = document.querySelector('.js-serverless-function-details-page').dataset;
const store = createStore(entryPointData);
const {
serviceName,
serviceDescription,
@ -15,9 +18,7 @@ export default class Serverless {
servicePodcount,
serviceMetricsUrl,
prometheus,
clustersPath,
helpPath,
} = document.querySelector('.js-serverless-function-details-page').dataset;
} = entryPointData;
const el = document.querySelector('#js-serverless-function-details');
const service = {
@ -32,35 +33,26 @@ export default class Serverless {
this.functionDetails = new Vue({
el,
store: createStore(),
store,
render(createElement) {
return createElement(FunctionDetails, {
props: {
func: service,
hasPrometheus: prometheus !== undefined,
clustersPath,
helpPath,
},
});
},
});
} else {
const { statusPath, clustersPath, helpPath } = document.querySelector(
'.js-serverless-functions-page',
).dataset;
const entryPointData = document.querySelector('.js-serverless-functions-page').dataset;
const store = createStore(entryPointData);
const el = document.querySelector('#js-serverless-functions');
this.functions = new Vue({
el,
store: createStore(),
store,
render(createElement) {
return createElement(Functions, {
props: {
clustersPath,
helpPath,
statusPath,
},
});
return createElement(Functions);
},
});
}

View File

@ -7,12 +7,12 @@ import createState from './state';
Vue.use(Vuex);
export const createStore = () =>
export const createStore = (entryPointData = {}) =>
new Vuex.Store({
actions,
getters,
mutations,
state: createState(),
state: createState(entryPointData),
});
export default createStore();
export default createStore;

View File

@ -1,14 +1,22 @@
export default () => ({
export default (
initialState = { clustersPath: null, helpPath: null, emptyImagePath: null, statusPath: null },
) => ({
clustersPath: initialState.clustersPath,
error: null,
helpPath: initialState.helpPath,
installed: 'checking',
isLoading: true,
// functions
functions: [],
hasFunctionData: true,
statusPath: initialState.statusPath,
// function_details
hasPrometheus: true,
hasPrometheusData: false,
graphData: {},
// empty_state
emptyImagePath: initialState.emptyImagePath,
});

View File

@ -7,7 +7,8 @@
.serverless-functions-page.js-serverless-functions-page{ data: { status_path: status_path,
installed: @installed,
clusters_path: clusters_path,
help_path: help_page_path('user/project/clusters/serverless/index') } }
help_path: help_page_path('user/project/clusters/serverless/index'),
empty_image_path: image_path('illustrations/empty-state/empty-serverless-lg.svg') } }
%div{ class: [('limit-container-width' unless fluid_layout)] }
.js-serverless-survey-banner{ data: { user_name: current_user.name, user_email: current_user.email } }
@ -15,5 +16,5 @@
.js-serverless-functions-notice
.flash-container
.top-area.adjust.d-flex.justify-content-center
.top-area.adjust.d-flex.justify-content-center.gl-border-none
.serverless-functions-table#js-serverless-functions

View File

@ -0,0 +1,5 @@
---
title: Add serverless empty state illustration
merge_request: 36762
author:
type: changed

View File

@ -0,0 +1,5 @@
---
title: Use ES6 methods instead of `for` loops
merge_request: 37324
author: allenlai18
type: other

View File

@ -0,0 +1,5 @@
---
title: Add external column to custom emoji table
merge_request: 37346
author: Rajendra Kadam
type: added

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
class AddExternalToCustomEmoji < ActiveRecord::Migration[6.0]
DOWNTIME = false
def change
add_column :custom_emoji, :external, :boolean, default: true, null: false
end
end

View File

@ -10918,6 +10918,7 @@ CREATE TABLE public.custom_emoji (
updated_at timestamp with time zone NOT NULL,
name text NOT NULL,
file text NOT NULL,
external boolean DEFAULT true NOT NULL,
CONSTRAINT check_8c586dd507 CHECK ((char_length(name) <= 36)),
CONSTRAINT check_dd5d60f1fb CHECK ((char_length(file) <= 255))
);
@ -23998,5 +23999,6 @@ COPY "schema_migrations" (version) FROM STDIN;
20200718040100
20200718040200
20200718040300
20200720154123
\.

View File

@ -1,3 +1,9 @@
---
stage: Release
group: Release Management
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# Deployment safety
Deployment jobs can be more sensitive than other jobs in a pipeline,

View File

@ -1,5 +1,7 @@
---
type: reference
stage: Release
group: Release Management
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
# CI/CD Environment Variables

View File

@ -324,8 +324,9 @@ As in other list types, click the trash icon to remove a list.
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/11403) in GitLab 12.7
You can set Work In Progress (WIP) limits per issues list. When a limit is set, the list's header
shows the number of issues in the list and the soft limit of issues.
You can set a Work In Progress (WIP) limit for each issue list on an issue board. When a limit is
set, the list's header shows the number of issues in the list and the soft limit of issues.
You cannot set a WIP limit on the default lists (**Open** and **Closed**).
Examples:

View File

@ -47,6 +47,7 @@ module Gitlab
push_frontend_feature_flag(:monaco_ci, default_enabled: false)
push_frontend_feature_flag(:snippets_edit_vue, default_enabled: false)
push_frontend_feature_flag(:webperf_experiment, default_enabled: false)
push_frontend_feature_flag(:snippets_binary_blob, default_enabled: false)
end
# Exposes the state of a feature flag to the frontend code.

View File

@ -21387,9 +21387,6 @@ msgstr ""
msgid "ServerlessURL|Copy URL"
msgstr ""
msgid "Serverless| In order to start using functions as a service, you must first install Knative on your Kubernetes cluster."
msgstr ""
msgid "Serverless|Getting started with serverless"
msgstr ""
@ -21399,6 +21396,9 @@ msgstr ""
msgid "Serverless|If you believe none of these apply, please check back later as the function data may be in the process of becoming available."
msgstr ""
msgid "Serverless|In order to start using functions as a service, you must first install Knative on your Kubernetes cluster. %{linkStart}More information%{linkEnd}"
msgstr ""
msgid "Serverless|Install Knative"
msgstr ""

View File

@ -104,6 +104,14 @@ RSpec.describe 'User uses header search field', :js do
let(:scope_name) { 'All GitLab' }
end
it 'displays search options' do
page.within('.search-input-wrap') do
fill_in('search', with: 'test')
end
expect(page).to have_selector(scoped_search_link('test'))
end
context 'when searching through the search field' do
before do
create(:issue, project: project, title: 'project issue')
@ -122,9 +130,41 @@ RSpec.describe 'User uses header search field', :js do
end
context 'when user is in a project scope' do
include_examples 'search field examples' do
let(:url) { project_path(project) }
let(:scope_name) { project.name }
context 'and it belongs to a group' do
let(:group) { create(:group) }
let(:project) { create(:project, namespace: group) }
include_examples 'search field examples' do
let(:url) { project_path(project) }
let(:scope_name) { project.name }
end
it 'displays search options' do
page.within('.search-input-wrap') do
fill_in('search', with: 'test')
end
expect(page).to have_selector(scoped_search_link('test'))
expect(page).to have_selector(scoped_search_link('test', group_id: group.id))
expect(page).to have_selector(scoped_search_link('test', project_id: project.id, group_id: group.id))
end
end
context 'and it belongs to a user' do
include_examples 'search field examples' do
let(:url) { project_path(project) }
let(:scope_name) { project.name }
end
it 'displays search options' do
page.within('.search-input-wrap') do
fill_in('search', with: 'test')
end
expect(page).to have_selector(scoped_search_link('test'))
expect(page).not_to have_selector(scoped_search_link('test', group_id: project.namespace_id))
expect(page).to have_selector(scoped_search_link('test', project_id: project.id))
end
end
end
@ -140,6 +180,16 @@ RSpec.describe 'User uses header search field', :js do
let(:url) { group_path(group) }
let(:scope_name) { group.name }
end
it 'displays search options' do
page.within('.search-input-wrap') do
fill_in('search', with: 'test')
end
expect(page).to have_selector(scoped_search_link('test'))
expect(page).to have_selector(scoped_search_link('test', group_id: group.id))
expect(page).not_to have_selector(scoped_search_link('test', project_id: project.id))
end
end
context 'when user is in a subgroup scope' do
@ -156,5 +206,25 @@ RSpec.describe 'User uses header search field', :js do
let(:url) { group_path(subgroup) }
let(:scope_name) { subgroup.name }
end
it 'displays search options' do
page.within('.search-input-wrap') do
fill_in('search', with: 'test')
end
expect(page).to have_selector(scoped_search_link('test'))
expect(page).to have_selector(scoped_search_link('test', group_id: subgroup.id))
expect(page).not_to have_selector(scoped_search_link('test', project_id: project.id))
end
end
def scoped_search_link(term, project_id: nil, group_id: nil)
# search_path will accept group_id and project_id but the order does not match
# what is expected in the href, so the variable must be built manually
href = search_path(search: term)
href.concat("&project_id=#{project_id}") if project_id
href.concat("&group_id=#{group_id}") if group_id
".dropdown a[href='#{href}']"
end
end

View File

@ -0,0 +1,20 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`EmptyStateComponent should render content 1`] = `
"<section class=\\"row empty-state text-center\\">
<div class=\\"col-12\\">
<div class=\\"svg-250 svg-content\\"><img src=\\"/image.svg\\" alt=\\"Getting started with serverless\\" class=\\"gl-max-w-full\\"></div>
</div>
<div class=\\"col-12\\">
<div class=\\"text-content gl-mx-auto gl-my-0 gl-p-5\\">
<h1 class=\\"h4\\">Getting started with serverless</h1>
<p>In order to start using functions as a service, you must first install Knative on your Kubernetes cluster. <gl-link-stub href=\\"/help\\">More information</gl-link-stub>
</p>
<div>
<gl-button-stub category=\\"tertiary\\" variant=\\"success\\" size=\\"medium\\" icon=\\"\\" href=\\"/clusters\\">Install Knative</gl-button-stub>
<!---->
</div>
</div>
</div>
</section>"
`;

View File

@ -0,0 +1,25 @@
import { createStore } from '~/serverless/store';
import { GlEmptyState, GlSprintf } from '@gitlab/ui';
import { shallowMount } from '@vue/test-utils';
import EmptyStateComponent from '~/serverless/components/empty_state.vue';
describe('EmptyStateComponent', () => {
let wrapper;
beforeEach(() => {
const store = createStore({
clustersPath: '/clusters',
helpPath: '/help',
emptyImagePath: '/image.svg',
});
wrapper = shallowMount(EmptyStateComponent, { store, stubs: { GlEmptyState, GlSprintf } });
});
afterEach(() => {
wrapper.destroy();
});
it('should render content', () => {
expect(wrapper.html()).toMatchSnapshot();
});
});

View File

@ -13,7 +13,7 @@ describe('functionDetailsComponent', () => {
localVue = createLocalVue();
localVue.use(Vuex);
store = createStore();
store = createStore({ clustersPath: '/clusters', helpPath: '/help' });
});
afterEach(() => {
@ -38,8 +38,6 @@ describe('functionDetailsComponent', () => {
propsData: {
func: serviceStub,
hasPrometheus: false,
clustersPath: '/clusters',
helpPath: '/help',
},
});
@ -65,8 +63,6 @@ describe('functionDetailsComponent', () => {
propsData: {
func: serviceStub,
hasPrometheus: false,
clustersPath: '/clusters',
helpPath: '/help',
},
});
@ -82,8 +78,6 @@ describe('functionDetailsComponent', () => {
propsData: {
func: serviceStub,
hasPrometheus: false,
clustersPath: '/clusters',
helpPath: '/help',
},
});
@ -99,8 +93,6 @@ describe('functionDetailsComponent', () => {
propsData: {
func: serviceStub,
hasPrometheus: false,
clustersPath: '/clusters',
helpPath: '/help',
},
});

View File

@ -25,55 +25,31 @@ describe('functionsComponent', () => {
localVue = createLocalVue();
localVue.use(Vuex);
store = createStore();
store = createStore({});
});
afterEach(() => {
component.vm.$destroy();
component.destroy();
axiosMock.restore();
});
it('should render empty state when Knative is not installed', () => {
store.dispatch('receiveFunctionsSuccess', { knative_installed: false });
component = shallowMount(functionsComponent, {
localVue,
store,
propsData: {
clustersPath: '',
helpPath: '',
statusPath: '',
},
});
component = shallowMount(functionsComponent, { localVue, store });
expect(component.find(EmptyState).exists()).toBe(true);
});
it('should render a loading component', () => {
store.dispatch('requestFunctionsLoading');
component = shallowMount(functionsComponent, {
localVue,
store,
propsData: {
clustersPath: '',
helpPath: '',
statusPath: '',
},
});
component = shallowMount(functionsComponent, { localVue, store });
expect(component.find(GlLoadingIcon).exists()).toBe(true);
});
it('should render empty state when there is no function data', () => {
store.dispatch('receiveFunctionsNoDataSuccess', { knative_installed: true });
component = shallowMount(functionsComponent, {
localVue,
store,
propsData: {
clustersPath: '',
helpPath: '',
statusPath: '',
},
});
component = shallowMount(functionsComponent, { localVue, store });
expect(
component.vm.$el
@ -91,30 +67,17 @@ describe('functionsComponent', () => {
...mockServerlessFunctions,
knative_installed: 'checking',
});
component = shallowMount(functionsComponent, {
localVue,
store,
propsData: {
clustersPath: '',
helpPath: '',
statusPath: '',
},
});
component = shallowMount(functionsComponent, { localVue, store });
expect(component.find('.js-functions-wrapper').exists()).toBe(true);
expect(component.find('.js-functions-loader').exists()).toBe(true);
});
it('should render the functions list', () => {
component = shallowMount(functionsComponent, {
localVue,
store,
propsData: {
clustersPath: 'clustersPath',
helpPath: 'helpPath',
statusPath,
},
});
store = createStore({ clustersPath: 'clustersPath', helpPath: 'helpPath', statusPath });
component = shallowMount(functionsComponent, { localVue, store });
component.vm.$store.dispatch('receiveFunctionsSuccess', mockServerlessFunctions);

View File

@ -1,25 +1,23 @@
import { createStore } from '~/serverless/store';
import { GlDeprecatedButton } from '@gitlab/ui';
import { shallowMount } from '@vue/test-utils';
import missingPrometheusComponent from '~/serverless/components/missing_prometheus.vue';
const createComponent = missingData =>
shallowMount(missingPrometheusComponent, {
propsData: {
clustersPath: '/clusters',
helpPath: '/help',
missingData,
},
});
describe('missingPrometheusComponent', () => {
let wrapper;
const createComponent = missingData => {
const store = createStore({ clustersPath: '/clusters', helpPath: '/help' });
wrapper = shallowMount(missingPrometheusComponent, { store, propsData: { missingData } });
};
afterEach(() => {
wrapper.destroy();
});
it('should render missing prometheus message', () => {
wrapper = createComponent(false);
createComponent(false);
const { vm } = wrapper;
expect(vm.$el.querySelector('.state-description').innerHTML.trim()).toContain(
@ -30,7 +28,7 @@ describe('missingPrometheusComponent', () => {
});
it('should render no prometheus data message', () => {
wrapper = createComponent(true);
createComponent(true);
const { vm } = wrapper;
expect(vm.$el.querySelector('.state-description').innerHTML.trim()).toContain(

View File

@ -8,6 +8,7 @@ RSpec.describe CustomEmoji do
it { is_expected.to have_db_column(:file) }
it { is_expected.to validate_length_of(:name).is_at_most(36) }
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to have_db_column(:external) }
end
describe 'exclusion of duplicated emoji' do