yesod-core: test for looping breadcrumbs
This commit is contained in:
parent
d981c87c39
commit
96a940b60c
@ -12,6 +12,7 @@ import YesodCoreTest.InternalRequest
|
|||||||
import YesodCoreTest.ErrorHandling
|
import YesodCoreTest.ErrorHandling
|
||||||
import YesodCoreTest.Cache
|
import YesodCoreTest.Cache
|
||||||
import YesodCoreTest.ParameterizedSite
|
import YesodCoreTest.ParameterizedSite
|
||||||
|
import YesodCoreTest.Breadcrumb
|
||||||
import qualified YesodCoreTest.WaiSubsite as WaiSubsite
|
import qualified YesodCoreTest.WaiSubsite as WaiSubsite
|
||||||
import qualified YesodCoreTest.Redirect as Redirect
|
import qualified YesodCoreTest.Redirect as Redirect
|
||||||
import qualified YesodCoreTest.JsLoader as JsLoader
|
import qualified YesodCoreTest.JsLoader as JsLoader
|
||||||
@ -61,3 +62,4 @@ specs = do
|
|||||||
Ssl.sslOnlySpec
|
Ssl.sslOnlySpec
|
||||||
Ssl.sameSiteSpec
|
Ssl.sameSiteSpec
|
||||||
Csrf.csrfSpec
|
Csrf.csrfSpec
|
||||||
|
breadcrumbTest
|
||||||
|
|||||||
58
yesod-core/test/YesodCoreTest/Breadcrumb.hs
Normal file
58
yesod-core/test/YesodCoreTest/Breadcrumb.hs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{-# LANGUAGE FlexibleInstances #-}
|
||||||
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE QuasiQuotes #-}
|
||||||
|
{-# LANGUAGE Rank2Types #-}
|
||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
|
|
||||||
|
module YesodCoreTest.Breadcrumb
|
||||||
|
( breadcrumbTest,
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
import qualified Data.ByteString.Lazy.Char8 as L8
|
||||||
|
import Data.Text (Text)
|
||||||
|
import Data.Typeable (Typeable)
|
||||||
|
import Network.Wai
|
||||||
|
import Network.Wai.Test
|
||||||
|
import Test.Hspec
|
||||||
|
import UnliftIO.IORef
|
||||||
|
import Yesod.Core
|
||||||
|
|
||||||
|
data A = A
|
||||||
|
|
||||||
|
mkYesod
|
||||||
|
"A"
|
||||||
|
[parseRoutes|
|
||||||
|
/ RootR GET
|
||||||
|
/loop LoopR GET
|
||||||
|
|]
|
||||||
|
|
||||||
|
instance Yesod A
|
||||||
|
|
||||||
|
instance YesodBreadcrumbs A where
|
||||||
|
breadcrumb r = case r of
|
||||||
|
RootR -> pure ("Root", Nothing)
|
||||||
|
LoopR -> pure ("Loop", Just LoopR) -- Purposefully a loop
|
||||||
|
|
||||||
|
getRootR :: Handler Text
|
||||||
|
getRootR = fst <$> breadcrumbs
|
||||||
|
|
||||||
|
getLoopR :: Handler Text
|
||||||
|
getLoopR = fst <$> breadcrumbs
|
||||||
|
|
||||||
|
breadcrumbTest :: Spec
|
||||||
|
breadcrumbTest =
|
||||||
|
describe "Test.Breadcrumb" $ do
|
||||||
|
it "can fetch the root which contains breadcrumbs" $
|
||||||
|
runner $ do
|
||||||
|
res <- request defaultRequest
|
||||||
|
assertStatus 200 res
|
||||||
|
it "gets a 500 for a route with a looping breadcrumb" $
|
||||||
|
runner $ do
|
||||||
|
res <- request defaultRequest {pathInfo = ["loop"]}
|
||||||
|
assertStatus 500 res
|
||||||
|
|
||||||
|
runner :: Session () -> IO ()
|
||||||
|
runner f = toWaiApp A >>= runSession f
|
||||||
Loading…
Reference in New Issue
Block a user