{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} module Fixture.User( User(..) , UserCreate(..) , userToUserCreate , userCreateToUser ) where import Data.DeriveTH import Data.Time import Database.PostgreSQL.Query import GHC.Generics import Test.QuickCheck.Arbitrary import Test.QuickCheck.Instances newtype NotNullString = NotNullString String deriving (Eq, Show, FromField, ToField) instance Arbitrary NotNullString where arbitrary = NotNullString . filter (/= '\0') <$> arbitrary -- | Sample User record that is used to test custom types as return type data User = User { userId :: !Int , userName :: !NotNullString , userPassword :: !NotNullString , userRegDay :: !Day } deriving (Generic, Eq, Show) derive makeArbitrary ''User deriveFromRow ''User deriveToRow ''User -- | Sample User record that is used to test custom types as return type data UserCreate = UserCreate { userCreateName :: !NotNullString , userCreatePassword :: !NotNullString , userCreateRegDay :: !Day } deriving (Generic, Eq, Show) derive makeArbitrary ''UserCreate deriveFromRow ''UserCreate deriveToRow ''UserCreate userToUserCreate :: User -> UserCreate userToUserCreate User{..} = UserCreate { userCreateName = userName , userCreatePassword = userPassword , userCreateRegDay = userRegDay } userCreateToUser :: UserCreate -> Int -> User userCreateToUser UserCreate{..} i = User { userId = i , userName = userCreateName , userPassword = userCreatePassword , userRegDay = userCreateRegDay }