mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 15:49:39 +02:00
Account::Sync model and test fixture simplifications (#968)
* Add sync model * Fresh fixtures for sync tests * Sync tests overhaul * Fix entry tests * Complete remaining model test updates * Update system tests * Update demo data task * Add system tests back to PR checks * More simplifications, add empty family to fixtures for easier testing
This commit is contained in:
parent
de5a2e55b3
commit
c6bdf49f10
60 changed files with 929 additions and 1353 deletions
|
@ -1,38 +1,31 @@
|
|||
require "test_helper"
|
||||
require "csv"
|
||||
|
||||
class AccountTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@account = accounts(:checking)
|
||||
include ActiveJob::TestHelper
|
||||
|
||||
setup do
|
||||
@account = accounts(:depository)
|
||||
@family = families(:dylan_family)
|
||||
end
|
||||
|
||||
test "recognizes foreign currency account" do
|
||||
regular_account = accounts(:checking)
|
||||
foreign_account = accounts(:eur_checking)
|
||||
assert_not regular_account.foreign_currency?
|
||||
assert foreign_account.foreign_currency?
|
||||
test "can sync later" do
|
||||
assert_enqueued_with(job: AccountSyncJob, args: [ @account, start_date: Date.current ]) do
|
||||
@account.sync_later start_date: Date.current
|
||||
end
|
||||
end
|
||||
|
||||
test "recognizes multi currency account" do
|
||||
regular_account = accounts(:checking)
|
||||
multi_currency_account = accounts(:multi_currency)
|
||||
assert_not regular_account.multi_currency?
|
||||
assert multi_currency_account.multi_currency?
|
||||
end
|
||||
test "can sync" do
|
||||
start_date = 10.days.ago.to_date
|
||||
|
||||
test "multi currency and foreign currency are different concepts" do
|
||||
multi_currency_account = accounts(:multi_currency)
|
||||
assert_equal multi_currency_account.family.currency, multi_currency_account.currency
|
||||
assert multi_currency_account.multi_currency?
|
||||
assert_not multi_currency_account.foreign_currency?
|
||||
mock_sync = mock("Account::Sync")
|
||||
mock_sync.expects(:run).once
|
||||
|
||||
Account::Sync.expects(:for).with(@account, start_date: start_date).returns(mock_sync).once
|
||||
|
||||
@account.sync start_date: start_date
|
||||
end
|
||||
|
||||
test "groups accounts by type" do
|
||||
@family.accounts.each do |account|
|
||||
account.sync
|
||||
end
|
||||
|
||||
result = @family.accounts.by_group(period: Period.all)
|
||||
assets = result[:assets]
|
||||
liabilities = result[:liabilities]
|
||||
|
@ -50,7 +43,7 @@ class AccountTest < ActiveSupport::TestCase
|
|||
loans = liabilities.children.find { |group| group.name == "Loan" }
|
||||
other_liabilities = liabilities.children.find { |group| group.name == "OtherLiability" }
|
||||
|
||||
assert_equal 4, depositories.children.count
|
||||
assert_equal 1, depositories.children.count
|
||||
assert_equal 1, properties.children.count
|
||||
assert_equal 1, vehicles.children.count
|
||||
assert_equal 1, investments.children.count
|
||||
|
@ -61,38 +54,24 @@ class AccountTest < ActiveSupport::TestCase
|
|||
assert_equal 1, other_liabilities.children.count
|
||||
end
|
||||
|
||||
test "generates series with last balance equal to current account balance" do
|
||||
# If account hasn't been synced, series falls back to a single point with the current balance
|
||||
assert_equal @account.balance_money, @account.series.last.value
|
||||
|
||||
@account.sync
|
||||
|
||||
# Synced series will always have final balance equal to the current account balance
|
||||
assert_equal @account.balance_money, @account.series.last.value
|
||||
test "generates balance series" do
|
||||
assert_equal 2, @account.series.values.count
|
||||
end
|
||||
|
||||
test "generates empty series for foreign currency if no exchange rate" do
|
||||
account = accounts(:eur_checking)
|
||||
|
||||
# We know EUR -> NZD exchange rate is not available in fixtures
|
||||
assert_equal 0, account.series(currency: "NZD").values.count
|
||||
test "generates balance series with single value if no balances" do
|
||||
@account.balances.delete_all
|
||||
assert_equal 1, @account.series.values.count
|
||||
end
|
||||
|
||||
test "should destroy dependent transactions" do
|
||||
assert_difference("Account::Transaction.count", -@account.transactions.count) do
|
||||
@account.destroy
|
||||
end
|
||||
test "generates balance series in period" do
|
||||
@account.balances.delete_all
|
||||
@account.balances.create! date: 31.days.ago.to_date, balance: 5000, currency: "USD" # out of period range
|
||||
@account.balances.create! date: 30.days.ago.to_date, balance: 5000, currency: "USD" # in range
|
||||
|
||||
assert_equal 1, @account.series(period: Period.last_30_days).values.count
|
||||
end
|
||||
|
||||
test "should destroy dependent balances" do
|
||||
assert_difference("Account::Balance.count", -@account.balances.count) do
|
||||
@account.destroy
|
||||
end
|
||||
end
|
||||
|
||||
test "should destroy dependent valuations" do
|
||||
assert_difference("Account::Valuation.count", -@account.valuations.count) do
|
||||
@account.destroy
|
||||
end
|
||||
test "generates empty series if no balances and no exchange rate" do
|
||||
assert_equal 0, @account.series(currency: "NZD").values.count
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue