packages feed

Hastructure-0.45.0: test/UT/ExpTest.hs

module UT.ExpTest(expTests)
where

import Test.Tasty
import Test.Tasty.HUnit

import qualified Data.Time as T
import qualified Lib as L
import qualified Asset as P
import qualified Deal as D
import qualified Deal.DealAction as DA
import qualified UT.DealTest as DT
import Expense
import Types
import qualified Cashflow as CF

import Debug.Trace
debug = flip trace


expTests =  testGroup "Expense Tests"
  [
    let
     f1 = Fee "FeeName1" (RecurFee MonthFirst 50) (L.toDate "20220101") 0 Nothing 0 Nothing Nothing
     f2 = Fee "FeeNameAccum" (RecurFee MonthFirst 50) (L.toDate "20220101") 60 (Just (L.toDate "20220310")) 0 Nothing Nothing
     _calcDate = (L.toDate "20220310")
     _calcDate2 = (L.toDate "20220115")
     _calcDate3 = (L.toDate "20220415")
     feesCalc = sequenceA [(DA.calcDueFee DT.td2 _calcDate f1) ,(DA.calcDueFee DT.td2 _calcDate2 f1) ,(DA.calcDueFee DT.td2 _calcDate3 f2) ,(DA.calcDueFee DT.td2 _calcDate3 f1)]
    in
      testCase "calc on diff same period for recur fee" $
      assertEqual
        "test date"
        (Right [100.0, 0.0, 110.0, 150.0])
        ((feeDue <$>) <$> feesCalc)
    ,
    let
     tsPoints = [(L.TsPoint (L.toDate "20220101") 10.0)
                 ,(L.TsPoint (L.toDate "20220301") 15.0)
                 ,(L.TsPoint (L.toDate "20220601") 20.0)]
     f1 = Fee "FeeName1" (FeeFlow (L.BalanceCurve tsPoints)) (L.toDate "20210101") 0 Nothing 0 Nothing Nothing
     _calcDate = (L.toDate "20220321")
     _calcDate2 = (L.toDate "20220621")
     _calcDate3 = (L.toDate "20211221")
     f1_ = Fee "FeeName1" (FeeFlow (L.BalanceCurve [(L.TsPoint (L.toDate "20220601") 20.0)])) (L.toDate "20210101") 25 (Just (L.toDate "20220321")) 0 Nothing Nothing
     f2_ = f1 {feeDue = 45.0, feeDueDate = Just _calcDate2, feeType = FeeFlow (L.BalanceCurve [])}
     f3_ = f1 {feeDue = 0, feeDueDate = Just _calcDate3}

     f1WithDue = Fee "FeeName1" (FeeFlow (L.BalanceCurve tsPoints)) (L.toDate "20210101") 3 Nothing 0 Nothing Nothing
     _f1WithDue = f1WithDue {feeType= FeeFlow (L.BalanceCurve [(L.TsPoint (L.toDate "20220601") 20.0)]), feeDue = 28, feeDueDate = Just _calcDate}
     feesCalc = sequenceA [DA.calcDueFee DT.td2 _calcDate f1
                          ,DA.calcDueFee DT.td2 _calcDate2 f1
                          ,DA.calcDueFee DT.td2 _calcDate3 f1
                          ,DA.calcDueFee DT.td2 _calcDate f1WithDue ]
    in
      testCase "test on Custom Fee Type" $
      assertEqual "calc Due Fee" (Right [f1_ , f2_ , f3_ , _f1WithDue]) feesCalc

  ]

--cnVatFeeTest = 
--  let 
--    vatFeeInt = Fee "VatFee" 
--                  (PctFee (PoolCollectionIncome CollectedInterest) 0.0325) 
--                  (L.toDate "20220101") 0 Nothing 0 Nothing Nothing
--    poolFlows = CashFlowFrame $ [MortgageFlow (toDate "20220101") 100 20 15 0 0 0 0 0.01
--                                 ,MortgageFlow (toDate "20220101") 100 20 15 0 0 0 0 0.01
--                                 ]
--  in 
--    testGroup "China VAT fee test" $
--    [
--
--
--    ]