From 9ce822b8f7c1780ecdc61c8234bb39d236b8ca48 Mon Sep 17 00:00:00 2001 From: Ari Fordsham Date: Sun, 9 Jul 2023 16:05:01 +0300 Subject: [PATCH] SubSubTest --- yesod-core/test/YesodCoreTest.hs | 2 + yesod-core/test/YesodCoreTest/SubSub.hs | 48 +++++++++++++++++++++ yesod-core/test/YesodCoreTest/SubSubData.hs | 20 +++++++++ yesod-core/yesod-core.cabal | 2 + 4 files changed, 72 insertions(+) create mode 100644 yesod-core/test/YesodCoreTest/SubSub.hs create mode 100644 yesod-core/test/YesodCoreTest/SubSubData.hs diff --git a/yesod-core/test/YesodCoreTest.hs b/yesod-core/test/YesodCoreTest.hs index 8f2b96dc..dc83b760 100644 --- a/yesod-core/test/YesodCoreTest.hs +++ b/yesod-core/test/YesodCoreTest.hs @@ -9,6 +9,7 @@ import YesodCoreTest.Meta import YesodCoreTest.Links import YesodCoreTest.Header import YesodCoreTest.NoOverloadedStrings +import YesodCoreTest.SubSub import YesodCoreTest.InternalRequest import YesodCoreTest.ErrorHandling import YesodCoreTest.Cache @@ -43,6 +44,7 @@ specs = do mediaTest linksTest noOverloadedTest + subSubTest internalRequestTest errorHandlingTest cacheTest diff --git a/yesod-core/test/YesodCoreTest/SubSub.hs b/yesod-core/test/YesodCoreTest/SubSub.hs new file mode 100644 index 00000000..e38ea412 --- /dev/null +++ b/yesod-core/test/YesodCoreTest/SubSub.hs @@ -0,0 +1,48 @@ +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MultiParamTypeClasses #-} +module YesodCoreTest.SubSub where + +import Test.Hspec + +import Yesod.Core +import Network.Wai.Test +import qualified Data.Text as T +import qualified Data.ByteString.Lazy.Char8 as L8 + +import YesodCoreTest.SubSubData + +data App = App { getOuter :: OuterSubSite } + +instance Yesod App + +getSubR :: SubHandlerFor InnerSubSite master T.Text +getSubR = return $ T.pack "sub" + +instance YesodSubDispatch OuterSubSite master where + yesodSubDispatch = $(mkYesodSubDispatch resourcesOuterSubSite) + +instance YesodSubDispatch InnerSubSite master where + yesodSubDispatch = $(mkYesodSubDispatch resourcesInnerSubSite) + +mkYesod "App" [parseRoutes| +/ OuterSubSiteR OuterSubSite getOuter +|] + +app :: App +app = App { getOuter = OuterSubSite { getInner = InnerSubSite }} + +runner :: Session () -> IO () +runner f = toWaiApp app >>= runSession f + +case_subSubsite :: IO () +case_subSubsite = runner $ do + res <- request defaultRequest + assertBody (L8.pack "sub") res + assertStatus 200 res + +subSubTest :: Spec +subSubTest = describe "YesodCoreTest.SubSub" $ do + it "sub_subsite" case_subSubsite \ No newline at end of file diff --git a/yesod-core/test/YesodCoreTest/SubSubData.hs b/yesod-core/test/YesodCoreTest/SubSubData.hs new file mode 100644 index 00000000..636da3a5 --- /dev/null +++ b/yesod-core/test/YesodCoreTest/SubSubData.hs @@ -0,0 +1,20 @@ +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TypeFamilies #-} + +module YesodCoreTest.SubSubData where + +import Yesod.Core + + +data OuterSubSite = OuterSubSite { getInner :: InnerSubSite } + +data InnerSubSite = InnerSubSite + +mkYesodSubData "InnerSubSite" [parseRoutes| +/ SubR GET +|] + +mkYesodSubData "OuterSubSite" [parseRoutes| +/ InnerSubSiteR InnerSubSite getInner +|] \ No newline at end of file diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index 4aa6b021..e139241c 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -173,6 +173,8 @@ test-suite tests YesodCoreTest.StubSslOnly YesodCoreTest.StubStrictSameSite YesodCoreTest.StubUnsecured + YesodCoreTest.SubSub + YesodCoreTest.SubSubData YesodCoreTest.WaiSubsite YesodCoreTest.Widget YesodCoreTest.YesodTest