Testable.Http is a replacement for the standard Http module. You can use it
to create components that can be tested with Testable.TestContext.
A convenient way to create a 200 OK repsonse
A convenient way to create a response representing a 500 error
Create a properly encoded URL with a query string. The first argument is the portion of the URL before the query string, which is assumed to be properly encoded already. The second argument is a list of all the key/value pairs needed for the query string. Both the keys and values will be appropriately encoded, so they can contain spaces, ampersands, etc.
url "http://example.com/users" [ ("name", "john doe"), ("age", "30") ] -- http://example.com/users?name=john+doe&age=30
Send a GET request to the given URL. You will get the entire response as a string.
hats : Task Error String
hats =
getString "http://example.com/hat-categories.markdown"Send a GET request to the given URL. You also specify how to decode the response.
import Json.Decode (list, string)
hats : Task Error (List String)
hats =
get (list string) "http://example.com/hat-categories.json"Send a POST request to the given URL, carrying the given body. You also specify how to decode the response with a JSON decoder.
import Json.Decode (list, string)
hats : Task Error (List String)
hats =
post (list string) "http://example.com/hat-categories.json" emptyThe kinds of errors you typically want in practice. When you get a
response but its status is not in the 200 range, it will trigger a
BadResponse. When you try to decode JSON but something goes wrong,
you will get an UnexpectedPayload.
An empty request body, no value will be sent along.
Provide a string as the body of the request. Useful if you need to send JSON data to a server that does not belong in the URL.
import Json.Decode as JS
coolestHats : Task Error (List String)
coolestHats =
post
(JS.list JS.string)
"http://example.com/hats"
(string """{ "sortBy": "coolness", "take": 10 }""")Fully specify the request you want to send. For example, if you want to send a request between domains (CORS request) you will need to specify some headers manually.
corsPost : Request
corsPost =
{ verb = "POST"
, headers =
[ ("Origin", "http://elm-lang.org")
, ("Access-Control-Request-Method", "POST")
, ("Access-Control-Request-Headers", "X-Custom-Header")
]
, url = "http://example.com/hats"
, body = empty
}All the details of the response. There are many weird facts about responses which include:
* The status may be 0 in the case that you load something from file://
* You cannot handle redirects yourself, they will all be followed
automatically. If you want to know if you have gone through one or more
redirect, the url field will let you know who sent you the response, so
you will know if it does not match the URL you requested.
* You are allowed to have duplicate headers, and their values will be
combined into a single comma-separated string.
We have left these underlying facts about XMLHttpRequest as is because one
goal of this library is to give a low-level enough API that others can build
whatever helpful behavior they want on top of it.
The things that count as errors at the lowest level. Technically, getting a response back with status 404 is a “successful” response in that you actually got all the information you asked for.
The fromJson function and Error type provide higher-level errors, but the
point of RawError is to allow you to define higher-level errors however you
want.
A convenient way to make a
Requestcorresponding to the request made byget