From 072f92c715593ff851d565a61fffeddcc848d841 Mon Sep 17 00:00:00 2001 From: ghost <49853598+JSONbored@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:53:55 -0600 Subject: [PATCH] fix(imports): preserve account status from backups (#1603) --- app/models/family/data_importer.rb | 6 +++- test/models/family/data_importer_test.rb | 46 ++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/app/models/family/data_importer.rb b/app/models/family/data_importer.rb index 4b6f2339b..0245580f5 100644 --- a/app/models/family/data_importer.rb +++ b/app/models/family/data_importer.rb @@ -92,7 +92,7 @@ class Family::DataImporter institution_name: data["institution_name"], institution_domain: data["institution_domain"], notes: data["notes"], - status: "active" + status: importable_account_status(data["status"]) ) account.save! @@ -108,6 +108,10 @@ class Family::DataImporter end end + def importable_account_status(status) + status.to_s.in?(%w[active disabled draft]) ? status.to_s : "active" + end + def import_categories(records) # First pass: create all categories without parent relationships parent_mappings = {} diff --git a/test/models/family/data_importer_test.rb b/test/models/family/data_importer_test.rb index 29f4f5bb1..23b71ea1f 100644 --- a/test/models/family/data_importer_test.rb +++ b/test/models/family/data_importer_test.rb @@ -31,6 +31,52 @@ class Family::DataImporterTest < ActiveSupport::TestCase assert_equal "Depository", account.accountable_type end + test "imports non-destructive account status from ndjson" do + ndjson = build_ndjson([ + { + type: "Account", + data: { + id: "disabled-account", + name: "Closed Checking", + balance: "0.00", + currency: "USD", + accountable_type: "Depository", + status: "disabled" + } + } + ]) + + importer = Family::DataImporter.new(@family, ndjson) + result = importer.import! + + account = result[:accounts].first + assert_equal "Closed Checking", account.name + assert_equal "disabled", account.status + end + + test "does not import pending deletion account status" do + ndjson = build_ndjson([ + { + type: "Account", + data: { + id: "pending-delete-account", + name: "Pending Delete Checking", + balance: "0.00", + currency: "USD", + accountable_type: "Depository", + status: "pending_deletion" + } + } + ]) + + importer = Family::DataImporter.new(@family, ndjson) + result = importer.import! + + account = result[:accounts].first + assert_equal "Pending Delete Checking", account.name + assert_equal "active", account.status + end + test "imports categories with parent relationships" do ndjson = build_ndjson([ {