mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 07:39:39 +02:00
CSV Imports Overhaul (Transactions, Trades, Accounts, and Mint import support) (#1209)
* Remove stale 1.0 import logic and model * Fresh start * Checkpoint before removing nav * First working prototype * Add trade, account, and mint import flows * Basic working version with tests * System tests for each import type * Clean up mappings flow * Clean up PR, refactor stale code, tests * Add back row validations * Row validations * Fix import job test * Fix import navigation * Fix mint import configuration form * Currency preset for new accounts
This commit is contained in:
parent
23786b444a
commit
398b246965
103 changed files with 2420 additions and 1689 deletions
66
test/models/transaction_import_test.rb
Normal file
66
test/models/transaction_import_test.rb
Normal file
|
@ -0,0 +1,66 @@
|
|||
require "test_helper"
|
||||
|
||||
class TransactionImportTest < ActiveSupport::TestCase
|
||||
include ActiveJob::TestHelper, ImportInterfaceTest
|
||||
|
||||
setup do
|
||||
@subject = @import = imports(:transaction)
|
||||
end
|
||||
|
||||
test "uploaded? if raw_file_str is present" do
|
||||
@import.expects(:raw_file_str).returns("test").once
|
||||
assert @import.uploaded?
|
||||
end
|
||||
|
||||
test "configured? if uploaded and rows are generated" do
|
||||
@import.expects(:uploaded?).returns(true).once
|
||||
assert @import.configured?
|
||||
end
|
||||
|
||||
test "cleaned? if rows are generated and valid" do
|
||||
@import.expects(:configured?).returns(true).once
|
||||
assert @import.cleaned?
|
||||
end
|
||||
|
||||
test "publishable? if cleaned and mappings are valid" do
|
||||
@import.expects(:cleaned?).returns(true).once
|
||||
assert @import.publishable?
|
||||
end
|
||||
|
||||
test "imports transactions, categories, tags, and accounts" do
|
||||
import = <<-CSV
|
||||
date,name,amount,category,tags,account,notes
|
||||
01/01/2024,Txn1,100,TestCategory1,TestTag1,TestAccount1,notes1
|
||||
01/02/2024,Txn2,200,TestCategory2,TestTag1|TestTag2,TestAccount2,notes2
|
||||
01/03/2024,Txn3,300,,,,notes3
|
||||
CSV
|
||||
|
||||
@import.update!(raw_file_str: import)
|
||||
|
||||
@import.generate_rows_from_csv
|
||||
|
||||
@import.mappings.create! key: "TestCategory1", create_when_empty: true, type: "Import::CategoryMapping"
|
||||
@import.mappings.create! key: "TestCategory2", mappable: categories(:food_and_drink), type: "Import::CategoryMapping"
|
||||
@import.mappings.create! key: "", create_when_empty: false, mappable: nil, type: "Import::CategoryMapping" # Leaves uncategorized
|
||||
|
||||
@import.mappings.create! key: "TestTag1", create_when_empty: true, type: "Import::TagMapping"
|
||||
@import.mappings.create! key: "TestTag2", mappable: tags(:one), type: "Import::TagMapping"
|
||||
@import.mappings.create! key: "", create_when_empty: false, mappable: nil, type: "Import::TagMapping" # Leaves untagged
|
||||
|
||||
@import.mappings.create! key: "TestAccount1", create_when_empty: true, type: "Import::AccountMapping"
|
||||
@import.mappings.create! key: "TestAccount2", mappable: accounts(:depository), type: "Import::AccountMapping"
|
||||
@import.mappings.create! key: "", mappable: accounts(:depository), type: "Import::AccountMapping"
|
||||
|
||||
@import.reload
|
||||
|
||||
assert_difference -> { Account::Entry.count } => 3,
|
||||
-> { Account::Transaction.count } => 3,
|
||||
-> { Tag.count } => 1,
|
||||
-> { Category.count } => 1,
|
||||
-> { Account.count } => 1 do
|
||||
@import.publish
|
||||
end
|
||||
|
||||
assert_equal "complete", @import.status
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue