hledger/tests/timeclock.test
Jakob Schöttl c7a88b50fb Fix timeclock format parsing
Fix presumably copy-paste errors

timeclock format has only timeclock lines or empty/comment lines

Update test format to v3, add new tests

Throw error on unexpected clock codes in timeclock format

Fix missing case in pattern matching
2020-01-12 13:17:36 -08:00

165 lines
3.6 KiB
Plaintext

# 1. a timeclock session is parsed as a similarly-named transaction with one virtual posting
<
i 2009/1/1 08:00:00
o 2009/1/1 09:00:00 stuff on checkout record is ignored
i 2009/1/2 08:00:00 account name
o 2009/1/2 09:00:00
i 2009/1/3 08:00:00 some:account name and a description
o 2009/1/3 09:00:00
$ hledger -f - print
>
2009-01-01 * 08:00-09:00
() 1.00h
2009-01-02 * 08:00-09:00
(account name) 1.00h
2009-01-03 * and a description
(some:account name) 1.00h
>2
>= 0
# For a missing clock-out, now is implied
<
i 2020/1/1 08:00
$ hledger -f - balance
> /./
>= 0
# For a log not starting with clock-out, print error
<
o 2020/1/1 08:00
$ hledger -f - balance
>2 /line 1: expected timeclock code i/
>= !0
# For a different log starting not with clock-out, print error
<
o 2020/1/1 08:00
o 2020/1/1 09:00
$ hledger -f - balance
>2 /line 1: expected timeclock code i/
>= !0
# For two consecutive clock-in, print error
<
i 2020/1/1 08:00
i 2020/1/1 09:00
$ hledger -f - balance
>2 /line 2: expected timeclock code o/
>= !0
## TODO
## multi-day sessions get a new transaction for each day
#hledger -f- print
#<<<
#i 2017/04/20 09:00:00 A
#o 2017/04/20 17:00:00
#i 2017/04/21 09:00:00 B
#o 2017/04/21 17:00:00
#i 2017/04/22 09:00:00 C
#o 2017/04/22 17:00:00
#>>>
#>>>2
#>>>=
#
## unclosed sessions are automatically closed at report time
## TODO this output looks wrong
#hledger -f- print
#<<<
#i 2017/04/20 09:00:00 A
#o 2017/04/20 17:00:00
#i 2017/04/21 09:00:00 B
#o 2017/04/21 17:00:00
#i 2017/04/22 09:00:00 C
#o 2017/04/22 17:00:00
#>>>
#2017-04-20 * 09:00-17:00
# (A) 8.00h
#
#2017-04-21 * 09:00-23:59
# (B) 15.00h
#
#2017-04-22 * 00:00-09:00
# (B) 9.00h
#
#2017-04-22 * 17:00-23:59
# () 7.00h
#
#2017-04-23 * 00:00-23:59
# () 24.00h
#
#2017-04-24 * 00:00-23:59
# () 24.00h
#
#2017-04-25 * 00:00-11:28
# () 11.47h
#
#>>>2
#>>>=
# ledger timeclock example from #ledger
# ==== consulting.timeclock
# ; Time log for consulting sideline
# ; All times UTC
# i 2011/01/26 16:00:00 XXXX:Remote "IPMI Access"
# o 2011/01/26 16:15:00
# i 2011/01/26 17:45:00 XXXX:Onsite "Fix opty server"
# o 2011/01/26 20:00:00
# i 2011/01/27 18:00:00 XXXX:Remote "SSL certificate for www.YYYY.com"
# o 2011/01/27 18:15:00
# ; vim:ts=2 sw=2 sts=2 et ft=ledger fdm=manual:
# ==== consulting.dat
# ; Ledger for Consulting sideline
# !account Consulting
# !include consulting.timeclock
# !end
# 2010/02/27 (INV#2) XXXX Test Invoice
# Consulting:XXXX:Remote -0.5h @ $75.00
# Consulting:XXXX:Onsite -2.25h @ $100.00
# Receivable:Consulting:XXXX
# ; vim:ts=2 sw=2 sts=2 et ft=ledger fdm=manual:
# ==== command: ledger -f consulting.dat -s bal
# -2.25h Consulting:XXXX:Onsite
# 2.25h Consulting:XXXX:Onsite "Fix opty server"
# -30.0m Consulting:XXXX:Remote
# 15.0m Consulting:XXXX:Remote "IPMI Access"
# 15.0m Consulting:XXXX:Remote "SSL certificate for www.YYYY.com"
# $262.5 Receivable:Consulting:XXXX
# --------------------
# $262.5
# # timezone-related tests
# # 1. as in ledger, historical prices may contain a time and timezone.
# # hledger ignores them and uses 00:00 local time instead.
# # XXX needs --value not --cost
# hledgerdev -f - balance --no-total --cost
# <<<
# P 2011/01/01 00:00:00 A $1
# P 2011/01/01 15:00:00-0100 A $2
# 2010/12/31
# (20101231) 1 A
# 2011/1/1
# (20110101) 1 A
# 2011/1/2
# (20110102) 1 A
# >>>
# 1 A 20101231
# $2 20110101
# $2 20110102
# >>>=0