hyperbole-0.4.2: test/Test/ViewActionSpec.hs
module Test.ViewActionSpec where
import Data.Text (Text)
import GHC.Generics
import Skeletest
import Web.Hyperbole.HyperView
data Simple = Simple
deriving (Generic, Eq, Show, Read, ViewAction)
data Product = Product String Int
deriving (Generic, Show, Eq, ViewAction, Read)
data Product' = Product' HasText Int
deriving (Generic, Show, Eq, ViewAction, Read)
data Sum
= SumA
| SumB Int
deriving (Generic, Show, Eq, Read, ViewAction)
data Compound = Compound Product
deriving (Generic, Show, Eq, Read, ViewAction)
data HasText = HasText Text
deriving (Generic, Show, Eq, Read, ViewAction)
-- data Compound
-- = One
-- | Two Thing
-- | WithId (Id Thing)
-- deriving (Generic, Param, Show, Eq)
--
--
-- newtype Id a = Id {fromId :: Text}
-- deriving newtype (Param, Eq, Ord)
-- deriving (Generic, Show)
--
--
-- instance Param Custom where
-- toParam Custom = "something"
-- parseParam "something" = Just Custom
-- parseParam _ = Nothing
spec :: Spec
spec = do
describe "ViewAction" $ do
describe "toAction" $ do
it "simple" $ toAction Simple `shouldBe` "Simple"
it "has text" $ toAction (HasText "hello world") `shouldBe` "HasText \"hello world\""
it "product" $ toAction (Product "hello world" 123) `shouldBe` "Product \"hello world\" 123"
it "sum" $ toAction (SumB 123) `shouldBe` "SumB 123"
it "compound" $ toAction (Compound (Product "hello world" 123)) `shouldBe` "Compound (Product \"hello world\" 123)"
describe "parseAction" $ do
it "simple" $ parseAction "Simple" `shouldBe` Just Simple
describe "roundTrip" $ do
it "simple" $ do
parseAction (toAction Simple) `shouldBe` Just Simple
it "has text multiple words" $ do
let a = HasText "hello world"
parseAction (toAction a) `shouldBe` Just a
it "product" $ do
let a = Product "hello world" 123
parseAction (toAction a) `shouldBe` Just a
it "product'" $ do
let a = Product' (HasText "hello world") 123
parseAction (toAction a) `shouldBe` Just a
it "compound" $ do
let a = Compound (Product "hello world" 123)
parseAction (toAction a) `shouldBe` Just a
it "sum" $ do
let a = SumB 123
parseAction (toAction a) `shouldBe` Just a