persistent-test-2.13.2.1: src/CustomPrimaryKeyReferenceTest.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
-- This test is based on this issue: https://github.com/yesodweb/persistent/issues/421
-- The primary thing this is testing is the migration, thus the test code itself being mostly negligible.
module CustomPrimaryKeyReferenceTest where
import Init
-- mpsGeneric = False is due to a bug or at least lack of a feature in mkKeyTypeDec TH.hs
share
[mkPersist persistSettings{mpsGeneric = False}, mkMigrate "migration"]
[persistLowerCase|
Tweet
tweetId Int
statusText Text sqltype=varchar(170)
Primary tweetId
UniqueTweetId tweetId
deriving Show
TweetUrl
tweetId TweetId
tweetUrl Text sqltype=varchar(255)
finalUrl Text Maybe sqltype=varchar(255)
UniqueTweetIdTweetUrl tweetId tweetUrl
deriving Show
|]
cleanDB
:: (MonadIO m, PersistQuery backend, PersistEntityBackend Tweet ~ backend)
=> ReaderT backend m ()
cleanDB = do
deleteWhere ([] :: [Filter Tweet])
deleteWhere ([] :: [Filter TweetUrl])
specsWith :: (MonadFail m, MonadIO m) => RunDb SqlBackend m -> Spec
specsWith runDb = describe "custom primary key reference" $ do
let
tweet = Tweet{tweetTweetId = 1, tweetStatusText = "Hello!"}
it "can insert a Tweet" $ runDb $ do
tweetId <- insert tweet
let
url =
TweetUrl
{ tweetUrlTweetId = tweetId
, tweetUrlTweetUrl = "http://google.com"
, tweetUrlFinalUrl = Just "http://example.com"
}
insert_ url