{-# LANGUAGE OverloadedStrings #-} module Combined where import Test.Tasty (TestTree, defaultMain, testGroup) import Test.Tasty.HUnit ((@?=), testCase) import Nero import Data.Text.Lazy (Text) name :: Request -> Maybe Text name = preview (_GET . path . prefixed "/hello/") surname :: Request -> Maybe Text surname = preview (param "surname") app1 :: Request -> Maybe Response app1 = preview (_GET . path . prefixed "/hello/") <&> fmap (\n -> ok $ "

Hello " <> n <> "

") app2 :: Request -> Maybe Response app2 = preview (param "surname") <&> fmap (\s -> ok $ "

Hello " <> s <> "

") app12 :: Request -> Maybe Response app12 request = respond <$> name request <*> surname request where respond n s = ok $ "

Hello " <> n <> " " <> s <> "

" tests :: TestTree tests = testGroup "Query parameters and routing" [ testCase "hello" $ app12 (dummyRequest & path .~ "/hello/out" & query . at "surname" ?~ pure "there") @?= Just (ok "

Hello out there

") ] main :: IO () main = defaultMain tests