packages feed

ocaml-export-0.13.0: test/ProductApp.hs

{-# LANGUAGE TemplateHaskell #-}

module ProductApp where

import OCaml.Export
import Product
-- containers
import qualified Data.Map as Map
-- hspec
import Test.Hspec

fileMap :: Map.Map String EmbeddedOCamlFiles
fileMap = Map.fromList $(mkFiles True False (Proxy :: Proxy ProductPackage))

$(mkOCamlSpecServer "ProductPackage" (Proxy :: Proxy ProductPackage))

spec :: Spec
spec = do
  runIO $ mkGoldenFiles (Proxy :: Proxy ProductPackage) 10 "test/interface/golden/golden/product"
  runGoldenSpec (Proxy :: Proxy ProductPackage) 10 "test/interface/golden/golden/product"

  let dir = "test/interface/temp"

  -- create spec to be tested against servant
  runIO $
    mkPackage
      (Proxy :: Proxy ProductPackage)
      (PackageOptions dir "product" fileMap True $
       Just $
         SpecOptions
           "__tests__/product-servant"
           "golden/product"
           (Just "http://localhost:8081"))

  -- create spec to be tested against files only
  runIO $
    mkPackage
      (Proxy :: Proxy ProductPackage)
      (PackageOptions dir "product" fileMap True $
       Just $
         SpecOptions
           "__tests__/product"
           "golden/product"
           Nothing)
  
  describe "OCaml Declaration with Interface: Product Types" $ do
    compareInterfaceFiles "Person"
    compareInterfaceFiles "Company"
    compareInterfaceFiles "Card"
    compareInterfaceFiles "OneTypeParameter"
    compareInterfaceFiles "TwoTypeParameters"
    compareInterfaceFiles "ThreeTypeParameters"
    compareInterfaceFiles "SubTypeParameter"
    compareInterfaceFiles "UnnamedProduct"
    compareInterfaceFiles "ComplexProduct"
    compareInterfaceFiles "Wrapper"
    compareInterfaceFiles "Box"
    compareInterfaceFiles "Key"