1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-07-29 10:09:39 +02:00
Maybe/test/models/plaid_account/transactions/processor_test.rb

64 lines
2.1 KiB
Ruby
Raw Normal View History

require "test_helper"
class PlaidAccount::Transactions::ProcessorTest < ActiveSupport::TestCase
setup do
@plaid_account = plaid_accounts(:one)
end
test "processes added and modified plaid transactions" do
added_transactions = [ { "transaction_id" => "123" } ]
modified_transactions = [ { "transaction_id" => "456" } ]
@plaid_account.update!(raw_transactions_payload: {
added: added_transactions,
modified: modified_transactions,
removed: []
})
mock_processor = mock("PlaidEntry::Processor")
category_matcher_mock = mock("PlaidAccount::Transactions::CategoryMatcher")
PlaidAccount::Transactions::CategoryMatcher.stubs(:new).returns(category_matcher_mock)
PlaidEntry::Processor.expects(:new)
.with(added_transactions.first, plaid_account: @plaid_account, category_matcher: category_matcher_mock)
.returns(mock_processor)
.once
PlaidEntry::Processor.expects(:new)
.with(modified_transactions.first, plaid_account: @plaid_account, category_matcher: category_matcher_mock)
.returns(mock_processor)
.once
mock_processor.expects(:process).twice
processor = PlaidAccount::Transactions::Processor.new(@plaid_account)
processor.process
end
test "removes transactions no longer in plaid" do
destroyable_transaction_id = "destroy_me"
@plaid_account.account.entries.create!(
plaid_id: destroyable_transaction_id,
date: Date.current,
amount: 100,
name: "Destroy me",
currency: "USD",
entryable: Transaction.new
)
@plaid_account.update!(raw_transactions_payload: {
added: [],
modified: [],
removed: [ { "transaction_id" => destroyable_transaction_id } ]
})
processor = PlaidAccount::Transactions::Processor.new(@plaid_account)
assert_difference [ "Entry.count", "Transaction.count" ], -1 do
processor.process
end
assert_nil Entry.find_by(plaid_id: destroyable_transaction_id)
end
end