mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 20:14:08 +00:00
Use dependent: :purge_later for ActiveRecord attachments (#882)
* Use dependent: :purge_later for user profile_image cleanup This is a simpler alternative to PR #787's callback-based approach. Instead of adding a custom callback and method, we use Rails' built-in `dependent: :purge_later` option which is already used by FamilyExport and other models in the codebase. This single-line change ensures orphaned ActiveStorage attachments are automatically purged when a user is destroyed, without the overhead of querying all attachments manually. https://claude.ai/code/session_01Np3deHEAJqCBfz3aY7c3Tk * Add dependent: :purge_later to all ActiveStorage attachments Extends the attachment cleanup from PR #787 to cover ALL models with ActiveStorage attachments, not just User.profile_image. Models updated: - PdfImport.pdf_file - prevents orphaned PDF files from imports - Account.logo - prevents orphaned account logos - PlaidItem.logo, SimplefinItem.logo, SnaptradeItem.logo, CoinstatsItem.logo, CoinbaseItem.logo, LunchflowItem.logo, MercuryItem.logo, EnableBankingItem.logo - prevents orphaned provider logos This ensures that when a family is deleted (cascade from last user purge), all associated storage files are properly cleaned up via Rails' built-in dependent: :purge_later mechanism. https://claude.ai/code/session_01Np3deHEAJqCBfz3aY7c3Tk * Make sure `Provider` generator adds it * Fix tests --------- Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
require "test_helper"
|
||||
|
||||
class AccountTest < ActiveSupport::TestCase
|
||||
include SyncableInterfaceTest, EntriesTestHelper
|
||||
include SyncableInterfaceTest, EntriesTestHelper, ActiveJob::TestHelper
|
||||
|
||||
setup do
|
||||
@account = @syncable = accounts(:depository)
|
||||
@@ -155,4 +155,21 @@ class AccountTest < ActiveSupport::TestCase
|
||||
assert @account.taxable?
|
||||
assert_not @account.tax_advantaged?
|
||||
end
|
||||
|
||||
test "destroying account purges attached logo" do
|
||||
@account.logo.attach(
|
||||
io: StringIO.new("fake-logo-content"),
|
||||
filename: "logo.png",
|
||||
content_type: "image/png"
|
||||
)
|
||||
|
||||
attachment_id = @account.logo.id
|
||||
assert ActiveStorage::Attachment.exists?(attachment_id)
|
||||
|
||||
perform_enqueued_jobs do
|
||||
@account.destroy!
|
||||
end
|
||||
|
||||
assert_not ActiveStorage::Attachment.exists?(attachment_id)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user