packages feed

hledger-flow-0.14.4: test/TestHelpers.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}

module TestHelpers where

import Path

import Data.Maybe (fromMaybe)

import Hledger.Flow.Internals ( versionInfo, SystemInfo(..) )
import Hledger.Flow.PathHelpers (RelFile)

import qualified Hledger.Flow.Types as FlowTypes
import Hledger.Flow.RuntimeOptions
import qualified System.Info as Sys

defaultHlInfo :: FlowTypes.HledgerInfo
defaultHlInfo = FlowTypes.HledgerInfo [absfile|/path/to/hledger|] "1.2.3"

testSystemInfo :: SystemInfo
testSystemInfo = SystemInfo {
        os = Sys.os,
        arch = Sys.arch,
        compilerName = Sys.compilerName,
        compilerVersion = Sys.compilerVersion,
        cores = 1,
        availableCores = 1
        }

defaultOpts :: FlowTypes.BaseDir -> RuntimeOptions
defaultOpts bd = RuntimeOptions {
    baseDir = bd
  , importRunDir = [reldir|./|]
  , importStartYear = Nothing
  , onlyNewFiles = False
  , hfVersion = versionInfo testSystemInfo
  , hledgerInfo = defaultHlInfo
  , sysInfo = testSystemInfo
  , verbose = False
  , showOptions = False
  , sequential = False
  , batchSize = 1
}

toJournal :: RelFile -> RelFile
toJournal inFile = do
  let journalFile = fromMaybe [relfile|oops.err|] $ replaceExtension ".journal" inFile
  let journalName = filename journalFile
  let yearDir = dirname . parent $ inFile
  (parent . parent . parent) inFile </> [reldir|3-journal|] </> yearDir </> journalName

inputJohnSavings2017 :: [RelFile]
inputJohnSavings2017 = [
  [relfile|import/john/bogartbank/savings/1-in/2017/2017-11-30.csv|],
  [relfile|import/john/bogartbank/savings/1-in/2017/2017-12-30.csv|]
  ]

johnSavingsJournals2017 :: [RelFile]
johnSavingsJournals2017 = map toJournal inputJohnSavings2017

inputJohnSavings2018 :: [RelFile]
inputJohnSavings2018 = [
  [relfile|import/john/bogartbank/savings/1-in/2018/2018-02-30.csv|],
  [relfile|import/john/bogartbank/savings/1-in/2018/2018-01-30.csv|]
  ]

johnSavingsJournals2018 :: [RelFile]
johnSavingsJournals2018 = map toJournal inputJohnSavings2018

inputJohnChecking2018 :: [RelFile]
inputJohnChecking2018 = [
  [relfile|import/john/bogartbank/checking/1-in/2018/2018-11-30.csv|],
  [relfile|import/john/bogartbank/checking/1-in/2018/2018-10-30.csv|],
  [relfile|import/john/bogartbank/checking/1-in/2018/2018-12-30.csv|]
  ]

johnCheckingJournals2018 :: [RelFile]
johnCheckingJournals2018 = map toJournal inputJohnChecking2018

inputJohnChecking2019 :: [RelFile]
inputJohnChecking2019 = [
  [relfile|import/john/bogartbank/checking/1-in/2019/2019-01-30.csv|],
  [relfile|import/john/bogartbank/checking/1-in/2019/2019-02-30.csv|]
  ]

johnCheckingJournals2019 :: [RelFile]
johnCheckingJournals2019 = map toJournal inputJohnChecking2019

inputJohnBogart :: [RelFile]
inputJohnBogart = inputJohnSavings2017 <> inputJohnSavings2018 <> inputJohnChecking2018 <> inputJohnChecking2019

johnCC2017 :: RelFile
johnCC2017 = [relfile|import/john/otherbank/creditcard/1-in/2017/2017-12-30.csv|]

johnCCJournal2017 :: RelFile
johnCCJournal2017 = toJournal johnCC2017

johnCC2018 :: RelFile
johnCC2018 = [relfile|import/john/otherbank/creditcard/1-in/2018/2018-01-30.csv|]

johnCCJournal2018 :: RelFile
johnCCJournal2018 = toJournal johnCC2018

johnInvest2018 :: RelFile
johnInvest2018 = [relfile|import/john/otherbank/investments/1-in/2018/2018-12-30.csv|]

johnInvestJournal2018 :: RelFile
johnInvestJournal2018 = toJournal johnInvest2018

johnInvest2019 :: RelFile
johnInvest2019 = [relfile|import/john/otherbank/investments/1-in/2019/2019-01-30.csv|]

johnInvestJournal2019 :: RelFile
johnInvestJournal2019 = toJournal johnInvest2019

inputJohnOther :: [RelFile]
inputJohnOther = [johnCC2017, johnCC2018, johnInvest2018, johnInvest2019]

janeSavings2017 :: RelFile
janeSavings2017 = [relfile|import/jane/bogartbank/savings/1-in/2017/2017-12-30.csv|]

janeSavings2018 :: [RelFile]
janeSavings2018 = [
    [relfile|import/jane/bogartbank/savings/1-in/2018/2018-01-30.csv|]
  , [relfile|import/jane/bogartbank/savings/1-in/2018/2018-12-30.csv|]
  ]

janeSavings2019 :: RelFile
janeSavings2019 = [relfile|import/jane/bogartbank/savings/1-in/2019/2019-01-30.csv|]

inputJaneBogart :: [RelFile]
inputJaneBogart = [
  janeSavings2017
  , [relfile|import/jane/bogartbank/savings/3-journals/2018/2018-01-30.journal|]
  , [relfile|import/jane/bogartbank/savings/3-journals/2018/2018-12-30.journal|]
  , janeSavings2019
  ]

janeSavingsJournal2017 :: RelFile
janeSavingsJournal2017 = toJournal janeSavings2017

janeSavingsJournals2018 :: [RelFile]
janeSavingsJournals2018 = map toJournal janeSavings2018

janeSavingsJournal2019 :: RelFile
janeSavingsJournal2019 = toJournal janeSavings2019

janeSavingsJournals :: [RelFile]
janeSavingsJournals = [janeSavingsJournal2017] ++ janeSavingsJournals2018 ++ [janeSavingsJournal2019]

janeCC2017 :: RelFile
janeCC2017 = [relfile|import/jane/otherbank/creditcard/1-in/2017/2017-12-30.csv|]

janeCCJournal2017 :: RelFile
janeCCJournal2017 = toJournal janeCC2017

janeCC2018 :: RelFile
janeCC2018 = [relfile|import/jane/otherbank/creditcard/1-in/2018/2018-01-30.csv|]

janeCCJournal2018 :: RelFile
janeCCJournal2018 = toJournal janeCC2018

janeInvest2018 :: RelFile
janeInvest2018 = [relfile|import/jane/otherbank/investments/1-in/2018/2018-12-30.csv|]

janeInvestJournal2018 :: RelFile
janeInvestJournal2018 = toJournal janeInvest2018

janeInvest2019 :: RelFile
janeInvest2019 = [relfile|import/jane/otherbank/investments/1-in/2019/2019-01-30.csv|]

janeInvestJournal2019 :: RelFile
janeInvestJournal2019 = toJournal janeInvest2019

inputJaneOther :: [RelFile]
inputJaneOther = [janeCC2017, janeCC2018, janeInvest2018, janeInvest2019]

inputFiles :: [RelFile]
inputFiles = inputJohnBogart <> inputJohnOther <> inputJaneBogart <> inputJaneOther

journalFiles :: [RelFile]
journalFiles = map toJournal inputFiles