diff --git a/ee/app/models/concerns/ee/users/dependent_associations.rb b/ee/app/models/concerns/ee/users/dependent_associations.rb index e464e440860012db2cc2da66c9213ea54d3ccadf..3fee48493005575b6d76c2f01df77176092ecda0 100644 --- a/ee/app/models/concerns/ee/users/dependent_associations.rb +++ b/ee/app/models/concerns/ee/users/dependent_associations.rb @@ -35,6 +35,8 @@ module DependentAssociations has_many :approval_project_rules_users, dependent: :destroy + has_many :lists, dependent: :destroy + has_many :security_policy_dismissals, class_name: 'Security::PolicyDismissal', dependent: :nullify @@ -60,6 +62,42 @@ module DependentAssociations has_many :duo_workflows_workflows, class_name: 'Ai::DuoWorkflows::Workflow', dependent: :destroy + + has_many :created_custom_fields, + class_name: 'Issuables::CustomField', + foreign_key: 'created_by_id', + dependent: :nullify, + inverse_of: :created_by + + has_many :updated_custom_fields, + class_name: 'Issuables::CustomField', + foreign_key: 'updated_by_id', + dependent: :nullify, + inverse_of: :updated_by + + has_many :created_lifecycles, + class_name: 'WorkItems::Statuses::Custom::Lifecycle', + foreign_key: 'created_by_id', + dependent: :nullify, + inverse_of: :created_by + + has_many :updated_lifecycles, + class_name: 'WorkItems::Statuses::Custom::Lifecycle', + foreign_key: 'updated_by_id', + dependent: :nullify, + inverse_of: :updated_by + + has_many :created_statuses, + class_name: 'WorkItems::Statuses::Custom::Status', + foreign_key: 'created_by_id', + dependent: :nullify, + inverse_of: :created_by + + has_many :updated_statuses, + class_name: 'WorkItems::Statuses::Custom::Status', + foreign_key: 'updated_by_id', + dependent: :nullify, + inverse_of: :updated_by # rubocop:enable Cop/ActiveRecordDependent -- we need to destroy/nullify records after each user delete. end end diff --git a/ee/spec/models/concerns/ee/users/dependent_associations_spec.rb b/ee/spec/models/concerns/ee/users/dependent_associations_spec.rb index e50e2ee9142cedb8f517f038e26622b208133b8b..370a5c33ef30bbb65f77c121ddff5275bf5536b2 100644 --- a/ee/spec/models/concerns/ee/users/dependent_associations_spec.rb +++ b/ee/spec/models/concerns/ee/users/dependent_associations_spec.rb @@ -8,7 +8,13 @@ let(:associations_with_nullify) do { security_policy_dismissals: { class_name: 'Security::PolicyDismissal' }, - approval_policy_merge_request_bypass_events: { class_name: 'Security::ApprovalPolicyMergeRequestBypassEvent' } + approval_policy_merge_request_bypass_events: { class_name: 'Security::ApprovalPolicyMergeRequestBypassEvent' }, + created_custom_fields: { class_name: 'Issuables::CustomField' }, + updated_custom_fields: { class_name: 'Issuables::CustomField' }, + created_lifecycles: { class_name: 'WorkItems::Statuses::Custom::Lifecycle' }, + updated_lifecycles: { class_name: 'WorkItems::Statuses::Custom::Lifecycle' }, + created_statuses: { class_name: 'WorkItems::Statuses::Custom::Status' }, + updated_statuses: { class_name: 'WorkItems::Statuses::Custom::Status' } } end @@ -22,6 +28,7 @@ approval_merge_request_rules_users: {}, approval_project_rules_users: {}, duo_workflows_workflows: { class_name: 'Ai::DuoWorkflows::Workflow' }, + lists: {}, merge_requests_approval_rules_approver_users: { class_name: 'MergeRequests::ApprovalRulesApproverUser' }, targeted_message_dismissals: {}, boards_epic_list_user_preferences: { class_name: 'Boards::EpicListUserPreference' }, diff --git a/spec/support/shared_examples/models/user_shared_examples.rb b/spec/support/shared_examples/models/user_shared_examples.rb index 4a51549e825cf1a9d3d7914c721acd089a576bd7..79306c6f8e1b1b2a9f2528a285803ad1ecadead0 100644 --- a/spec/support/shared_examples/models/user_shared_examples.rb +++ b/spec/support/shared_examples/models/user_shared_examples.rb @@ -121,7 +121,6 @@ deploy_tokens design_management_action_uploads import_export_upload_uploads - lists ml_experiments merge_requests_compliance_violations merge_requests_merge_data @@ -149,7 +148,6 @@ catalog_resource_versions cluster_agent_tokens cluster_agent_url_configurations - custom_fields design_management_versions incident_management_timeline_events lfs_file_locks @@ -165,8 +163,6 @@ terraform_states user_namespace_callouts uploads_9ba88c4165 - work_item_custom_lifecycles - work_item_custom_statuses ] end