@@ -135,6 +135,33 @@ spec = do
135135 parseUrlHttp "https://my-site.com:bob/far" `shouldSatisfy` isNothing
136136 parseUrlHttp "https://my-site.com:7001uh/api" `shouldSatisfy` isNothing
137137 parseUrlHttp "https://my-site.com:/bar" `shouldSatisfy` isNothing
138+ describe "parseUrl" $ do
139+ it "does not recognize non-http and non-https schemes" $
140+ parseUrl "ftp://httpbin.org" `shouldSatisfy` isNothing
141+ it "parses correct http URLs" $
142+ property $ \host mport' pieces queryParams -> do
143+ let (url', path, queryString) =
144+ assembleUrl Http host mport' pieces queryParams
145+ Left (url'', options) = fromJust (parseUrl url')
146+ request <- req_ GET url'' NoReqBody options
147+ L.host request `shouldBe` urlEncode (unHost host)
148+ L.port request `shouldBe` maybe 80 getNonNegative mport'
149+ L.path request `shouldBe` path
150+ L.queryString request `shouldBe` queryString
151+ it "parses correct https URLs" $
152+ property $ \host mport' pieces queryParams -> do
153+ let (url', path, queryString) =
154+ assembleUrl Https host mport' pieces queryParams
155+ Right (url'', options) = fromJust (parseUrl url')
156+ request <- req_ GET url'' NoReqBody options
157+ L.host request `shouldBe` urlEncode (unHost host)
158+ L.port request `shouldBe` maybe 443 getNonNegative mport'
159+ L.path request `shouldBe` path
160+ L.queryString request `shouldBe` queryString
161+ it "rejects gibberish in port component" $ do
162+ parseUrl "http://my-site.com:bob/far" `shouldSatisfy` isNothing
163+ parseUrl "https://my-site.com:7001uh/api" `shouldSatisfy` isNothing
164+ parseUrl "http://my-site.com:/bar" `shouldSatisfy` isNothing
138165
139166 describe "bodies" $ do
140167 describe "NoReqBody" $