{-# LANGUAGE OverloadedStrings #-} module Main (main) where import Test.Framework (defaultMain) import Test.Framework.Providers.HUnit (testCase) import Test.HUnit (Assertion) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL import Network.Wai (Application, responseLBS) import Network.Wai.Test import qualified Network.HTTP.Types as H import Network.Wai.Middleware.Cache main :: IO () main = defaultMain [ testCase "App without ETag" caseSimple, testCase "App with Generated ETag" caseETag, testCase "Generated ETag" caseEmbeddedEtag ] -- | Just test simple app caseSimple :: Assertion caseSimple = flip runSession appSimple $ do r <- defRequest assertResponseBase r assertNoHeader "etag" r caseETag :: Assertion caseETag = flip runSession (headerETag appSimple) $ do r <- defRequest assertResponseBase r assertHeader "etag" hashedData r caseEmbeddedEtag :: Assertion caseEmbeddedEtag = flip runSession appWithETag $ do r <- defRequest assertResponseBase r assertHeader "etag" "no-match" r defRequest :: Session SResponse defRequest = request defaultRequest ---------------------------------------------------------------------------- -- Assertions ---------------------------------------------------------------------------- assertResponseBase :: SResponse -> Session () assertResponseBase r = do assertStatus 200 r assertBody sourceData r ---------------------------------------------------------------------------- -- Applications ---------------------------------------------------------------------------- appSimple :: Application appSimple _ = return $ responseLBS H.ok200 [] sourceData appWithETag :: Application appWithETag _ = return $ responseLBS H.ok200 [("ETag", "no-match")] sourceData ---------------------------------------------------------------------------- -- Data ---------------------------------------------------------------------------- sourceData :: BL.ByteString sourceData = BL.fromChunks $ replicate 100000 "Hash response mock" hashedData :: B.ByteString hashedData = "385765267c8bd0154b5303b894dc34e7"