packages feed

aeson-typescript-0.5.0.0: test/Basic.hs

module Basic (tests) where

import Data.Aeson as A
import Data.Aeson.TypeScript.TH
import Data.Aeson.TypeScript.Types
import Data.Proxy
import Data.String.Interpolate
import Prelude hiding (Double)
import Test.Hspec


data Unit1 = Unit1
$(deriveTypeScript A.defaultOptions ''Unit1)

data Unit2 = Unit2
$(deriveTypeScript (A.defaultOptions { A.tagSingleConstructors = True
                                     , A.constructorTagModifier = const "foo" }) ''Unit2)

tests :: SpecWith ()
tests = describe "Basic tests" $ do
  describe "tagSingleConstructors and constructorTagModifier" $ do
    it [i|Works with a normal unit|] $ do
      (getTypeScriptDeclarations (Proxy :: Proxy Unit1)) `shouldBe` ([
        TSTypeAlternatives "Unit1" [] ["IUnit1"] Nothing
        , TSTypeAlternatives "IUnit1" [] ["void[]"] Nothing
        ])

    it [i|Works with a unit with constructorTagModifier|] $ do
      (getTypeScriptDeclarations (Proxy :: Proxy Unit2)) `shouldBe` ([
        TSTypeAlternatives "Unit2" [] ["\"foo\""] Nothing
        ])


main :: IO ()
main = hspec tests