@@ -30,20 +30,45 @@ spec = describe "Servant.Server.Internal.Router" $ do
3030
3131routerSpec :: Spec
3232routerSpec = do
33− let app' :: Application
34− app' = toApplication $ runRouter router'
35−
36− router', router :: Router ()
37− router' = tweakResponse (fmap twk) router
38− router = leafRouter $ \_ _ cont -> cont (Route $ responseBuilder (Status 201 "") [] "")
39−
40− twk :: Response -> Response
41− twk (ResponseBuilder (Status i s) hs b) = ResponseBuilder (Status (i + 1) s) hs b
42− twk b = b
43−
44− describe "tweakResponse" . with (return app') $ do
45− it "calls f on route result" $ do
46− get "" `shouldRespondWith` 202
33+ describe "tweakResponse" $ do
34+ let app' :: Application
35+ app' = toApplication $ runRouter router'
36+
37+ router', router :: Router ()
38+ router' = tweakResponse (fmap twk) router
39+ router = leafRouter $ \_ _ cont -> cont (Route $ responseBuilder (Status 201 "") [] "")
40+
41+ twk :: Response -> Response
42+ twk (ResponseBuilder (Status i s) hs b) = ResponseBuilder (Status (i + 1) s) hs b
43+ twk b = b
44+
45+ with (return app') $ do
46+ it "calls f on route result" $ do
47+ get "" `shouldRespondWith` 202
48+
49+ describe "runRouter" $ do
50+ let toApp :: Router () -> Application
51+ toApp = toApplication . runRouter
52+
53+ cap :: Router ()
54+ cap = CaptureRouter $
55+ let delayed = addCapture (emptyDelayed $ Route pure) (const $ delayedFail err400)
56+ in leafRouter
57+ $ \env req res ->
58+ runAction delayed env req res
59+ . const
60+ $ Route success
61+
62+ router :: Router ()
63+ router = leafRouter (\_ _ res -> res $ Route success)
64+ `Choice` cap
65+
66+ success :: Response
67+ success = responseBuilder (Status 200 "") [] ""
68+
69+ with (pure $ toApp router) $ do
70+ it "capture failure returns a 400 response" $ do
71+ get "/badcapture" `shouldRespondWith` 400
4772
4873distributivitySpec :: Spec
4974distributivitySpec =