packages feed

hledger-flow-0.12.3.0: test/Common/Unit.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE OverloadedLists #-}

module Common.Unit where

import Test.HUnit
import Turtle
import Prelude hiding (FilePath)

import Hledger.Flow.Common

import Data.Either
import qualified Data.Text as T

testShowCmdArgs :: Test
testShowCmdArgs = TestCase (
  do
    let opts = ["--number", "/tmp/file with spaces"]
    let expected = "--number '/tmp/file with spaces'"
    let actual = showCmdArgs opts
    assertEqual "Convert command-line arguments to text" expected actual)

testIncludeYears :: Test
testIncludeYears = TestCase (
  do
    let txterr = "Some text without years"
    let expectederr = ["Unable to extract years from the following text:", txterr, "Errors:"]
    let actualerr = (init . head) $ map (T.lines) $ lefts [includeYears' txterr] :: [Text]
    assertEqual "Get a list of years from an include file - error case" expectederr actualerr

    let txt1 = "### Generated by hledger-flow - DO NOT EDIT ###\n\n" <>
          "!include import/2014-include.journal\n" <>
          "!include import/2015-include.journal\n" <>
          "!include import/2016-include.journal\n" <>
          "!include import/2017-include.journal\n" <>
          "!include import/2018-include.journal\n" <>
          "!include import/2019-include.journal"

    let expected1 = Right [2014..2019]
    let actual1 = includeYears' txt1
    assertEqual "Get a list of years from an include file - success case 1" expected1 actual1

    let txt2 = "!include 2019-include.journal"

    let expected2 = Right [2019]
    let actual2 = includeYears' txt2
    assertEqual "Get a list of years from an include file - success case 2" expected2 actual2
  )

testExtractDigits :: Test
testExtractDigits = TestCase (
  do
    let txt1 = "A number: 321\nAnother number is 42, so is 0"

    let expected1 = Right 321420
    let actual1 = extractDigits txt1
    assertEqual "Extract digits from text 1" expected1 actual1

    let txt2 = "No numbers in this line"

    let expected2 = Left "input does not start with a digit"
    let actual2 = extractDigits txt2
    assertEqual "Extract digits from text 2" expected2 actual2
  )

tests :: Test
tests = TestList [testShowCmdArgs, testIncludeYears, testExtractDigits]