on master help sign in
servant-client: add a test case for StreamBody
e49b036Domen Kožar
servant-client/test/Servant/StreamSpec.hs+13−4
@@ -35,8 +35,9 @@ import qualified Network.HTTP.Client as C
35import Prelude ()
35import Prelude ()
36import Prelude.Compat
36import Prelude.Compat
37import Servant.API
37import Servant.API
38− ((:<|>) ((:<|>)), (:>), JSON, NetstringFraming,
38+ ((:<|>) ((:<|>)), (:>), JSON, NetstringFraming, StreamBody,
39− NewlineFraming, NoFraming, OctetStream, SourceIO, StreamGet)
39+ NewlineFraming, NoFraming, OctetStream, SourceIO, StreamGet,
40+ )
40import Servant.Client.Streaming
41import Servant.Client.Streaming
41import Servant.ClientSpec
42import Servant.ClientSpec
42 (Person (..))
43 (Person (..))
@@ -72,13 +73,15 @@ type StreamApi =
72 "streamGetNewline" :> StreamGet NewlineFraming JSON (SourceIO Person)
73 "streamGetNewline" :> StreamGet NewlineFraming JSON (SourceIO Person)
73 :<|> "streamGetNetstring" :> StreamGet NetstringFraming JSON (SourceIO Person)
74 :<|> "streamGetNetstring" :> StreamGet NetstringFraming JSON (SourceIO Person)
74 :<|> "streamALot" :> StreamGet NoFraming OctetStream (SourceIO BS.ByteString)
75 :<|> "streamALot" :> StreamGet NoFraming OctetStream (SourceIO BS.ByteString)
76+ :<|> "streamBody" :> StreamBody NoFraming OctetStream (SourceIO BS.ByteString) :> StreamGet NoFraming OctetStream (SourceIO BS.ByteString)
75
77
76api :: Proxy StreamApi
78api :: Proxy StreamApi
77api = Proxy
79api = Proxy
78
80
79getGetNL, getGetNS :: ClientM (SourceIO Person)
81getGetNL, getGetNS :: ClientM (SourceIO Person)
80getGetALot :: ClientM (SourceIO BS.ByteString)
82getGetALot :: ClientM (SourceIO BS.ByteString)
83+getStreamBody :: SourceT IO BS.ByteString -> ClientM (SourceIO BS.ByteString)
81−getGetNL :<|> getGetNS :<|> getGetALot = client api
84+getGetNL :<|> getGetNS :<|> getGetALot :<|> getStreamBody = client api
82
85
83alice :: Person
86alice :: Person
84alice = Person "Alice" 42
87alice = Person "Alice" 42
@@ -90,9 +93,9 @@ server :: Application
90server = serve api
93server = serve api
91 $ return (source [alice, bob, alice])
94 $ return (source [alice, bob, alice])
92 :<|> return (source [alice, bob, alice])
95 :<|> return (source [alice, bob, alice])
93−
94 -- 2 ^ (18 + 10) = 256M
96 -- 2 ^ (18 + 10) = 256M
95 :<|> return (SourceT ($ lots (powerOfTwo 18)))
97 :<|> return (SourceT ($ lots (powerOfTwo 18)))
98+ :<|> return
96 where
99 where
97 lots n
100 lots n
98 | n < 0 = Stop
101 | n < 0 = Stop
@@ -126,6 +129,12 @@ streamSpec = beforeAll (CS.startWaiApp server) $ afterAll CS.endWaiApp $ do
126 withClient getGetNS baseUrl $ \(Right res) ->
129 withClient getGetNS baseUrl $ \(Right res) ->
127 testRunSourceIO res `shouldReturn` Right [alice, bob, alice]
130 testRunSourceIO res `shouldReturn` Right [alice, bob, alice]
128
131
132+ it "works with Servant.API.StreamBody" $ \(_, baseUrl) -> do
133+ withClient (getStreamBody (source inout)) baseUrl $ \(Right res) ->
134+ testRunSourceIO res `shouldReturn` Right inout
135+ where
136+ inout = ["foo", "bar"]
137+
129{-
138{-
130 it "streams in constant memory" $ \(_, baseUrl) -> do
139 it "streams in constant memory" $ \(_, baseUrl) -> do
131 Right rs <- runClient getGetALot baseUrl
140 Right rs <- runClient getGetALot baseUrl