packages feed

persistent-test-2.13.2.1: src/MaxLenTest.hs

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

module MaxLenTest (specsWith, maxlenMigrate) where

import Data.String (IsString)

import Init

share
    [mkPersist sqlSettings{mpsGeneric = True}, mkMigrate "maxlenMigrate"]
    [persistLowerCase|
  MaxLen
    text1 Text
    text2 Text maxlen=3
    bs1 ByteString
    bs2 ByteString maxlen=3
    str1 String
    str2 String maxlen=3
    MLText1 text1
    MLText2 text2
    MLBs1 bs1
    MLBs2 bs2
    MLStr1 str1
    MLStr2 str2
    deriving Show Eq
|]

specsWith :: (Runner backend m) => RunDb backend m -> Spec
specsWith runDb = describe "Maximum length attribute" $ do
    it "truncates values that are too long" $ runDb $ do
        let
            t1 = MaxLen a a a a a a
            t2 = MaxLen b b b b b b
            t2' = MaxLen b b' b b' b b'
            a, b, b' :: (IsString t) => t
            a = "a"
            b = "12345"
            b' = "123"
        t1k <- insert t1
        t2k <- insert t2
        Just t1v <- get t1k
        Just t2v <- get t2k
        liftIO $ do
            t1v @?= t1
            if t2v == t2
                then t2v @?= t2 -- FIXME: why u no truncate?
                else t2v @?= t2'