mirror of
https://github.com/we-promise/sure.git
synced 2026-05-30 07:49:01 +00:00
fix(goals): jjmata review — reconciler guard, chart i18n, pace test
Three issues raised on PR #1798 review: - ProviderImportAdapter now memoizes account.goal_accounts.exists? per-account so a bulk historical import on an unlinked account short-circuits the reconciler instead of paying one SELECT per row. Linked accounts still hit the per-row reconciler with no change. - goal_projection_chart_controller.js reads Today / Projected / Saved labels via Stimulus values fed from goals.show.projection.* locale keys instead of inlining English. - goal_test.rb now covers Goal#pace with real inflows, asserting the 90-day window cutoff plus the Transaction.excluding_pending and entries.excluded = false filters.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
require "test_helper"
|
||||
|
||||
class GoalTest < ActiveSupport::TestCase
|
||||
include EntriesTestHelper
|
||||
|
||||
setup do
|
||||
@family = families(:dylan_family)
|
||||
@depository = accounts(:depository)
|
||||
@@ -114,6 +116,40 @@ class GoalTest < ActiveSupport::TestCase
|
||||
assert_equal 0, fresh.pace.to_d
|
||||
end
|
||||
|
||||
test "pace averages 90-day net inflow, excluding pending and excluded entries" do
|
||||
account = Account.create!(
|
||||
family: @family,
|
||||
accountable: Depository.new,
|
||||
name: "Pace Savings",
|
||||
currency: "USD",
|
||||
balance: 0
|
||||
)
|
||||
goal = @family.goals.create!(
|
||||
name: "Pace goal",
|
||||
target_amount: 10_000,
|
||||
currency: "USD"
|
||||
) { |g| g.goal_accounts.build(account: account) }
|
||||
|
||||
# Three inflows over the 90-day window. Sure convention: inflows are
|
||||
# negative. Net = -900 → pace = 900 / 3 = 300.
|
||||
create_transaction(account: account, amount: -300, date: 80.days.ago.to_date)
|
||||
create_transaction(account: account, amount: -300, date: 40.days.ago.to_date)
|
||||
create_transaction(account: account, amount: -300, date: 5.days.ago.to_date)
|
||||
|
||||
# Pending inflow that must be excluded by `Transaction.excluding_pending`.
|
||||
pending_entry = create_transaction(account: account, amount: -1_000, date: 10.days.ago.to_date)
|
||||
pending_entry.transaction.update!(extra: { "plaid" => { "pending" => true } })
|
||||
|
||||
# User-excluded outflow that must be excluded by `entries.excluded = false`.
|
||||
excluded_entry = create_transaction(account: account, amount: 500, date: 20.days.ago.to_date)
|
||||
excluded_entry.update!(excluded: true)
|
||||
|
||||
# Entry outside the 90-day window — must be ignored.
|
||||
create_transaction(account: account, amount: -10_000, date: 200.days.ago.to_date)
|
||||
|
||||
assert_equal 300, goal.pace.to_d
|
||||
end
|
||||
|
||||
test "months_of_runway is nil when goal has a target date" do
|
||||
assert_not_nil @goal.target_date
|
||||
assert_nil @goal.months_of_runway
|
||||
|
||||
Reference in New Issue
Block a user