git.iko.soy/typeable/servant
on master help sign in
refactored basic auth test cases
6df3429Sönke Hahn
servant-server/servant-server.cabal+1
@@ -111,6 +111,7 @@ test-suite spec
111 base == 4.*
111 base == 4.*
112 , base-compat
112 , base-compat
113 , aeson
113 , aeson
114+ , base64-bytestring
114 , bytestring
115 , bytestring
115 , bytestring-conversion
116 , bytestring-conversion
116 , directory
117 , directory
servant-server/test/Servant/ServerSpec.hs+6−4
@@ -19,8 +19,10 @@ import Control.Applicative ((<$>))
19import Control.Monad (forM_, when, unless)
19import Control.Monad (forM_, when, unless)
20import Control.Monad.Trans.Except (ExceptT, throwE)
20import Control.Monad.Trans.Except (ExceptT, throwE)
21import Data.Aeson (FromJSON, ToJSON, decode', encode)
21import Data.Aeson (FromJSON, ToJSON, decode', encode)
22+import qualified Data.ByteString.Base64 as Base64
22import Data.ByteString.Conversion ()
23import Data.ByteString.Conversion ()
23import Data.Char (toUpper)
24import Data.Char (toUpper)
25+import Data.Monoid
24import Data.Proxy (Proxy (Proxy))
26import Data.Proxy (Proxy (Proxy))
25import Data.String (fromString)
27import Data.String (fromString)
26import Data.String.Conversions (cs)
28import Data.String.Conversions (cs)
@@ -569,17 +571,17 @@ basicAuthSpec = do
569 with (return (serveWithContext basicAuthApi basicAuthContext basicAuthServer)) $ do
571 with (return (serveWithContext basicAuthApi basicAuthContext basicAuthServer)) $ do
570
572
571 context "Basic Authentication" $ do
573 context "Basic Authentication" $ do
574+ let basicAuthHeaders user password =
575+ [("Authorization", "Basic " <> Base64.encode (user <> ":" <> password))]
572 it "returns 401 when no credentials given" $ do
576 it "returns 401 when no credentials given" $ do
573 get "/basic" `shouldRespondWith` 401
577 get "/basic" `shouldRespondWith` 401
574
578
575 it "returns 403 when invalid credentials given" $ do
579 it "returns 403 when invalid credentials given" $ do
576− let invalid = [("Authorization", "Basic bbbbbbbbbDpzZXJ2ZXI=")] -- fixme: how do I create basic auth tokens?
577− THW.request methodGet "/basic" invalid ""
580+ THW.request methodGet "/basic" (basicAuthHeaders "servant" "wrong") ""
578 `shouldRespondWith` 403
581 `shouldRespondWith` 403
579
582
580 it "returns 200 with the right password" $ do
583 it "returns 200 with the right password" $ do
581− let validCredentials = [("Authorization", "Basic c2VydmFudDpzZXJ2ZXI=")]
582− THW.request methodGet "/basic" validCredentials ""
584+ THW.request methodGet "/basic" (basicAuthHeaders "servant" "server") ""
583 `shouldRespondWith` 200
585 `shouldRespondWith` 200
584
586
585 it "plays nice with subsequent Raw endpoints" $ do
587 it "plays nice with subsequent Raw endpoints" $ do