module MpsNoPrefixTest 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 "mpsNoPrefix" (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 "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 NoPrefix2] -> ReaderT SqlBackend m () forall backend (m :: * -> *) record. (PersistQueryWrite backend, MonadIO m, PersistRecordBackend record backend) => [Filter record] -> ReaderT backend m () deleteWhere ([] :: [Filter NoPrefix2]) [Filter NoPrefix1] -> ReaderT SqlBackend m () forall backend (m :: * -> *) record. (PersistQueryWrite backend, MonadIO m, PersistRecordBackend record backend) => [Filter record] -> ReaderT backend m () deleteWhere ([] :: [Filter NoPrefix1]) Key NoPrefix1 np1a <- NoPrefix1 -> ReaderT SqlBackend m (Key NoPrefix1) forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m (Key record) insert (NoPrefix1 -> ReaderT SqlBackend m (Key NoPrefix1)) -> NoPrefix1 -> ReaderT SqlBackend m (Key NoPrefix1) forall a b. (a -> b) -> a -> b $ Int -> NoPrefix1 forall backend. Int -> NoPrefix1Generic backend NoPrefix1 Int 1 Key NoPrefix1 -> [Update NoPrefix1] -> ReaderT SqlBackend m () forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => Key record -> [Update record] -> ReaderT backend m () update Key NoPrefix1 np1a [EntityField NoPrefix1 Int forall backend typ. (typ ~ Int) => EntityField (NoPrefix1Generic backend) typ SomeFieldName EntityField NoPrefix1 Int -> Int -> Update NoPrefix1 forall v typ. PersistField typ => EntityField v typ -> typ -> Update v =. Int 2] Key NoPrefix1 np1b <- NoPrefix1 -> ReaderT SqlBackend m (Key NoPrefix1) forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m (Key record) insert (NoPrefix1 -> ReaderT SqlBackend m (Key NoPrefix1)) -> NoPrefix1 -> ReaderT SqlBackend m (Key NoPrefix1) forall a b. (a -> b) -> a -> b $ Int -> NoPrefix1 forall backend. Int -> NoPrefix1Generic backend NoPrefix1 Int 3 Key NoPrefix2 np2 <- NoPrefix2 -> ReaderT SqlBackend m (Key NoPrefix2) forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m (Key record) insert (NoPrefix2 -> ReaderT SqlBackend m (Key NoPrefix2)) -> NoPrefix2 -> ReaderT SqlBackend m (Key NoPrefix2) forall a b. (a -> b) -> a -> b $ Int -> Key NoPrefix1 -> NoPrefix2 forall backend. Int -> Key (NoPrefix1Generic backend) -> NoPrefix2Generic backend NoPrefix2 Int 4 Key NoPrefix1 np1a Key NoPrefix2 -> [Update NoPrefix2] -> ReaderT SqlBackend m () forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => Key record -> [Update record] -> ReaderT backend m () update Key NoPrefix2 np2 [EntityField NoPrefix2 (Key NoPrefix1) forall backend typ. (typ ~ Key (NoPrefix1Generic backend)) => EntityField (NoPrefix2Generic backend) typ UnprefixedRef EntityField NoPrefix2 (Key NoPrefix1) -> Key NoPrefix1 -> Update NoPrefix2 forall v typ. PersistField typ => EntityField v typ -> typ -> Update v =. Key NoPrefix1 np1b, EntityField NoPrefix2 Int forall backend typ. (typ ~ Int) => EntityField (NoPrefix2Generic backend) typ SomeOtherFieldName EntityField NoPrefix2 Int -> Int -> Update NoPrefix2 forall v typ. PersistField typ => EntityField v typ -> typ -> Update v =. Int 5] Maybe NoPrefix1 mnp1a <- Key NoPrefix1 -> ReaderT SqlBackend m (Maybe NoPrefix1) forall backend record (m :: * -> *). (PersistStoreRead backend, MonadIO m, PersistRecordBackend record backend) => Key record -> ReaderT backend m (Maybe record) get Key NoPrefix1 np1a 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 NoPrefix1 mnp1a Maybe NoPrefix1 -> Maybe NoPrefix1 -> IO () forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO () @?= NoPrefix1 -> Maybe NoPrefix1 forall a. a -> Maybe a Just (Int -> NoPrefix1 forall backend. Int -> NoPrefix1Generic backend NoPrefix1 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 $ (NoPrefix1 -> Int) -> Maybe NoPrefix1 -> Maybe Int forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap NoPrefix1 -> Int forall backend. NoPrefix1Generic backend -> Int someFieldName Maybe NoPrefix1 mnp1a 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 NoPrefix2 mnp2 <- Key NoPrefix2 -> ReaderT SqlBackend m (Maybe NoPrefix2) forall backend record (m :: * -> *). (PersistStoreRead backend, MonadIO m, PersistRecordBackend record backend) => Key record -> ReaderT backend m (Maybe record) get Key NoPrefix2 np2 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 $ (NoPrefix2 -> Key NoPrefix1) -> Maybe NoPrefix2 -> Maybe (Key NoPrefix1) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap NoPrefix2 -> Key NoPrefix1 forall backend. NoPrefix2Generic backend -> Key (NoPrefix1Generic backend) unprefixedRef Maybe NoPrefix2 mnp2 Maybe (Key NoPrefix1) -> Maybe (Key NoPrefix1) -> IO () forall a. (HasCallStack, Eq a, Show a) => a -> a -> IO () @?= Key NoPrefix1 -> Maybe (Key NoPrefix1) forall a. a -> Maybe a Just Key NoPrefix1 np1b 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 $ (NoPrefix2 -> Int) -> Maybe NoPrefix2 -> Maybe Int forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap NoPrefix2 -> Int forall backend. NoPrefix2Generic backend -> Int someOtherFieldName Maybe NoPrefix2 mnp2 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 NoPrefixSumGeneric SqlBackend -> ReaderT SqlBackend m () forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m () insert_ (NoPrefixSumGeneric SqlBackend -> ReaderT SqlBackend m ()) -> NoPrefixSumGeneric SqlBackend -> ReaderT SqlBackend m () forall a b. (a -> b) -> a -> b $ Int -> NoPrefixSumGeneric SqlBackend forall backend. Int -> NoPrefixSumGeneric backend UnprefixedLeftSum Int 5 NoPrefixSumGeneric SqlBackend -> ReaderT SqlBackend m () forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m () insert_ (NoPrefixSumGeneric SqlBackend -> ReaderT SqlBackend m ()) -> NoPrefixSumGeneric SqlBackend -> ReaderT SqlBackend m () forall a b. (a -> b) -> a -> b $ String -> NoPrefixSumGeneric SqlBackend forall backend. String -> NoPrefixSumGeneric backend UnprefixedRightSum String "Hello" String -> IO () -> SpecWith (Arg (IO ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "IsSqlKey instance" (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 let p :: PersonGeneric backend p = Text -> Int -> Maybe Text -> PersonGeneric backend forall backend. Text -> Int -> Maybe Text -> PersonGeneric backend Person Text "Alice" Int 30 Maybe Text forall a. Maybe a Nothing key :: Key (PersonGeneric SqlBackend) key@(PersonKey (SqlBackendKey i)) <- PersonGeneric SqlBackend -> ReaderT SqlBackend m (Key (PersonGeneric SqlBackend)) forall backend record (m :: * -> *). (PersistStoreWrite backend, MonadIO m, PersistRecordBackend record backend) => record -> ReaderT backend m (Key record) insert PersonGeneric SqlBackend forall backend. PersonGeneric backend p 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 $ Key (PersonGeneric SqlBackend) -> Int64 forall record. ToBackendKey SqlBackend record => Key record -> Int64 fromSqlKey Key (PersonGeneric SqlBackend) key Int64 -> Int64 -> IO () forall a. (HasCallStack, Show a, Eq a) => a -> a -> IO () `shouldBe` (Int64 i :: Int64) Maybe (PersonGeneric SqlBackend) mp <- Key (PersonGeneric SqlBackend) -> ReaderT SqlBackend m (Maybe (PersonGeneric SqlBackend)) forall backend record (m :: * -> *). (PersistStoreRead backend, MonadIO m, PersistRecordBackend record backend) => Key record -> ReaderT backend m (Maybe record) get (Key (PersonGeneric SqlBackend) -> ReaderT SqlBackend m (Maybe (PersonGeneric SqlBackend))) -> Key (PersonGeneric SqlBackend) -> ReaderT SqlBackend m (Maybe (PersonGeneric SqlBackend)) forall a b. (a -> b) -> a -> b $ Int64 -> Key (PersonGeneric SqlBackend) forall record. ToBackendKey SqlBackend record => Int64 -> Key record toSqlKey Int64 i 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 (PersonGeneric SqlBackend) mp Maybe (PersonGeneric SqlBackend) -> Maybe (PersonGeneric SqlBackend) -> IO () forall a. (HasCallStack, Show a, Eq a) => a -> a -> IO () `shouldBe` PersonGeneric SqlBackend -> Maybe (PersonGeneric SqlBackend) forall a. a -> Maybe a Just PersonGeneric SqlBackend forall backend. PersonGeneric backend p