on wai-extra/3.0.16.0 help sign in
typeable/wai/wai-app-static/test/WaiAppEmbeddedTest.hs
85 lines 3.3 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
11import WaiAppStatic.Types
13defRequest :: Request
14defRequest = defaultRequest
16embSpec :: Spec
17embSpec = do
18 let embedSettings settings = flip runSession (staticApp settings)
19 let embed = embedSettings $(mkSettings mkEntries)
20 describe "embedded, compressed entry" $ do
21 it "served correctly" $ embed $ do
22 req <- request (setRawPathInfo defRequest "e1.txt")
23 assertStatus 200 req
24 assertHeader "Content-Type" "text/plain" req
25 assertHeader "Content-Encoding" "gzip" req
26 assertHeader "ETag" "Etag 1" req
27 assertNoHeader "Last-Modified req" req
28 assertBody (compress $ body 1000 'A') req
30 it "304 when valid if-none-match sent" $ embed $ do
31 req <- request (setRawPathInfo defRequest "e1.txt")
32 { requestHeaders = [("If-None-Match", "Etag 1")] }
33 assertStatus 304 req
35 it "ssIndices works" $ do
36 let testSettings = $(mkSettings mkEntries){
37 ssIndices = [unsafeToPiece "index.html"]
38 }
39 embedSettings testSettings $ do
40 req <- request defRequest
41 assertStatus 200 req
42 assertBody "index file" req
44 describe "embedded, uncompressed entry" $ do
45 it "too short" $ embed $ do
46 req <- request (setRawPathInfo defRequest "e2.txt")
47 assertStatus 200 req
48 assertHeader "Content-Type" "text/plain" req
49 assertNoHeader "Content-Encoding" req
50 assertHeader "ETag" "Etag 2" req
51 assertBody "ABC" req
53 it "wrong mime" $ embed $ do
54 req <- request (setRawPathInfo defRequest "somedir/e3.txt")
55 assertStatus 200 req
56 assertHeader "Content-Type" "xxx" req
57 assertNoHeader "Content-Encoding" req
58 assertHeader "ETag" "Etag 3" req
59 assertBody (body 1000 'A') req
61 describe "reloadable entry" $
62 it "served correctly" $ embed $ do
63 req <- request (setRawPathInfo defRequest "e4.css")
64 assertStatus 200 req
65 assertHeader "Content-Type" "text/css" req
66 assertNoHeader "Content-Encoding" req
67 assertHeader "ETag" "Etag 4" req
68 assertBody (body 2000 'Q') req
70 describe "entries without etags" $ do
71 it "embedded entry" $ embed $ do
72 req <- request (setRawPathInfo defRequest "e5.txt")
73 assertStatus 200 req
74 assertHeader "Content-Type" "text/plain" req
75 assertHeader "Content-Encoding" "gzip" req
76 assertNoHeader "ETag" req
77 assertBody (compress $ body 1000 'Z') req
79 it "reload entry" $ embed $ do
80 req <- request (setRawPathInfo defRequest "e6.txt")
81 assertStatus 200 req
82 assertHeader "Content-Type" "text/plain" req
83 assertNoHeader "Content-Encoding" req
84 assertNoHeader "ETag" req
85 assertBody (body 1000 'W') req