elm-pages-v3-beta/tests/StaticHttpUnitTests.elm
2022-02-07 14:27:05 -08:00

141 lines
5.1 KiB
Elm

module StaticHttpUnitTests exposing (all)
import DataSource
import DataSource.Http
import Dict
import Expect
import Json.Decode as Decode
import Pages.StaticHttp.Request as Request
import Pages.StaticHttpRequest as StaticHttpRequest
import Test exposing (Test, describe, test)
getWithoutSecrets : String -> Decode.Decoder a -> DataSource.DataSource a
getWithoutSecrets url =
DataSource.Http.get url
requestsDict : List ( Request.Request, b ) -> Dict.Dict String (Maybe b)
requestsDict requestMap =
requestMap
|> List.map
(\( request, response ) ->
( request |> Request.hash
, Just response
)
)
|> Dict.fromList
get : String -> Request.Request
get url =
{ method = "GET"
, url = url
, headers = []
, body = DataSource.Http.emptyBody
}
all : Test
all =
describe "Static Http Requests unit tests"
[ test "andThen" <|
\() ->
DataSource.Http.get "first" (Decode.succeed "NEXT")
|> DataSource.andThen
(\_ ->
getWithoutSecrets "NEXT" (Decode.succeed ())
)
|> (\request ->
StaticHttpRequest.resolveUrls
request
(requestsDict
[ ( get "first", "null" )
, ( get "NEXT", "null" )
]
)
|> Expect.equal [ getReq "first", getReq "NEXT" ]
)
, test "andThen staring with done" <|
\() ->
DataSource.succeed ()
|> DataSource.andThen
(\_ ->
getWithoutSecrets "NEXT" (Decode.succeed ())
)
|> (\request ->
StaticHttpRequest.resolveUrls
request
(requestsDict
[ ( get "NEXT", "null" )
]
)
|> Expect.equal [ getReq "NEXT" ]
)
, test "map" <|
\() ->
getWithoutSecrets "first" (Decode.succeed "NEXT")
|> DataSource.andThen
(\_ ->
-- StaticHttp.get continueUrl (Decode.succeed ())
getWithoutSecrets "NEXT" (Decode.succeed ())
)
|> DataSource.map (\_ -> ())
|> (\request ->
StaticHttpRequest.resolveUrls
request
(requestsDict
[ ( get "first", "null" )
, ( get "NEXT", "null" )
]
)
|> Expect.equal [ getReq "first", getReq "NEXT" ]
)
, test "andThen chain with 1 response available and 1 pending" <|
\() ->
getWithoutSecrets "first" (Decode.succeed "NEXT")
|> DataSource.andThen
(\_ ->
getWithoutSecrets "NEXT" (Decode.succeed ())
)
|> (\request ->
StaticHttpRequest.resolveUrls
request
(requestsDict
[ ( get "first", "null" )
]
)
|> Expect.equal [ getReq "first", getReq "NEXT" ]
)
, test "andThen chain with 1 response available and 2 pending" <|
\() ->
getWithoutSecrets "first" Decode.int
|> DataSource.andThen
(\_ ->
getWithoutSecrets "NEXT" Decode.string
|> DataSource.andThen
(\_ ->
getWithoutSecrets "LAST"
Decode.string
)
)
|> (\request ->
StaticHttpRequest.resolveUrls
request
(requestsDict
[ ( get "first", "1" )
]
)
|> Expect.equal [ getReq "first", getReq "NEXT" ]
)
]
getReq : String -> DataSource.Http.RequestDetails
getReq url =
{ url = url
, method = "GET"
, headers = []
, body = DataSource.Http.emptyBody
}