2024-06-19 06:52:08 -04:00
|
|
|
require "test_helper"
|
|
|
|
|
|
|
|
class TransferTest < ActiveSupport::TestCase
|
|
|
|
setup do
|
|
|
|
# Transfers can be posted on different dates
|
|
|
|
@outflow = accounts(:checking).transactions.create! date: 1.day.ago.to_date, name: "Transfer to Savings", amount: 100, marked_as_transfer: true
|
|
|
|
@inflow = accounts(:savings).transactions.create! date: Date.current, name: "Transfer from Savings", amount: -100, marked_as_transfer: true
|
|
|
|
end
|
|
|
|
|
|
|
|
test "transfer valid if it has inflow and outflow from different accounts for the same amount" do
|
2024-06-20 13:32:44 -04:00
|
|
|
transfer = Account::Transfer.create! transactions: [ @inflow, @outflow ]
|
2024-06-19 06:52:08 -04:00
|
|
|
|
|
|
|
assert transfer.valid?
|
|
|
|
end
|
|
|
|
|
|
|
|
test "transfer must have 2 transactions" do
|
2024-06-20 13:32:44 -04:00
|
|
|
invalid_transfer_1 = Account::Transfer.new transactions: [ @outflow ]
|
|
|
|
invalid_transfer_2 = Account::Transfer.new transactions: [ @inflow, @outflow, transactions(:savings_four) ]
|
2024-06-19 06:52:08 -04:00
|
|
|
|
|
|
|
assert invalid_transfer_1.invalid?
|
|
|
|
assert invalid_transfer_2.invalid?
|
|
|
|
end
|
|
|
|
|
|
|
|
test "transfer cannot have 2 transactions from the same account" do
|
|
|
|
account = accounts(:checking)
|
|
|
|
inflow = account.transactions.create! date: Date.current, name: "Inflow", amount: -100
|
|
|
|
outflow = account.transactions.create! date: Date.current, name: "Outflow", amount: 100
|
|
|
|
|
|
|
|
assert_raise ActiveRecord::RecordInvalid do
|
2024-06-20 13:32:44 -04:00
|
|
|
Account::Transfer.create! transactions: [ inflow, outflow ]
|
2024-06-19 06:52:08 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "all transfer transactions must be marked as transfers" do
|
|
|
|
@inflow.update! marked_as_transfer: false
|
|
|
|
|
|
|
|
assert_raise ActiveRecord::RecordInvalid do
|
2024-06-20 13:32:44 -04:00
|
|
|
Account::Transfer.create! transactions: [ @inflow, @outflow ]
|
2024-06-19 06:52:08 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
test "transfer transactions must net to zero" do
|
|
|
|
@outflow.update! amount: 105
|
|
|
|
|
|
|
|
assert_raises ActiveRecord::RecordInvalid do
|
2024-06-20 13:32:44 -04:00
|
|
|
Account::Transfer.create! transactions: [ @inflow, @outflow ]
|
2024-06-19 06:52:08 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|