test and bugfix for multi-day timelog session splitting
This commit is contained in:
parent
564aba4976
commit
0cacc2a7e4
@ -23,10 +23,18 @@ instance Show TimeLog where
|
||||
|
||||
-- | Convert time log entries to ledger entries. When there is no
|
||||
-- clockout, add one with the provided current time. Sessions crossing
|
||||
-- midnight are split to give accurate per-day totals.
|
||||
-- midnight are split into days to give accurate per-day totals.
|
||||
entriesFromTimeLogEntries :: LocalTime -> [TimeLogEntry] -> [Entry]
|
||||
entriesFromTimeLogEntries _ [] = []
|
||||
entriesFromTimeLogEntries t [i] = [entryFromTimeLogInOut i (TimeLogEntry 'o' t "")]
|
||||
entriesFromTimeLogEntries t [i]
|
||||
| odate > idate = [entryFromTimeLogInOut i o'] ++ entriesFromTimeLogEntries t [i',o]
|
||||
| otherwise = [entryFromTimeLogInOut i o]
|
||||
where
|
||||
o = TimeLogEntry 'o' t ""
|
||||
(itime,otime) = (tldatetime i,tldatetime o)
|
||||
(idate,odate) = (localDay itime,localDay otime)
|
||||
o' = o{tldatetime=itime{localDay=idate, localTimeOfDay=TimeOfDay 23 59 59}}
|
||||
i' = i{tldatetime=itime{localDay=addDays 1 idate, localTimeOfDay=midnight}}
|
||||
entriesFromTimeLogEntries t (i:o:rest)
|
||||
| odate > idate = [entryFromTimeLogInOut i o'] ++ entriesFromTimeLogEntries t (i':o:rest)
|
||||
| otherwise = [entryFromTimeLogInOut i o] ++ entriesFromTimeLogEntries t rest
|
||||
|
||||
1
NOTES
1
NOTES
@ -10,7 +10,6 @@ clever tricks like the plague." --Edsger Dijkstra
|
||||
|
||||
* to do
|
||||
** errors
|
||||
*** timelog report for today with no entries ignores an open session from yesterday
|
||||
*** not catching some unbalanced entries, two ways:
|
||||
**** 1
|
||||
1/1 test1
|
||||
|
||||
16
Tests.hs
16
Tests.hs
@ -5,6 +5,8 @@
|
||||
module Tests
|
||||
where
|
||||
import qualified Data.Map as Map
|
||||
import Data.Time.Format
|
||||
import System.Locale (defaultTimeLocale)
|
||||
import Text.ParserCombinators.Parsec
|
||||
import Test.HUnit
|
||||
import Test.HUnit.Tools (assertRaises, runVerboseTests)
|
||||
@ -294,6 +296,20 @@ tests = [
|
||||
[Period "in 2008"] `gives` "DateSpan (Just 2008-01-01) (Just 2009-01-01)"
|
||||
[Begin "2005", End "2007",Period "in 2008"] `gives` "DateSpan (Just 2008-01-01) (Just 2009-01-01)"
|
||||
|
||||
,"entriesFromTimeLogEntries" ~: do
|
||||
today <- getCurrentDay
|
||||
let
|
||||
clockin t a = TimeLogEntry 'i' t a
|
||||
clockout t = TimeLogEntry 'o' t ""
|
||||
yesterday = prevday today
|
||||
mktime d s = LocalTime d $ fromMaybe midnight $ parseTime defaultTimeLocale "%H:%M:%S" s
|
||||
noon = LocalTime today midday
|
||||
ts `gives` ss = (map edescription $ entriesFromTimeLogEntries noon ts) `is` ss
|
||||
[] `gives` []
|
||||
[clockin (mktime today "00:00:00") ""] `gives` ["00:00-12:00"]
|
||||
[clockin (mktime yesterday "23:00:00") ""] `gives` ["23:00-23:59","00:00-12:00"]
|
||||
[clockin (mktime (addDays (-2) today) "23:00:00") ""] `gives` ["23:00-23:59","00:00-23:59","00:00-12:00"]
|
||||
|
||||
,"expandAccountNames" ~: do
|
||||
expandAccountNames ["assets:cash","assets:checking","expenses:vacation"] `is`
|
||||
["assets","assets:cash","assets:checking","expenses","expenses:vacation"]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user