Lint factories per associated model class
What does this MR do and why?
This MR removes the huge ee/spec/models/factories_spec.rb in favor of linting factories per associated model.
Linting is run in a isolated, outer context starting with Lint factories for <described_class>
.
Contributes to #436420.
What's the impact?
- Huge
ee/spec/models/factories_spec.rb
is removed andspec/support/shared_examples/lint_factories_shared_examples.rb
added - The factory lints are split across model/lib specs
- For example,
spec/models/user_spec.rb
gained 58 more examples (1408 -> 1466 examples) - Linting factories multiple times is avoided by ignoring certain example group callers (frontend fixtures, EE extensions, concerns)
- Time added to model spec by lint factories is bearable. The biggest jump I saw was ~30 seconds for 10 minutes total time.
- For example,
- In CI, factories are now linted across multiple CI jobs (thanks to Knapsack)
- Because not every model has a spec (yet) we are missing 59 factory specs (985 -> 926)
Click to expand
--- before-plain.txt 2024-04-23 14:39:34.010520878 +0200
+++ /home/peter/devel/gitlab/engineering-productivity-team/.local/factories-lint-after.txt 2024-04-23 14:35:55.769655194 +0200
@@ -1,7 +1,6 @@
abuse_event factory
abuse_report_event factory
abuse_report factory
- abuse_report_label factory
abuse_trust_score factory
achievement factory
active_milestone factory
@@ -40,13 +39,10 @@
approval_merge_request_rule factory
approval_merge_request_rules_approved_approver factory
approval_merge_request_rules_group factory
- approval_merge_request_rule_source factory
approval_policy_rule factory
approval_project_rule factory
approval_project_rules_group factory
approval_project_rules_protected_branch factory
- approval_project_rules_user factory
- approver factory
approver_group factory
asana_integration factory
assembla_integration factory
@@ -68,10 +64,7 @@
aws_role factory
background_migration_job factory
backlog_list factory
- backup_compression_options factory
backup_options factory
- backup_skippable_operations factory
- backup_skippable_tasks factory
bamboo_integration factory
banned_user factory
batched_background_migration factory
@@ -149,7 +142,6 @@
ci_reports_sbom_report factory
ci_reports_sbom_source factory
ci_reports_security_aggregated_reports factory
- ci_reports_security_evidence factory
ci_reports_security_finding factory
ci_reports_security_finding_key factory
ci_reports_security_finding_signature factory
@@ -186,7 +178,6 @@
ci_unit_test_failure factory
ci_variable factory
clickup_integration factory
- clientless_access_token factory
closed_issue_event factory
closed_issue factory
closed_iteration factory
@@ -206,10 +197,6 @@
cluster_provider_gcp factory
clusters_integrations_prometheus factory
code_owner_rule factory
- codequality_degradation_1 factory
- codequality_degradation_2 factory
- codequality_degradation_3 factory
- codequality_degradation factory
color factory
commit factory
commit_status factory
@@ -278,7 +265,6 @@
debian_temporary_with_changes factory
debian_temporary_with_files factory
default_plan factory
- dependency factory
dependency_list_export factory
dependency_proxy_blob factory
dependency_proxy_group_setting factory
@@ -317,8 +303,6 @@
discussion_note_on_personal_snippet factory
discussion_note_on_project_snippet factory
discussion_note_on_vulnerability factory
- doorkeeper_access_grant factory
- doorkeeper_access_token factory
doorkeeper_application factory
dora_configuration factory
dora_daily_metrics factory
@@ -354,18 +338,10 @@
epic factory
epic_issue factory
epic_list factory
- epic_tree_node factory
epic_user_preference factory
error_tracking_client_key factory
error_tracking_error_event factory
error_tracking_error factory
- error_tracking_open_api_error_event factory
- error_tracking_open_api_error factory
- error_tracking_open_api_error_stats factory
- error_tracking_project factory
- error_tracking_sentry_detailed_error factory
- error_tracking_sentry_error_event factory
- error_tracking_sentry_error factory
event factory
evidence factory
ewm_integration factory
@@ -377,7 +353,6 @@
external_status_checks_protected_branch factory
external_user factory
external_wiki_integration factory
- feature_flag_issue factory
file_diff_position factory
file_uploader factory
finding_link factory
@@ -390,24 +365,17 @@
generic_package factory
geo_cache_invalidation_event factory
geo_ci_secure_file_registry factory
- geo_ci_secure_file_state factory
geo_container_repository_registry factory
- geo_container_repository_state factory
geo_dependency_proxy_blob_registry factory
- geo_dependency_proxy_blob_state factory
geo_dependency_proxy_manifest_registry factory
- geo_dependency_proxy_manifest_state factory
geo_design_management_repository_registry factory
geo_design_management_repository_state factory
- geo_event factory
geo_event_log factory
geo_event_log_state factory
geo_group_wiki_repository_registry factory
- geo_group_wiki_repository_state factory
geo_job_artifact_registry factory
geo_job_artifact_state factory
geo_lfs_object_registry factory
- geo_lfs_object_state factory
geo_merge_request_diff_registry factory
geo_node factory
geo_node_namespace_link factory
@@ -415,10 +383,8 @@
geo_node_with_selective_sync_for factory
geo_package_file_registry factory
geo_pages_deployment_registry factory
- geo_pages_deployment_state factory
geo_pipeline_artifact_registry factory
geo_project_repository_registry factory
- geo_project_state factory
geo_project_wiki_repository_registry factory
geo_repositories_changed_event factory
geo_secondary_usage_data factory
@@ -428,12 +394,8 @@
geo_upload_state factory
geo_wiki_repository_state factory
ghost_user_migration factory
- gitaly_commit_author factory
- gitaly_commit factory
- gitaly_tag factory
git_guardian_integration factory
github_integration factory
- gitlab_license factory
gitlab_slack_application_integration factory
gitlab_subscription_add_on factory
gitlab_subscription_add_on_purchase factory
@@ -512,11 +474,6 @@
incident_management_timeline_event factory
incident_management_timeline_event_tag factory
incident_management_timeline_event_tag_link factory
- index_status factory
- insight factory
- insights_issues_by_team factory
- insights_issues_by_team_per_month factory
- insights_merge_requests_per_month factory
instance_amazon_s3_configuration factory
instance_audit_events_streaming_header factory
instance_configuration factory
@@ -560,7 +517,6 @@
label_link factory
label_priority factory
ldap_group_link factory
- ldap_key factory
legacy_diff_note_on_commit factory
legacy_diff_note_on_merge_request factory
lfs_file_lock factory
@@ -584,7 +540,6 @@
merge_request_context_commit factory
merge_request_diff_commit factory
merge_request_diff_commit_user factory
- merge_request_diff_detail factory
merge_request_diff factory
merge_request_diff_file factory
merge_request factory
@@ -613,7 +568,6 @@
ml_model_version_metadata factory
ml_model_versions factory
mock_ci_integration factory
- mock_monitoring_integration factory
namespace_aggregation_schedules factory
namespace_ban factory
namespace_ci_cd_settings factory
@@ -651,7 +605,6 @@
oauth_access_grant factory
oauth_access_token factory
oauth_application factory
- oauth_openid_request factory
old_failed_status_check_response factory
old_passed_status_check_response factory
old_pending_status_check_response factory
@@ -663,9 +616,7 @@
operations_feature_flag factory
operations_feature_flags_client factory
operations_feature_flag_user_list factory
- operations_scope factory
operations_strategy factory
- orchestration_policy_yaml factory
organization_detail factory
organization factory
organization_owner factory
@@ -693,7 +644,6 @@
personal_snippet factory
phone_number_validation factory
phorge_integration factory
- pipeline_execution_policy factory
pipelines_email_integration factory
pivotaltracker_integration factory
plan factory
@@ -705,7 +655,6 @@
pm_checkpoint factory
pm_compressed_data_object factory
pm_data_object factory
- pm_identifier factory
pm_license factory
pm_package factory
pm_package_version factory
@@ -717,7 +666,6 @@
postgres_autovacuum_activity factory
postgres_index_bloat_estimate factory
postgres_index factory
- predictions factory
premium_plan factory
premium_trial_plan factory
programming_language factory
@@ -740,7 +688,6 @@
project_error_tracking_setting factory
project_export_job factory
project factory
- project_feature_usage factory
project_group_link factory
project_hook factory
project_imported_event factory
@@ -789,7 +736,6 @@
redirect_route factory
redmine_integration factory
reindex_action factory
- reindexing_queued_action factory
related_epic_link factory
related_link_restriction factory
relation_export_upload factory
@@ -797,7 +743,6 @@
release factory
release_link factory
remote_development_agent_config factory
- remote_development_namespace_cluster_agent_mapping factory
remote_mirror factory
reopened_issue factory
reopened_merge_request factory
@@ -834,8 +779,6 @@
sbom_source factory
sbom_source_package factory
sbom_vulnerabilities factory
- scan_execution_policy factory
- scan_result_policy factory
scan_result_policy_read factory
scan_result_policy_violation factory
scim_identity factory
@@ -860,7 +803,6 @@
silver_plan factory
slack_integration factory
slack_slash_commands_integration factory
- smartcard_identity factory
snippet factory
snippet_repository factory
snippet_repository_storage_move factory
@@ -922,7 +864,6 @@
user_namespace factory
user_permission_export_upload factory
user_preference factory
- users_ops_dashboard_project factory
users_security_dashboard_project factory
users_star_project factory
users_statistics factory
MR acceptance checklist
Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
How to set up and validate locally
# Run all model spec including all factory specs
bin/rspec <any model spec>
# Run only factory specs
bin/rspec <any model spec> -e "Lint factories for"