Integrated tests into test suite

This commit is contained in:
Michael Snoyman 2009-12-31 15:27:36 +02:00
parent 4087573088
commit 24c9e5c54a
11 changed files with 68 additions and 27 deletions

View File

@ -1,8 +1,14 @@
{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE QuasiQuotes #-}
module Test.Errors (testSuite) where
import Yesod import Yesod
import Yesod.Helpers.Auth
import Hack import Hack
import Data.Default import Data.Default
import Data.List import Data.List
import Test.Framework (testGroup, Test)
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)
data Errors = Errors data Errors = Errors
instance Yesod Errors where instance Yesod Errors where
@ -14,13 +20,16 @@ instance Yesod Errors where
/has-args: /has-args:
Get: hasArgs Get: hasArgs
|] |]
instance YesodApproot Errors where
approot _ = Approot "IGNORED/"
instance YesodAuth Errors
denied :: Handler Errors () denied :: Handler Errors ()
denied = permissionDenied denied = permissionDenied
needsIdent :: Handler Errors HtmlObject needsIdent :: Handler Errors HtmlObject
needsIdent = do needsIdent = do
i <- identifier i <- authIdentifier
return $ toHtmlObject i return $ toHtmlObject i
hasArgs :: Handler Errors HtmlObject hasArgs :: Handler Errors HtmlObject
@ -30,14 +39,18 @@ hasArgs = do
b <- getParam "secondParam" b <- getParam "secondParam"
return $ toHtmlObject [a :: String, b] return $ toHtmlObject [a :: String, b]
main = do caseErrorMessages :: Assertion
caseErrorMessages = do
let app = toHackApp Errors let app = toHackApp Errors
res <- app $ def { pathInfo = "/denied/" } res <- app $ def { pathInfo = "/denied/" }
print res assertBool "/denied/" $ "Permission denied" `isInfixOf` show res
print $ "Permission denied" `isInfixOf` show res
res' <- app $ def { pathInfo = "/needs-ident/" } res' <- app $ def { pathInfo = "/needs-ident/" }
print res' print res'
print $ "Permission denied" `isInfixOf` show res' assertBool "/needs-ident/" $ "IGNORED/auth/openid/" `isInfixOf` show res'
res3 <- app $ def { pathInfo = "/has-args/" } res3 <- app $ def { pathInfo = "/has-args/" }
print res3 assertBool "/has-args/" $ "secondParam" `isInfixOf` show res3
print $ "secondParam" `isInfixOf` show res3
testSuite :: Test
testSuite = testGroup "Test.Errors"
[ testCase "errorMessages" caseErrorMessages
]

View File

@ -1,8 +1,14 @@
{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE QuasiQuotes #-}
module Test.QuasiResource (testSuite) where
import Yesod import Yesod
import Text.StringTemplate (nullGroup) import Text.StringTemplate (nullGroup)
import Test.Framework (testGroup, Test)
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)
import Data.List
data MyYesod = MyYesod data MyYesod = MyYesod
@ -49,21 +55,29 @@ handler = [$resources|
Get: userPage Get: userPage
|] |]
ph :: Handler MyYesod RepChooser -> IO () ph :: [String] -> Handler MyYesod RepChooser -> Assertion
ph h = do ph ss h = do
let eh = return . chooseRep . toHtmlObject . show let eh = return . chooseRep . toHtmlObject . show
rr = error "No raw request" rr = error "No raw request"
y = MyYesod y = MyYesod
cts = [TypeHtml] cts = [TypeHtml]
res <- runHandler h eh rr y nullGroup cts res <- runHandler h eh rr y nullGroup cts
print res mapM_ (helper $ show res) ss
where
helper haystack needle =
assertBool needle $ needle `isInfixOf` haystack
main :: IO () caseQuasi :: Assertion
main = do caseQuasi = do
ph $ handler ["static", "foo", "bar", "baz"] Get ph ["200", "foo"] $ handler ["static", "foo", "bar", "baz"] Get
ph $ handler ["foo", "bar", "baz"] Get ph ["404"] $ handler ["foo", "bar", "baz"] Get
ph $ handler ["page"] Get ph ["200", "pageIndex"] $ handler ["page"] Get
ph $ handler ["user"] Get ph ["404"] $ handler ["user"] Get
ph $ handler ["user", "five"] Get ph ["404"] $ handler ["user", "five"] Get
ph $ handler ["user", "5"] Get ph ["200", "userInfo", "5"] $ handler ["user", "5"] Get
ph $ handler ["user", "5", "profile", "email"] Get ph ["200", "userVar"] $ handler ["user", "5", "profile", "email"] Get
testSuite :: Test
testSuite = testGroup "Test.QuasiResource"
[ testCase "quasi" caseQuasi
]

View File

@ -1,3 +1,4 @@
{-# LANGUAGE CPP #-}
--------------------------------------------------------- ---------------------------------------------------------
-- --
-- Module : Yesod -- Module : Yesod
@ -26,14 +27,22 @@ module Yesod
, Application , Application
) where ) where
import Yesod.Request #if TEST
import Yesod.Resource hiding (testSuite)
import Yesod.Response hiding (testSuite)
import Data.Object.Html hiding (testSuite)
import Yesod.Rep hiding (testSuite)
#else
import Yesod.Resource
import Yesod.Response import Yesod.Response
import Data.Object.Html
import Yesod.Rep
#endif
import Yesod.Request
import Yesod.Yesod import Yesod.Yesod
import Yesod.Definitions import Yesod.Definitions
import Yesod.Handler import Yesod.Handler
import Yesod.Resource
import Hack (Application) import Hack (Application)
import Yesod.Rep
import Yesod.Template import Yesod.Template
import Data.Object.Html
import Data.Convertible.Text import Data.Convertible.Text

View File

@ -176,7 +176,6 @@ authIdentifier = do
Nothing -> do Nothing -> do
rp <- requestPath rp <- requestPath
let dest = ar ++ rp let dest = ar ++ rp
liftIO $ print ("authIdentifier", dest, ar, rp)
lp <- defaultLoginPath `fmap` getYesod lp <- defaultLoginPath `fmap` getYesod
addCookie 120 "DEST" dest addCookie 120 "DEST" dest
redirect $ ar ++ lp redirect $ ar ++ lp

View File

@ -250,7 +250,7 @@ caseChooseRepTemplate = do
caseChooseRepTemplateFile :: Assertion caseChooseRepTemplateFile :: Assertion
caseChooseRepTemplateFile = do caseChooseRepTemplateFile = do
let temp = "test/rep.st" let temp = "Test/rep.st"
ho = toHtmlObject [ ("foo", toHtmlObject "<fooval>") ho = toHtmlObject [ ("foo", toHtmlObject "<fooval>")
, ("bar", toHtmlObject ["bar1", "bar2"]) , ("bar", toHtmlObject ["bar1", "bar2"])
] ]

View File

@ -479,7 +479,7 @@ instance Arbitrary RPP where
caseFromYaml :: Assertion caseFromYaml :: Assertion
caseFromYaml = do caseFromYaml = do
contents <- readYamlDoc "test/resource-patterns.yaml" contents <- readYamlDoc "Test/resource-patterns.yaml"
rp1 <- readRP "static/*filepath" rp1 <- readRP "static/*filepath"
rp2 <- readRP "page" rp2 <- readRP "page"
rp3 <- readRP "page/$page" rp3 <- readRP "page/$page"
@ -498,7 +498,7 @@ caseFromYaml = do
caseCheckRPNodes :: Assertion caseCheckRPNodes :: Assertion
caseCheckRPNodes = do caseCheckRPNodes = do
good' <- readYamlDoc "test/resource-patterns.yaml" good' <- readYamlDoc "Test/resource-patterns.yaml"
good <- fa $ ca good' good <- fa $ ca good'
Just good @=? checkRPNodes good Just good @=? checkRPNodes good
rp1 <- readRP "foo/bar" rp1 <- readRP "foo/bar"

View File

@ -87,6 +87,7 @@ I've decided to have a redirect instead of serving the some data in two
locations. It fits in more properly with the RESTful principal of one name for locations. It fits in more properly with the RESTful principal of one name for
one piece of data. one piece of data.
> factRedirect :: Handler y ()
> factRedirect = do > factRedirect = do
> i <- getParam "num" > i <- getParam "num"
> redirect $ "../" ++ i ++ "/" > redirect $ "../" ++ i ++ "/"

View File

@ -20,6 +20,7 @@ helloWorld = return $ TemplateFile "examples/template.html" $ cs
, ("content", "Hey look!! I'm <auto escaped>!") , ("content", "Hey look!! I'm <auto escaped>!")
] ]
helloGroup :: Handler y Template
helloGroup = template "real-template" "foo" (cs "bar") $ return [] helloGroup = template "real-template" "foo" (cs "bar") $ return []
main :: IO () main :: IO ()

View File

@ -5,6 +5,8 @@ import qualified Yesod.Utils
import qualified Yesod.Resource import qualified Yesod.Resource
import qualified Yesod.Rep import qualified Yesod.Rep
import qualified Data.Object.Html import qualified Data.Object.Html
import qualified Test.Errors
import qualified Test.QuasiResource
main :: IO () main :: IO ()
main = defaultMain main = defaultMain
@ -13,4 +15,6 @@ main = defaultMain
, Yesod.Resource.testSuite , Yesod.Resource.testSuite
, Yesod.Rep.testSuite , Yesod.Rep.testSuite
, Data.Object.Html.testSuite , Data.Object.Html.testSuite
, Test.Errors.testSuite
, Test.QuasiResource.testSuite
] ]