on warp-tls/3.0.4.1 help sign in
typeable/wai/wai-app-static/test/WaiAppEmbeddedTest.hs
78 lines 3.0 kB history raw
1{-# LANGUAGE TemplateHaskell, OverloadedStrings #-}
2module WaiAppEmbeddedTest (embSpec) where
4import Codec.Compression.GZip (compress)
5import EmbeddedTestEntries
6import Network.Wai
7import Network.Wai.Application.Static (staticApp)
8import Network.Wai.Test
9import Test.Hspec
10import WaiAppStatic.Storage.Embedded
12embApp :: Application
13embApp = staticApp $(mkSettings mkEntries)
15defRequest :: Request
16defRequest = defaultRequest
18embSpec :: Spec
19embSpec = do
20 let embed = flip runSession embApp
21 describe "embedded, compressed entry" $ do
22 it "served correctly" $ embed $ do
23 req <- request (setRawPathInfo defRequest "e1.txt")
24 assertStatus 200 req
25 assertHeader "Content-Type" "text/plain" req
26 assertHeader "Content-Encoding" "gzip" req
27 assertHeader "ETag" "Etag 1" req
28 assertNoHeader "Last-Modified req" req
29 assertBody (compress $ body 1000 'A') req
31 it "304 when valid if-none-match sent" $ embed $ do
32 req <- request (setRawPathInfo defRequest "e1.txt")
33 { requestHeaders = [("If-None-Match", "Etag 1")] }
34 assertStatus 304 req
36 describe "embedded, uncompressed entry" $ do
37 it "too short" $ embed $ do
38 req <- request (setRawPathInfo defRequest "e2.txt")
39 assertStatus 200 req
40 assertHeader "Content-Type" "text/plain" req
41 assertNoHeader "Content-Encoding" req
42 assertHeader "ETag" "Etag 2" req
43 assertBody "ABC" req
45 it "wrong mime" $ embed $ do
46 req <- request (setRawPathInfo defRequest "somedir/e3.txt")
47 assertStatus 200 req
48 assertHeader "Content-Type" "xxx" req
49 assertNoHeader "Content-Encoding" req
50 assertHeader "ETag" "Etag 3" req
51 assertBody (body 1000 'A') req
53 describe "reloadable entry" $
54 it "served correctly" $ embed $ do
55 req <- request (setRawPathInfo defRequest "e4.css")
56 assertStatus 200 req
57 assertHeader "Content-Type" "text/css" req
58 assertNoHeader "Content-Encoding" req
59 assertHeader "ETag" "Etag 4" req
60 assertBody (body 2000 'Q') req
62 describe "entries without etags" $ do
63 it "embedded entry" $ embed $ do
64 req <- request (setRawPathInfo defRequest "e5.txt")
65 assertStatus 200 req
66 assertHeader "Content-Type" "text/plain" req
67 assertHeader "Content-Encoding" "gzip" req
68 assertNoHeader "ETag" req
69 assertBody (compress $ body 1000 'Z') req
71 it "reload entry" $ embed $ do
72 req <- request (setRawPathInfo defRequest "e6.txt")
73 assertStatus 200 req
74 assertHeader "Content-Type" "text/plain" req
75 assertNoHeader "Content-Encoding" req
76 assertNoHeader "ETag" req
77 assertBody (body 1000 'W') req