{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}

module MaybeFieldDefsTest (specsWith, maybeFieldDefMigrate) where

import Data.String (IsString)

import Init

share [mkPersist sqlSettings { mpsGeneric = True },  mkMigrate "maybeFieldDefMigrate"] [persistLowerCase|
  MaybeFieldDefEntity
    optionalString    (Maybe String)
    optionalInt       (Maybe Int)
    deriving Eq Show
|]

specsWith :: (Runner backend m) => RunDb backend m -> Spec
specsWith :: RunDb backend m -> Spec
specsWith RunDb backend m
runDb = String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"Maybe Field Definitions" (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$ do
  String -> IO () -> SpecWith (Arg (IO ()))
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"runs appropriate migrations" (IO () -> SpecWith (Arg (IO ())))
-> IO () -> SpecWith (Arg (IO ()))
forall a b. (a -> b) -> a -> b
$ RunDb backend m
runDb RunDb backend m -> RunDb backend m
forall a b. (a -> b) -> a -> b
$ do
    Key (MaybeFieldDefEntityGeneric backend)
emptyEntity <- MaybeFieldDefEntityGeneric backend
-> ReaderT backend m (Key (MaybeFieldDefEntityGeneric backend))
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend, SafeToInsert record) =>
record -> ReaderT backend m (Key record)
insert (MaybeFieldDefEntityGeneric backend
 -> ReaderT backend m (Key (MaybeFieldDefEntityGeneric backend)))
-> MaybeFieldDefEntityGeneric backend
-> ReaderT backend m (Key (MaybeFieldDefEntityGeneric backend))
forall a b. (a -> b) -> a -> b
$ Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
forall backend.
Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
MaybeFieldDefEntity Maybe String
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing
    Maybe (MaybeFieldDefEntityGeneric backend)
emptyResult <- Key (MaybeFieldDefEntityGeneric backend)
-> ReaderT backend m (Maybe (MaybeFieldDefEntityGeneric backend))
forall backend record (m :: * -> *).
(PersistStoreRead backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> ReaderT backend m (Maybe record)
get Key (MaybeFieldDefEntityGeneric backend)
emptyEntity
    IO () -> ReaderT backend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT backend m ()) -> IO () -> ReaderT backend m ()
forall a b. (a -> b) -> a -> b
$ Maybe (MaybeFieldDefEntityGeneric backend)
emptyResult Maybe (MaybeFieldDefEntityGeneric backend)
-> Maybe (MaybeFieldDefEntityGeneric backend) -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= MaybeFieldDefEntityGeneric backend
-> Maybe (MaybeFieldDefEntityGeneric backend)
forall a. a -> Maybe a
Just (Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
forall backend.
Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
MaybeFieldDefEntity Maybe String
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing)
    Key (MaybeFieldDefEntityGeneric backend)
populatedEntity <- MaybeFieldDefEntityGeneric backend
-> ReaderT backend m (Key (MaybeFieldDefEntityGeneric backend))
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend, SafeToInsert record) =>
record -> ReaderT backend m (Key record)
insert (MaybeFieldDefEntityGeneric backend
 -> ReaderT backend m (Key (MaybeFieldDefEntityGeneric backend)))
-> MaybeFieldDefEntityGeneric backend
-> ReaderT backend m (Key (MaybeFieldDefEntityGeneric backend))
forall a b. (a -> b) -> a -> b
$ Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
forall backend.
Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
MaybeFieldDefEntity (String -> Maybe String
forall a. a -> Maybe a
Just String
"text") (Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8)
    Maybe (MaybeFieldDefEntityGeneric backend)
populatedResult <- Key (MaybeFieldDefEntityGeneric backend)
-> ReaderT backend m (Maybe (MaybeFieldDefEntityGeneric backend))
forall backend record (m :: * -> *).
(PersistStoreRead backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> ReaderT backend m (Maybe record)
get Key (MaybeFieldDefEntityGeneric backend)
populatedEntity
    IO () -> ReaderT backend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT backend m ()) -> IO () -> ReaderT backend m ()
forall a b. (a -> b) -> a -> b
$ Maybe (MaybeFieldDefEntityGeneric backend)
populatedResult Maybe (MaybeFieldDefEntityGeneric backend)
-> Maybe (MaybeFieldDefEntityGeneric backend) -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= MaybeFieldDefEntityGeneric backend
-> Maybe (MaybeFieldDefEntityGeneric backend)
forall a. a -> Maybe a
Just (Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
forall backend.
Maybe String -> Maybe Int -> MaybeFieldDefEntityGeneric backend
MaybeFieldDefEntity (String -> Maybe String
forall a. a -> Maybe a
Just String
"text") (Int -> Maybe Int
forall a. a -> Maybe a
Just Int
8))