module MpsCustomPrefixTest where

import Init
import PersistentTestModels

specsWith :: MonadIO m => RunDb SqlBackend m -> Spec
specsWith :: RunDb SqlBackend m -> Spec
specsWith RunDb SqlBackend m
runDb = String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe String
"mpsCustomPrefix" (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$
  String -> IO () -> SpecWith (Arg (IO ()))
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"works" (IO () -> SpecWith (Arg (IO ())))
-> IO () -> SpecWith (Arg (IO ()))
forall a b. (a -> b) -> a -> b
$ RunDb SqlBackend m
runDb RunDb SqlBackend m -> RunDb SqlBackend m
forall a b. (a -> b) -> a -> b
$ do
    [Filter CustomPrefix2] -> ReaderT SqlBackend m ()
forall backend (m :: * -> *) record.
(PersistQueryWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
[Filter record] -> ReaderT backend m ()
deleteWhere ([] :: [Filter CustomPrefix2])
    [Filter CustomPrefix1] -> ReaderT SqlBackend m ()
forall backend (m :: * -> *) record.
(PersistQueryWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
[Filter record] -> ReaderT backend m ()
deleteWhere ([] :: [Filter CustomPrefix1])
    Key CustomPrefix1
cp1a <- CustomPrefix1 -> ReaderT SqlBackend m (Key CustomPrefix1)
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
record -> ReaderT backend m (Key record)
insert (CustomPrefix1 -> ReaderT SqlBackend m (Key CustomPrefix1))
-> CustomPrefix1 -> ReaderT SqlBackend m (Key CustomPrefix1)
forall a b. (a -> b) -> a -> b
$ Int -> CustomPrefix1
forall backend. Int -> CustomPrefix1Generic backend
CustomPrefix1 Int
1
    Key CustomPrefix1
-> [Update CustomPrefix1] -> ReaderT SqlBackend m ()
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
update Key CustomPrefix1
cp1a [EntityField CustomPrefix1 Int
forall backend typ.
(typ ~ Int) =>
EntityField (CustomPrefix1Generic backend) typ
CP1CustomFieldName EntityField CustomPrefix1 Int -> Int -> Update CustomPrefix1
forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Int
2]
    Key CustomPrefix1
cp1b <- CustomPrefix1 -> ReaderT SqlBackend m (Key CustomPrefix1)
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
record -> ReaderT backend m (Key record)
insert (CustomPrefix1 -> ReaderT SqlBackend m (Key CustomPrefix1))
-> CustomPrefix1 -> ReaderT SqlBackend m (Key CustomPrefix1)
forall a b. (a -> b) -> a -> b
$ Int -> CustomPrefix1
forall backend. Int -> CustomPrefix1Generic backend
CustomPrefix1 Int
3
    Key CustomPrefix2
cp2 <- CustomPrefix2 -> ReaderT SqlBackend m (Key CustomPrefix2)
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
record -> ReaderT backend m (Key record)
insert (CustomPrefix2 -> ReaderT SqlBackend m (Key CustomPrefix2))
-> CustomPrefix2 -> ReaderT SqlBackend m (Key CustomPrefix2)
forall a b. (a -> b) -> a -> b
$ Int -> Key CustomPrefix1 -> CustomPrefix2
forall backend.
Int
-> Key (CustomPrefix1Generic backend)
-> CustomPrefix2Generic backend
CustomPrefix2 Int
4 Key CustomPrefix1
cp1a
    Key CustomPrefix2
-> [Update CustomPrefix2] -> ReaderT SqlBackend m ()
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
update Key CustomPrefix2
cp2 [EntityField CustomPrefix2 (Key CustomPrefix1)
forall backend typ.
(typ ~ Key (CustomPrefix1Generic backend)) =>
EntityField (CustomPrefix2Generic backend) typ
CP2CustomPrefixedRef EntityField CustomPrefix2 (Key CustomPrefix1)
-> Key CustomPrefix1 -> Update CustomPrefix2
forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Key CustomPrefix1
cp1b, EntityField CustomPrefix2 Int
forall backend typ.
(typ ~ Int) =>
EntityField (CustomPrefix2Generic backend) typ
CP2OtherCustomFieldName EntityField CustomPrefix2 Int -> Int -> Update CustomPrefix2
forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Int
5]

    Maybe CustomPrefix1
mcp1a <- Key CustomPrefix1 -> ReaderT SqlBackend m (Maybe CustomPrefix1)
forall backend record (m :: * -> *).
(PersistStoreRead backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> ReaderT backend m (Maybe record)
get Key CustomPrefix1
cp1a
    IO () -> ReaderT SqlBackend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT SqlBackend m ())
-> IO () -> ReaderT SqlBackend m ()
forall a b. (a -> b) -> a -> b
$ Maybe CustomPrefix1
mcp1a Maybe CustomPrefix1 -> Maybe CustomPrefix1 -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= CustomPrefix1 -> Maybe CustomPrefix1
forall a. a -> Maybe a
Just (Int -> CustomPrefix1
forall backend. Int -> CustomPrefix1Generic backend
CustomPrefix1 Int
2)
    IO () -> ReaderT SqlBackend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT SqlBackend m ())
-> IO () -> ReaderT SqlBackend m ()
forall a b. (a -> b) -> a -> b
$ (CustomPrefix1 -> Int) -> Maybe CustomPrefix1 -> Maybe Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CustomPrefix1 -> Int
forall backend. CustomPrefix1Generic backend -> Int
_cp1CustomFieldName Maybe CustomPrefix1
mcp1a Maybe Int -> Maybe Int -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= Int -> Maybe Int
forall a. a -> Maybe a
Just Int
2
    Maybe CustomPrefix2
mcp2 <- Key CustomPrefix2 -> ReaderT SqlBackend m (Maybe CustomPrefix2)
forall backend record (m :: * -> *).
(PersistStoreRead backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> ReaderT backend m (Maybe record)
get Key CustomPrefix2
cp2
    IO () -> ReaderT SqlBackend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT SqlBackend m ())
-> IO () -> ReaderT SqlBackend m ()
forall a b. (a -> b) -> a -> b
$ (CustomPrefix2 -> Key CustomPrefix1)
-> Maybe CustomPrefix2 -> Maybe (Key CustomPrefix1)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CustomPrefix2 -> Key CustomPrefix1
forall backend.
CustomPrefix2Generic backend -> Key (CustomPrefix1Generic backend)
_cp2CustomPrefixedRef Maybe CustomPrefix2
mcp2 Maybe (Key CustomPrefix1) -> Maybe (Key CustomPrefix1) -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= Key CustomPrefix1 -> Maybe (Key CustomPrefix1)
forall a. a -> Maybe a
Just Key CustomPrefix1
cp1b
    IO () -> ReaderT SqlBackend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT SqlBackend m ())
-> IO () -> ReaderT SqlBackend m ()
forall a b. (a -> b) -> a -> b
$ (CustomPrefix2 -> Int) -> Maybe CustomPrefix2 -> Maybe Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CustomPrefix2 -> Int
forall backend. CustomPrefix2Generic backend -> Int
_cp2OtherCustomFieldName Maybe CustomPrefix2
mcp2 Maybe Int -> Maybe Int -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= Int -> Maybe Int
forall a. a -> Maybe a
Just Int
5

    Key (CustomPrefixSumGeneric SqlBackend)
cpls <- CustomPrefixSumGeneric SqlBackend
-> ReaderT SqlBackend m (Key (CustomPrefixSumGeneric SqlBackend))
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
record -> ReaderT backend m (Key record)
insert (CustomPrefixSumGeneric SqlBackend
 -> ReaderT SqlBackend m (Key (CustomPrefixSumGeneric SqlBackend)))
-> CustomPrefixSumGeneric SqlBackend
-> ReaderT SqlBackend m (Key (CustomPrefixSumGeneric SqlBackend))
forall a b. (a -> b) -> a -> b
$ Int -> CustomPrefixSumGeneric SqlBackend
forall backend. Int -> CustomPrefixSumGeneric backend
CPCustomPrefixedLeftSum Int
5
    Key (CustomPrefixSumGeneric SqlBackend)
cprs <- CustomPrefixSumGeneric SqlBackend
-> ReaderT SqlBackend m (Key (CustomPrefixSumGeneric SqlBackend))
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
record -> ReaderT backend m (Key record)
insert (CustomPrefixSumGeneric SqlBackend
 -> ReaderT SqlBackend m (Key (CustomPrefixSumGeneric SqlBackend)))
-> CustomPrefixSumGeneric SqlBackend
-> ReaderT SqlBackend m (Key (CustomPrefixSumGeneric SqlBackend))
forall a b. (a -> b) -> a -> b
$ String -> CustomPrefixSumGeneric SqlBackend
forall backend. String -> CustomPrefixSumGeneric backend
CPCustomPrefixedRightSum String
"Hello"
    Key (CustomPrefixSumGeneric SqlBackend)
-> [Update (CustomPrefixSumGeneric SqlBackend)]
-> ReaderT SqlBackend m ()
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
update Key (CustomPrefixSumGeneric SqlBackend)
cpls [EntityField (CustomPrefixSumGeneric SqlBackend) Int
forall backend typ.
(typ ~ Int) =>
EntityField (CustomPrefixSumGeneric backend) typ
CPCustomPrefixedLeft EntityField (CustomPrefixSumGeneric SqlBackend) Int
-> Int -> Update (CustomPrefixSumGeneric SqlBackend)
forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. Int
6]
    Key (CustomPrefixSumGeneric SqlBackend)
-> [Update (CustomPrefixSumGeneric SqlBackend)]
-> ReaderT SqlBackend m ()
forall backend record (m :: * -> *).
(PersistStoreWrite backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> [Update record] -> ReaderT backend m ()
update Key (CustomPrefixSumGeneric SqlBackend)
cprs [EntityField (CustomPrefixSumGeneric SqlBackend) String
forall backend typ.
(typ ~ String) =>
EntityField (CustomPrefixSumGeneric backend) typ
CPCustomPrefixedRight EntityField (CustomPrefixSumGeneric SqlBackend) String
-> String -> Update (CustomPrefixSumGeneric SqlBackend)
forall v typ.
PersistField typ =>
EntityField v typ -> typ -> Update v
=. String
"World"]
    Maybe (CustomPrefixSumGeneric SqlBackend)
mcpls <- Key (CustomPrefixSumGeneric SqlBackend)
-> ReaderT SqlBackend m (Maybe (CustomPrefixSumGeneric SqlBackend))
forall backend record (m :: * -> *).
(PersistStoreRead backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> ReaderT backend m (Maybe record)
get Key (CustomPrefixSumGeneric SqlBackend)
cpls
    Maybe (CustomPrefixSumGeneric SqlBackend)
mcprs <- Key (CustomPrefixSumGeneric SqlBackend)
-> ReaderT SqlBackend m (Maybe (CustomPrefixSumGeneric SqlBackend))
forall backend record (m :: * -> *).
(PersistStoreRead backend, MonadIO m,
 PersistRecordBackend record backend) =>
Key record -> ReaderT backend m (Maybe record)
get Key (CustomPrefixSumGeneric SqlBackend)
cprs

    IO () -> ReaderT SqlBackend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT SqlBackend m ())
-> IO () -> ReaderT SqlBackend m ()
forall a b. (a -> b) -> a -> b
$ Maybe (CustomPrefixSumGeneric SqlBackend)
mcpls Maybe (CustomPrefixSumGeneric SqlBackend)
-> Maybe (CustomPrefixSumGeneric SqlBackend) -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= CustomPrefixSumGeneric SqlBackend
-> Maybe (CustomPrefixSumGeneric SqlBackend)
forall a. a -> Maybe a
Just (Int -> CustomPrefixSumGeneric SqlBackend
forall backend. Int -> CustomPrefixSumGeneric backend
CPCustomPrefixedLeftSum Int
6)
    IO () -> ReaderT SqlBackend m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ReaderT SqlBackend m ())
-> IO () -> ReaderT SqlBackend m ()
forall a b. (a -> b) -> a -> b
$ Maybe (CustomPrefixSumGeneric SqlBackend)
mcprs Maybe (CustomPrefixSumGeneric SqlBackend)
-> Maybe (CustomPrefixSumGeneric SqlBackend) -> IO ()
forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO ()
@?= CustomPrefixSumGeneric SqlBackend
-> Maybe (CustomPrefixSumGeneric SqlBackend)
forall a. a -> Maybe a
Just (String -> CustomPrefixSumGeneric SqlBackend
forall backend. String -> CustomPrefixSumGeneric backend
CPCustomPrefixedRightSum String
"World")