hledger/tests/forecast.test
2020-06-04 19:30:42 -07:00

204 lines
4.9 KiB
Plaintext

# Test generation of periodic transactions with --forecast.
# Note periodic transaction tests should include a regular transaction
# to pin the start date of forecasted transactions.
# 1. A balance report with forecasted transactions.
hledger bal -M -b 2016-11 -e 2017-02 -f - --forecast
<<<
2016/12/31
expenses:housing $600
assets:cash
~ monthly from 2016/1
income $-1000
expenses:food $20
expenses:leisure $15
expenses:grocery $30
assets:cash
>>>
Balance changes in 2016-12-01..2017-01-31:
|| Dec Jan
==================++===============
assets:cash || $-600 $935
expenses:food || 0 $20
expenses:grocery || 0 $30
expenses:housing || $600 0
expenses:leisure || 0 $15
income || 0 $-1000
------------------++---------------
|| 0 0
>>>2
>>>=0
# 2. print forecasted transactions, with status and description.
hledger print -b 2016-11 -e 2017-02 -f - --forecast
<<<
2016/12/31
expenses:housing $600
assets:cash
~ monthly from 2016/1 * marked cleared, and with a description
income $-1000
expenses:food $20
expenses:leisure $15
expenses:grocery $30
assets:cash
>>>
2016-12-31
expenses:housing $600
assets:cash
2017-01-01 * marked cleared, and with a description
; generated-transaction: ~ monthly from 2016/1
income $-1000
expenses:food $20
expenses:leisure $15
expenses:grocery $30
assets:cash
>>>2
>>>=0
# 3. A register with forecasted transactions, with a comment and tag.
hledger register -b 2016-11 -e 2017-02 -f - --forecast tag:a
<<<
2016/12/31
expenses:housing $600
assets:cash
~ monthly from 2016/1 ; or a comment, maybe with a:tag
income $-1000
expenses:food $20
expenses:leisure $15
expenses:grocery $30
assets:cash
>>>
2017-01-01 income $-1000 $-1000
expenses:food $20 $-980
expenses:leisure $15 $-965
expenses:grocery $30 $-935
assets:cash $935 0
>>>2
>>>=0
# 4. Check that --forecast generates transactions only after last transaction date in journal.
hledger register -b 2015-12 -e 2017-02 -f - assets:cash --forecast
<<<
2016/01/01
expenses:fun $10 ; more fireworks
assets:cash
2016/12/02
expenses:housing $600
assets:cash
~ yearly from 2016
income $-10000 ; bonus
assets:cash
>>>
2016-01-01 assets:cash $-10 $-10
2016-12-02 assets:cash $-600 $-610
2017-01-01 assets:cash $10000 $9390
>>>2
>>>=0
# 5. Y affects M/D partial dates in periodic transactions.
# The recur tag shows the original period expression and is not modified.
hledger -f - print --forecast desc:forecast
<<<
Y 2000
~ 2/1 forecast
; a real transaction to set the start of the forecast window
2000/1/1 real
>>>
2000-02-01 forecast
; generated-transaction: ~ 2/1
>>>2
>>>=0
# 6. Y also sets the month to 1, affecting D dates:
hledger -f - print --forecast desc:forecast
<<<
Y 2000
~ 15 forecast
; a real transaction to set the start of the forecast window
2000/1/1 real
>>>
2000-01-15 forecast
; generated-transaction: ~ 15
>>>2
>>>=0
# 7. Y also sets the day to 1, affecting relative dates:
hledger -f - print --forecast desc:forecast
<<<
Y 2000
~ next month forecast
; a real transaction to set the start of the forecast window
2000/1/1 real
>>>
2000-02-01 forecast
; generated-transaction: ~ next month
>>>2
>>>=0
# 8. A balance report with forecast-begin enabling transaction before report end
hledger bal -M -b 2016-10 -e 2017-02 -f - --forecast=20160801-
<<<
2016/12/31
expenses:housing $600
assets:cash
~ monthly from 2016/1 salary
income $-1000
assets:cash
>>>
Balance changes in 2016-10-01..2017-01-31:
|| Oct Nov Dec Jan
==================++================================
assets:cash || $1000 $1000 $400 $1000
expenses:housing || 0 0 $600 0
income || $-1000 $-1000 $-1000 $-1000
------------------++--------------------------------
|| 0 0 0 0
>>>2
>>>=0
# 9. Parse error in malformed forecast period expression
hledger bal -M -b 2016-10 -e 2017-02 -f - --forecast=20160801-foobar
<<<
2016/12/31
expenses:housing $600
assets:cash
~ monthly from 2016/1 salary
income $-1000
assets:cash
>>>
>>>2
hledger: could not parse forecast period : 1:10:
|
1 | 20160801-foobar
| ^
unexpected 'f'
expecting end of input
(use -h to see usage)
>>>=1