packages feed

cassava-records-0.1.0.0: test/Spec.hs

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}

import Data.Map as M
import Control.Monad
import Test.Tasty
import Test.Tasty.HUnit
import qualified Data.Vector as V
import qualified Data.ByteString.Lazy as BLZ
import Language.Haskell.TH
import Data.Text as DT

import Data.Cassava.Records
import Data.Cassava.Internal.RecordBuilder


-- expectedRecord record_name name_type = RecC (record_name') fields

-- expectedDeriv = [DerivClause Nothing [ConT ''Show, ConT ''Generic, ConT ''Data]]

-- expectedData record_name name_type =
--   DataD [] record_name [] Nothing expectedRecord name_type

testSimple = testCase "testSimpleInput"
  (
    do
      let expected_types = V.fromList  [
            ("emp_no", ConT ''Integer),
            ("name", ConT ''DT.Text),
            ("salary", ConT ''Double),
            ("status", ConT ''Bool),
            ("years", ConT ''Double)]
      let record_name = "TestSimpleR"
      let expected = makeRecord record_name $ makeFields expected_types "_"
      let qdec = makeCsvRecord record_name "test/data/salaries_simple.csv" "_" commaOptions
      dec <- runQ qdec
      expected_dec <- (runQ expected)
      assertEqual "Test Simple" (Prelude.head dec) (Prelude.head expected_dec)
  )


testMixedInput = testCase "testMixedInput"
  (
    do
      let expected_types = V.fromList  [
            ("emp_no", ConT ''Integer),
            ("name",  maybeType ''DT.Text),
            ("salary", maybeType ''Double),
            ("status", maybeType ''Bool),
            ("years", maybeType ''Double)]
      let record_name = "TestMixedR"
      let expected = makeRecord record_name $ makeFields expected_types "_"
      let qdec = makeCsvRecord record_name "test/data/salaries_mixed_input.csv" "_" commaOptions
      dec <- runQ qdec
      expected_dec <- (runQ expected)
      assertEqual "Test Maybe Columns" (Prelude.head dec) (Prelude.head expected_dec)
  )

tests :: TestTree
tests = testGroup "Tests" [
  testSimple,
  testMixedInput
  ]

main = defaultMain tests