Skip to content

Add the RSpec/FactoryBot/ExcessiveCreateList Rubocop Cop

David Dieulivol requested to merge 413996-excessive_create_list_rubocop_cop into master

From Draft to Ready

  • Resolve the discussions in the MR
  • Add an autocorrector?
  • Test against an actual codebase (either the playground in this project, or gitlab-org/gitlab locally)

Context

Closes gitlab-org/gitlab#413996 (closed)

What does this MR do and why?

Introduces a cop to flag create_list with too many items created:

# bad (assuming MaxAmount: 20 - defaults to 10)
create_list(:merge_request, 1000, state: :opened)

# good (assuming MaxAmount: 20 - defaults to 10)
create_list(:merge_request, 15, state: :opened)

Test against gitlab-org/gitlab locally

 $ be rubocop --only RSpec/FactoryBot/ExcessiveCreateList .

Results look good 🎉 :

Click to expand
ee/spec/lib/ee/gitlab/usage_data_spec.rb: RSpec/FactoryBot/CreateList has the wrong namespace - should be FactoryBot
ee/spec/lib/ee/gitlab/usage_data_spec.rb: RSpec/FactoryBot/CreateList has the wrong namespace - should be FactoryBot
Inspecting 31795 files

[...]

Offenses:

ee/spec/controllers/groups/hooks_controller_spec.rb:111:36: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:web_hook_log, 21, web_hook: hook)
                                   ^^
ee/spec/controllers/projects/vulnerability_feedback_controller_spec.rb:91:77: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        let_it_be(:additional_vulns) { create_list(:vulnerability_feedback, 60, :merge_request, :dependency_scanning, project: project, author: user, pipeline: pipeline_1, merge_request: merge_request) }
                                                                            ^^
ee/spec/features/search/elastic/global_search_spec.rb:20:27: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:issue, 21, project: project, title: 'initial')
                          ^^
ee/spec/features/search/elastic/global_search_spec.rb:38:26: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:note, 21, noteable: issue, project: project, note: 'foo')
                         ^^
ee/spec/frontend/fixtures/on_demand_dast_scans.rb:55:13: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
            30,
            ^^
ee/spec/graphql/types/dast_scanner_profile_type_spec.rb:94:44: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:dast_scanner_profile, 30, project: project)
                                           ^^
ee/spec/graphql/types/dast_site_profile_type_spec.rb:174:41: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:dast_site_profile, 30, project: project)
                                        ^^
ee/spec/models/audit_events/external_audit_event_destination_spec.rb:21:51: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:audit_events_streaming_header, 20, external_audit_event_destination: subject)
                                                  ^^
ee/spec/models/audit_events/external_audit_event_destination_spec.rb:27:51: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:audit_events_streaming_header, 21, external_audit_event_destination: subject)
                                                  ^^
ee/spec/models/audit_events/instance_external_audit_event_destination_spec.rb:20:60: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:instance_audit_events_streaming_header, 20, instance_external_audit_event_destination: subject)
                                                           ^^
ee/spec/models/audit_events/instance_external_audit_event_destination_spec.rb:26:60: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:instance_audit_events_streaming_header, 21, instance_external_audit_event_destination: subject)
                                                           ^^
ee/spec/models/license_spec.rb:70:30: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
          create_list(:user, 12)
                             ^^
ee/spec/models/license_spec.rb:291:32: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
            create_list(:user, 12)
                               ^^
ee/spec/models/package_metadata/advisory_spec.rb:66:57: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        let(:identifiers) { create_list(:pm_identifier, 11, :cve) }
                                                        ^^
ee/spec/models/package_metadata/checkpoint_spec.rb:64:53: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
    let(:checkpoints) { create_list(:pm_checkpoint, 12) }
                                                    ^^
ee/spec/requests/projects/merge_requests_controller_spec.rb:62:35: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:merge_request, 20, :unique_branches, target_project: project, source_project: project).each do |mr|
                                  ^^
ee/spec/services/ci/llm/generate_config_service_spec.rb:69:31: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:message, 20, content: 'a' * 1000, user: user, project: project)
                              ^^
ee/spec/support/protected_tags/access_control_shared_examples.rb:80:32: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
    users = create_list(:user, 21)
                               ^^
ee/spec/support/shared_examples/features/protected_branches_access_control_shared_examples.rb:97:36: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        users = create_list(:user, 21)
                                   ^^
ee/spec/views/admin/application_settings/_elasticsearch_form.html.haml_spec.rb:210:55: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list :elasticsearch_indexed_namespace, 60
                                                      ^^
ee/spec/views/admin/application_settings/_elasticsearch_form.html.haml_spec.rb:236:53: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list :elasticsearch_indexed_project, 60
                                                    ^^
spec/controllers/admin/clusters_controller_spec.rb:61:35: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
            create_list(:cluster, 30, :provided_by_gcp, :production_environment, :instance)
                                  ^^
spec/controllers/autocomplete_controller_spec.rb:115:28: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:user, 25)
                           ^^
spec/controllers/groups/clusters_controller_spec.rb:66:35: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
            create_list(:cluster, 30, :provided_by_gcp, :production_environment, cluster_type: :group_type, groups: [group])
                                  ^^
spec/controllers/projects/clusters_controller_spec.rb:60:35: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
            create_list(:cluster, 30, :provided_by_gcp, :production_environment, projects: [project])
                                  ^^
spec/controllers/projects/feature_flags_controller_spec.rb:36:68: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      let!(:feature_flags) { create_list(:operations_feature_flag, 50, project: project) }
                                                                   ^^
spec/controllers/projects/hooks_controller_spec.rb:105:34: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:web_hook_log, 21, web_hook: hook)
                                 ^^
spec/docs_screenshots/container_registry_docs.rb:42:44: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:container_repository, 12, project: project)
                                           ^^
spec/docs_screenshots/container_registry_docs.rb:69:44: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:container_repository, 12, project: project)
                                           ^^
spec/features/boards/boards_spec.rb:141:37: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:labeled_issue, 30, project: project, labels: [planning])
                                    ^^
spec/features/boards/boards_spec.rb:401:39: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
          create_list(:labeled_issue, 30, project: project, labels: [planning, testing])
                                      ^^
spec/features/issues/csv_spec.rb:58:25: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
    create_list(:issue, 30, project: project, author: user)
                        ^^
spec/features/issues/user_edits_issue_spec.rb:16:52: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
  let_it_be(:milestones) { create_list(:milestone, 25, project: project_with_milestones) }
                                                   ^^
spec/features/issues/user_scrolls_to_deeplinked_note_spec.rb:9:54: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
  let_it_be(:comments) { create_list(:note_on_issue, 20, noteable: issue, project: project, note: 'spacer note') }
                                                     ^^
spec/features/projects/container_registry_spec.rb:175:42: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:container_repository, 12, project: project)
                                         ^^
spec/features/projects/work_items/work_item_spec.rb:13:52: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
  let_it_be(:milestones) { create_list(:milestone, 25, project: project) }
                                                   ^^
spec/features/users/overview_spec.rb:130:31: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:project, 11, :private, namespace: user.namespace, creator: user) do |project|
                              ^^
spec/features/users/overview_spec.rb:192:46: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      let(:other_users) { create_list(:user, 21) }
                                             ^^
spec/features/users/overview_spec.rb:255:46: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      let(:other_users) { create_list(:user, 21) }
                                             ^^
spec/frontend/fixtures/timelogs.rb:43:54: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        let_it_be(:timelogs) { create_list(:timelog, 30, user: developer, issue: issue, time_spent: 4 * 60 * 60) }
                                                     ^^
spec/helpers/issuables_helper_spec.rb:113:50: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        let_it_be(:issues) { create_list(:issue, 101, project: project, assignees: [user]) }
                                                 ^^^
spec/helpers/issuables_helper_spec.rb:131:48: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      let_it_be(:issues) { create_list(:issue, 100, project: project, assignees: [user]) }
                                               ^^^
spec/lib/gitlab/database/background_migration/batched_migration_spec.rb:720:56: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:batched_background_migration_job, 11, **common_attrs.merge(started_at: end_time - 10.seconds))
                                                       ^^
spec/lib/gitlab/database/consistency_checker_spec.rb:53:33: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:namespace, 50) # This will also create Ci::NameSpaceMirror objects
                                ^^
spec/lib/gitlab/database/consistency_checker_spec.rb:107:33: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:namespace, 50) # This will also create Ci::NameSpaceMirror objects
                                ^^
spec/lib/gitlab/database/consistency_checker_spec.rb:134:33: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:namespace, 50) # This will also create Ci::NameSpaceMirror objects
                                ^^
spec/lib/gitlab/database/consistency_checker_spec.rb:161:33: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:namespace, 50) # This will also create Ci::NameSpaceMirror objects
                                ^^
spec/models/project_spec.rb:7378:36: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        users = create_list(:user, 11, :with_sign_ins)
                                   ^^
spec/models/user_spec.rb:2726:61: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
    let_it_be(:admin_issue_board_list) { create_list(:user, 12, :admin, :with_sign_ins) }
                                                            ^^
spec/requests/api/graphql/mutations/packages/destroy_files_spec.rb:74:38: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
          create_list(:package_file, 99, package: package)
                                     ^^
spec/services/database/consistency_check_service_spec.rb:49:31: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      create_list(:namespace, 50) # This will also create Ci::NameSpaceMirror objects
                              ^^
spec/services/database/consistency_check_service_spec.rb:83:33: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:namespace, 50) # This will also create Ci::NameSpaceMirror objects
                                ^^
spec/services/database/consistency_check_service_spec.rb:144:33: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        create_list(:namespace, 30) # This will also create Ci::NameSpaceMirror objects
                                ^^
spec/services/groups/transfer_service_spec.rb:674:62: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
            let_it_be(:project_list) { create_list(:project, 11, :repository, :private, namespace: group) }
                                                             ^^
spec/services/notification_service_spec.rb:3019:46: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
    let_it_be(:admins) { create_list(:admin, 12, :with_sign_ins) }
                                             ^^
spec/services/pages/migrate_from_legacy_storage_service_spec.rb:89:42: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
        projects = create_list(:project, 20)
                                         ^^
spec/services/todo_service_spec.rb:1363:38: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
          users = create_list(:user, 12, :with_sign_ins)
                                     ^^
spec/services/todo_service_spec.rb:1399:38: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
          users = create_list(:user, 12, :with_sign_ins)
                                     ^^
spec/support/shared_examples/services/notification_service_shared_examples.rb:69:37: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
  let(:owners) { create_list(:user, 12, :with_sign_ins) }
                                    ^^
spec/support/shared_examples/services/notification_service_shared_examples.rb:91:42: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
  let(:maintainers) { create_list(:user, 12, :with_sign_ins) }
                                         ^^
spec/workers/ssh_keys/expired_notification_worker_spec.rb:18:56: C: RSpec/FactoryBot/ExcessiveCreateList: Avoid using create_list with more than 10 items.
      let_it_be_with_reload(:keys) { create_list(:key, 20, :expired_today, user: user) }
                                                       ^^
Edited by David Dieulivol

Merge request reports