mirror of
https://github.com/dillonkearns/elm-pages-v3-beta.git
synced 2024-11-24 06:54:03 +03:00
Update tests for single-item flow (not batched page build runs).
This commit is contained in:
parent
a2f08e03d6
commit
83128c5112
@ -29,7 +29,7 @@ import Pages.Http
|
||||
import Pages.Internal.ApplicationType as ApplicationType
|
||||
import Pages.Internal.Platform.Effect as Effect exposing (Effect)
|
||||
import Pages.Internal.Platform.StaticResponses as StaticResponses exposing (StaticResponses)
|
||||
import Pages.Internal.Platform.ToJsPayload as ToJsPayload exposing (ToJsSuccessPayload)
|
||||
import Pages.Internal.Platform.ToJsPayload as ToJsPayload
|
||||
import Pages.Internal.StaticHttpBody as StaticHttpBody
|
||||
import Pages.ProgramConfig exposing (ProgramConfig)
|
||||
import Pages.StaticHttp.Request
|
||||
@ -200,12 +200,6 @@ perform renderRequest config toJsPort effect =
|
||||
Effect.NoEffect ->
|
||||
Cmd.none
|
||||
|
||||
Effect.SendJsData value ->
|
||||
value
|
||||
|> Codec.encoder ToJsPayload.toJsCodec
|
||||
|> toJsPort
|
||||
|> Cmd.map never
|
||||
|
||||
Effect.Batch list ->
|
||||
list
|
||||
|> List.map (perform renderRequest config toJsPort)
|
||||
@ -615,7 +609,7 @@ nextStepToEffect contentCache config model ( updatedStaticResponsesModel, nextSt
|
||||
|
||||
StaticResponses.Finish toJsPayload ->
|
||||
case toJsPayload of
|
||||
ToJsPayload.ApiResponse ->
|
||||
StaticResponses.ApiResponse ->
|
||||
let
|
||||
apiResponse : Effect
|
||||
apiResponse =
|
||||
@ -653,7 +647,7 @@ nextStepToEffect contentCache config model ( updatedStaticResponsesModel, nextSt
|
||||
Err error ->
|
||||
[ error ]
|
||||
|> ToJsPayload.Errors
|
||||
|> Effect.SendJsData
|
||||
|> Effect.SendSinglePage True
|
||||
)
|
||||
|
||||
RenderRequest.Page payload ->
|
||||
@ -777,13 +771,13 @@ nextStepToEffect contentCache config model ( updatedStaticResponsesModel, nextSt
|
||||
|> Effect.SendSinglePage False
|
||||
|
||||
Err error ->
|
||||
[ error ] |> ToJsPayload.Errors |> Effect.SendJsData
|
||||
[ error ] |> ToJsPayload.Errors |> Effect.SendSinglePage True
|
||||
|
||||
Ok (Just notFoundReason) ->
|
||||
render404Page config model payload.path notFoundReason
|
||||
|
||||
Err error ->
|
||||
[] |> ToJsPayload.Errors |> Effect.SendJsData
|
||||
[ error ] |> ToJsPayload.Errors |> Effect.SendSinglePage True
|
||||
|
||||
RenderRequest.NotFound path ->
|
||||
render404Page config model path NotFoundReason.NoMatchingRoute
|
||||
@ -792,37 +786,33 @@ nextStepToEffect contentCache config model ( updatedStaticResponsesModel, nextSt
|
||||
, apiResponse
|
||||
)
|
||||
|
||||
_ ->
|
||||
model.unprocessedPages
|
||||
|> List.take 1
|
||||
|> List.filterMap
|
||||
(\pageAndMetadata ->
|
||||
case toJsPayload of
|
||||
ToJsPayload.Success value ->
|
||||
sendSinglePageProgress value config model pageAndMetadata
|
||||
|> Just
|
||||
StaticResponses.Page contentJson ->
|
||||
let
|
||||
pageAndMetadata =
|
||||
case model.unprocessedPages |> List.head of
|
||||
Just just1 ->
|
||||
just1
|
||||
|
||||
ToJsPayload.Errors errors ->
|
||||
errors |> ToJsPayload.Errors |> Effect.SendJsData |> Just
|
||||
Nothing ->
|
||||
Debug.todo "TODO"
|
||||
in
|
||||
( model
|
||||
, sendSinglePageProgress contentJson config model pageAndMetadata
|
||||
)
|
||||
|
||||
ToJsPayload.ApiResponse ->
|
||||
Nothing
|
||||
)
|
||||
|> (\cmds ->
|
||||
( model
|
||||
|> popProcessedRequest
|
||||
, Effect.Batch cmds
|
||||
)
|
||||
)
|
||||
StaticResponses.Errors errors ->
|
||||
( model
|
||||
, errors |> ToJsPayload.Errors |> Effect.SendSinglePage True
|
||||
)
|
||||
|
||||
|
||||
sendSinglePageProgress :
|
||||
ToJsSuccessPayload
|
||||
Dict String String
|
||||
-> ProgramConfig userMsg userModel route siteData pageData sharedData
|
||||
-> Model route
|
||||
-> ( Path, route )
|
||||
-> Effect
|
||||
sendSinglePageProgress toJsPayload config model =
|
||||
sendSinglePageProgress contentJson config model =
|
||||
\( page, route ) ->
|
||||
case model.maybeRequestJson of
|
||||
RenderRequest.SinglePage includeHtml _ _ ->
|
||||
@ -892,12 +882,6 @@ sendSinglePageProgress toJsPayload config model =
|
||||
, fragment = Nothing
|
||||
}
|
||||
|
||||
staticData : Dict String String
|
||||
staticData =
|
||||
toJsPayload.pages
|
||||
|> Dict.get (Path.toRelative page)
|
||||
|> Maybe.withDefault Dict.empty
|
||||
|
||||
currentPage : { path : Path, route : route }
|
||||
currentPage =
|
||||
{ path = page, route = config.urlToRoute currentUrl }
|
||||
@ -906,21 +890,21 @@ sendSinglePageProgress toJsPayload config model =
|
||||
pageDataResult =
|
||||
StaticHttpRequest.resolve ApplicationType.Browser
|
||||
(config.data (config.urlToRoute currentUrl))
|
||||
(staticData |> Dict.map (\_ v -> Just v))
|
||||
(contentJson |> Dict.map (\_ v -> Just v))
|
||||
|> Result.mapError (StaticHttpRequest.toBuildError currentUrl.path)
|
||||
|
||||
sharedDataResult : Result BuildError sharedData
|
||||
sharedDataResult =
|
||||
StaticHttpRequest.resolve ApplicationType.Browser
|
||||
config.sharedData
|
||||
(staticData |> Dict.map (\_ v -> Just v))
|
||||
(contentJson |> Dict.map (\_ v -> Just v))
|
||||
|> Result.mapError (StaticHttpRequest.toBuildError currentUrl.path)
|
||||
|
||||
siteDataResult : Result BuildError siteData
|
||||
siteDataResult =
|
||||
StaticHttpRequest.resolve ApplicationType.Cli
|
||||
(config.site allRoutes |> .data)
|
||||
(staticData |> Dict.map (\_ v -> Just v))
|
||||
(contentJson |> Dict.map (\_ v -> Just v))
|
||||
|> Result.mapError (StaticHttpRequest.toBuildError "Site.elm")
|
||||
in
|
||||
case Result.map3 (\a b c -> ( a, b, c )) pageFoundResult renderedResult siteDataResult of
|
||||
@ -928,10 +912,7 @@ sendSinglePageProgress toJsPayload config model =
|
||||
case maybeNotFoundReason of
|
||||
Nothing ->
|
||||
{ route = page |> Path.toRelative
|
||||
, contentJson =
|
||||
toJsPayload.pages
|
||||
|> Dict.get (Path.toRelative page)
|
||||
|> Maybe.withDefault Dict.empty
|
||||
, contentJson = contentJson
|
||||
, html = rendered.view
|
||||
, errors = []
|
||||
, head = rendered.head ++ (config.site allRoutes |> .head) siteData
|
||||
@ -939,7 +920,8 @@ sendSinglePageProgress toJsPayload config model =
|
||||
, staticHttpCache = model.allRawResponses |> Dict.Extra.filterMap (\_ v -> v)
|
||||
, is404 = False
|
||||
}
|
||||
|> sendProgress
|
||||
|> ToJsPayload.PageProgress
|
||||
|> Effect.SendSinglePage True
|
||||
|
||||
Just notFoundReason ->
|
||||
render404Page config model page notFoundReason
|
||||
@ -947,17 +929,7 @@ sendSinglePageProgress toJsPayload config model =
|
||||
Err error ->
|
||||
[ error ]
|
||||
|> ToJsPayload.Errors
|
||||
|> Effect.SendJsData
|
||||
|
||||
|
||||
popProcessedRequest : Model route -> Model route
|
||||
popProcessedRequest model =
|
||||
{ model | unprocessedPages = List.drop 1 model.unprocessedPages }
|
||||
|
||||
|
||||
sendProgress : ToJsPayload.ToJsSuccessPayloadNew -> Effect
|
||||
sendProgress singlePage =
|
||||
singlePage |> ToJsPayload.PageProgress |> Effect.SendSinglePage False
|
||||
|> Effect.SendSinglePage True
|
||||
|
||||
|
||||
render404Page :
|
||||
|
@ -1,12 +1,11 @@
|
||||
module Pages.Internal.Platform.Effect exposing (Effect(..))
|
||||
|
||||
import DataSource.Http exposing (RequestDetails)
|
||||
import Pages.Internal.Platform.ToJsPayload exposing (ToJsPayload, ToJsSuccessPayloadNewCombined)
|
||||
import Pages.Internal.Platform.ToJsPayload exposing (ToJsSuccessPayloadNewCombined)
|
||||
|
||||
|
||||
type Effect
|
||||
= NoEffect
|
||||
| SendJsData ToJsPayload
|
||||
| FetchHttp { masked : RequestDetails, unmasked : RequestDetails }
|
||||
| ReadFile String
|
||||
| GetGlob String
|
||||
|
@ -1,4 +1,4 @@
|
||||
module Pages.Internal.Platform.StaticResponses exposing (NextStep(..), StaticResponses, batchUpdate, error, nextStep, renderApiRequest, renderSingleRoute, update)
|
||||
module Pages.Internal.Platform.StaticResponses exposing (FinishKind(..), NextStep(..), StaticResponses, batchUpdate, error, nextStep, renderApiRequest, renderSingleRoute)
|
||||
|
||||
import ApiRoute
|
||||
import BuildError exposing (BuildError)
|
||||
@ -11,7 +11,6 @@ import HtmlPrinter exposing (htmlToString)
|
||||
import Internal.ApiRoute exposing (Done(..))
|
||||
import NotFoundReason exposing (NotFoundReason)
|
||||
import Pages.Internal.ApplicationType as ApplicationType
|
||||
import Pages.Internal.Platform.ToJsPayload as ToJsPayload exposing (ToJsPayload)
|
||||
import Pages.SiteConfig exposing (SiteConfig)
|
||||
import Pages.StaticHttp.Request as HashRequest
|
||||
import Pages.StaticHttpRequest as StaticHttpRequest
|
||||
@ -108,36 +107,6 @@ renderApiRequest request =
|
||||
)
|
||||
|
||||
|
||||
update :
|
||||
{ request :
|
||||
{ masked : RequestDetails, unmasked : RequestDetails }
|
||||
, response : Result () String
|
||||
}
|
||||
->
|
||||
{ model
|
||||
| staticResponses : StaticResponses
|
||||
, allRawResponses : Dict String (Maybe String)
|
||||
}
|
||||
->
|
||||
{ model
|
||||
| staticResponses : StaticResponses
|
||||
, allRawResponses : Dict String (Maybe String)
|
||||
}
|
||||
update newEntry model =
|
||||
let
|
||||
updatedAllResponses : Dict String (Maybe String)
|
||||
updatedAllResponses =
|
||||
-- @@@@@@@@@ TODO handle errors here, change Dict to have `Result` instead of `Maybe`
|
||||
Dict.insert
|
||||
(HashRequest.hash newEntry.request.masked)
|
||||
(Just <| Result.withDefault "TODO" newEntry.response)
|
||||
model.allRawResponses
|
||||
in
|
||||
{ model
|
||||
| allRawResponses = updatedAllResponses
|
||||
}
|
||||
|
||||
|
||||
batchUpdate :
|
||||
List
|
||||
{ request :
|
||||
@ -168,7 +137,7 @@ batchUpdate newEntries model =
|
||||
updatedAllResponses =
|
||||
Dict.merge
|
||||
(\key a -> Dict.insert key (Just a))
|
||||
(\key a b -> Dict.insert key (Just a))
|
||||
(\key a _ -> Dict.insert key (Just a))
|
||||
(\key b -> Dict.insert key b)
|
||||
newResponses
|
||||
model.allRawResponses
|
||||
@ -204,7 +173,13 @@ cliDictKey =
|
||||
|
||||
type NextStep route
|
||||
= Continue (Dict String (Maybe String)) (List { masked : RequestDetails, unmasked : RequestDetails }) (Maybe (List route))
|
||||
| Finish ToJsPayload
|
||||
| Finish (FinishKind route)
|
||||
|
||||
|
||||
type FinishKind route
|
||||
= ApiResponse
|
||||
| Errors (List BuildError)
|
||||
| Page (Dict String String)
|
||||
|
||||
|
||||
nextStep :
|
||||
@ -249,19 +224,6 @@ nextStep config ({ secrets, allRawResponses, errors } as model) maybeRoutes =
|
||||
(buildTimeFilesRequest config)
|
||||
(allRawResponses |> Dict.Extra.filterMap (\_ value -> Just value))
|
||||
|
||||
generatedOkayFiles : List { path : List String, content : String }
|
||||
generatedOkayFiles =
|
||||
generatedFiles
|
||||
|> List.filterMap
|
||||
(\result ->
|
||||
case result of
|
||||
Ok ok ->
|
||||
Just ok
|
||||
|
||||
Err _ ->
|
||||
Nothing
|
||||
)
|
||||
|
||||
generatedFileErrors : List BuildError
|
||||
generatedFileErrors =
|
||||
generatedFiles
|
||||
@ -438,7 +400,7 @@ nextStep config ({ secrets, allRawResponses, errors } as model) maybeRoutes =
|
||||
( model.staticResponses, Continue newAllRawResponses newThing maybeRoutes )
|
||||
|
||||
Err error_ ->
|
||||
( model.staticResponses, Finish (ToJsPayload.Errors <| (error_ ++ failedRequests ++ errors)) )
|
||||
( model.staticResponses, Finish (Errors <| (error_ ++ failedRequests ++ errors)) )
|
||||
|
||||
else
|
||||
case model.staticResponses of
|
||||
@ -465,27 +427,25 @@ nextStep config ({ secrets, allRawResponses, errors } as model) maybeRoutes =
|
||||
( model.staticResponses
|
||||
, case encode allRawResponses staticResponses of
|
||||
Ok encodedResponses ->
|
||||
ToJsPayload.toJsPayload
|
||||
encodedResponses
|
||||
generatedOkayFiles
|
||||
allRawResponses
|
||||
-- TODO send all global head tags on initial call
|
||||
if List.length allErrors > 0 then
|
||||
allErrors
|
||||
-- TODO send all global head tags on initial call
|
||||
|> Finish
|
||||
|> Errors
|
||||
|> Finish
|
||||
|
||||
else
|
||||
Page (encodedResponses |> Dict.values |> List.head |> Maybe.withDefault Dict.empty)
|
||||
|> Finish
|
||||
|
||||
Err buildErrors ->
|
||||
ToJsPayload.toJsPayload
|
||||
Dict.empty
|
||||
generatedOkayFiles
|
||||
allRawResponses
|
||||
(allErrors ++ buildErrors)
|
||||
-- TODO send all global head tags on initial call
|
||||
(allErrors ++ buildErrors)
|
||||
|> Errors
|
||||
|> Finish
|
||||
)
|
||||
|
||||
ApiRequest _ ->
|
||||
( model.staticResponses
|
||||
, ToJsPayload.ApiResponse
|
||||
, ApiResponse
|
||||
|> Finish
|
||||
)
|
||||
|
||||
@ -503,14 +463,14 @@ nextStep config ({ secrets, allRawResponses, errors } as model) maybeRoutes =
|
||||
|
||||
Ok (Just _) ->
|
||||
( StaticResponses Dict.empty
|
||||
, Finish ToJsPayload.ApiResponse
|
||||
, Finish ApiResponse
|
||||
-- TODO should there be a new type for 404response? Or something else?
|
||||
)
|
||||
|
||||
Err error_ ->
|
||||
( model.staticResponses
|
||||
, Finish
|
||||
(ToJsPayload.Errors <|
|
||||
(Errors <|
|
||||
([ StaticHttpRequest.toBuildError
|
||||
-- TODO give more fine-grained error reference
|
||||
"get static routes"
|
||||
|
@ -1,12 +1,9 @@
|
||||
module Pages.Internal.Platform.ToJsPayload exposing
|
||||
( FileToGenerate
|
||||
, ToJsPayload(..)
|
||||
, ToJsSuccessPayload
|
||||
, ToJsSuccessPayloadNew
|
||||
, ToJsSuccessPayloadNewCombined(..)
|
||||
, successCodecNew
|
||||
, successCodecNew2
|
||||
, toJsCodec
|
||||
, toJsPayload
|
||||
)
|
||||
|
||||
import BuildError exposing (BuildError)
|
||||
@ -18,20 +15,6 @@ import Json.Encode
|
||||
import Pages.StaticHttp.Request
|
||||
|
||||
|
||||
type ToJsPayload
|
||||
= Errors (List BuildError)
|
||||
| Success ToJsSuccessPayload
|
||||
| ApiResponse
|
||||
|
||||
|
||||
type alias ToJsSuccessPayload =
|
||||
{ pages : Dict String (Dict String String)
|
||||
, filesToGenerate : List FileToGenerate
|
||||
, staticHttpCache : Dict String String
|
||||
, errors : List BuildError
|
||||
}
|
||||
|
||||
|
||||
type alias ToJsSuccessPayloadNew =
|
||||
{ route : String
|
||||
, html : String
|
||||
@ -50,54 +33,6 @@ type alias FileToGenerate =
|
||||
}
|
||||
|
||||
|
||||
toJsPayload :
|
||||
Dict String (Dict String String)
|
||||
-> List FileToGenerate
|
||||
-> Dict String (Maybe String)
|
||||
-> List BuildError
|
||||
-> ToJsPayload
|
||||
toJsPayload encodedStatic generated allRawResponses allErrors =
|
||||
if allErrors |> List.filter .fatal |> List.isEmpty then
|
||||
Success
|
||||
(ToJsSuccessPayload
|
||||
encodedStatic
|
||||
generated
|
||||
(allRawResponses
|
||||
|> Dict.toList
|
||||
|> List.filterMap
|
||||
(\( key, maybeValue ) ->
|
||||
maybeValue
|
||||
|> Maybe.map (\value -> ( key, value ))
|
||||
)
|
||||
|> Dict.fromList
|
||||
)
|
||||
allErrors
|
||||
)
|
||||
|
||||
else
|
||||
Errors <| allErrors
|
||||
|
||||
|
||||
toJsCodec : Codec ToJsPayload
|
||||
toJsCodec =
|
||||
Codec.custom
|
||||
(\errorsTag success vApiResponse value ->
|
||||
case value of
|
||||
Errors errorList ->
|
||||
errorsTag errorList
|
||||
|
||||
Success { pages, filesToGenerate, errors, staticHttpCache } ->
|
||||
success (ToJsSuccessPayload pages filesToGenerate staticHttpCache errors)
|
||||
|
||||
ApiResponse ->
|
||||
vApiResponse
|
||||
)
|
||||
|> Codec.variant1 "Errors" Errors errorCodec
|
||||
|> Codec.variant1 "Success" Success successCodec
|
||||
|> Codec.variant0 "ApiResponse" ApiResponse
|
||||
|> Codec.buildCustom
|
||||
|
||||
|
||||
errorCodec : Codec (List BuildError)
|
||||
errorCodec =
|
||||
Codec.object (\errorString _ -> errorString)
|
||||
@ -117,39 +52,6 @@ errorCodec =
|
||||
|> Codec.buildObject
|
||||
|
||||
|
||||
successCodec : Codec ToJsSuccessPayload
|
||||
successCodec =
|
||||
Codec.object ToJsSuccessPayload
|
||||
|> Codec.field "pages"
|
||||
.pages
|
||||
(Codec.dict (Codec.dict Codec.string))
|
||||
|> Codec.field "filesToGenerate"
|
||||
.filesToGenerate
|
||||
(Codec.build
|
||||
(\list ->
|
||||
list
|
||||
|> Json.Encode.list
|
||||
(\item ->
|
||||
Json.Encode.object
|
||||
[ ( "path", item.path |> String.join "/" |> Json.Encode.string )
|
||||
, ( "content", item.content |> Json.Encode.string )
|
||||
]
|
||||
)
|
||||
)
|
||||
(Decode.list
|
||||
(Decode.map2 (\path content -> { path = path, content = content })
|
||||
(Decode.string |> Decode.map (String.split "/") |> Decode.field "path")
|
||||
(Decode.string |> Decode.field "content")
|
||||
)
|
||||
)
|
||||
)
|
||||
|> Codec.field "staticHttpCache"
|
||||
.staticHttpCache
|
||||
(Codec.dict Codec.string)
|
||||
|> Codec.field "errors" .errors errorCodec
|
||||
|> Codec.buildObject
|
||||
|
||||
|
||||
successCodecNew : String -> String -> Codec ToJsSuccessPayloadNew
|
||||
successCodecNew canonicalSiteUrl currentPagePath =
|
||||
Codec.object ToJsSuccessPayloadNew
|
||||
@ -185,13 +87,21 @@ type ToJsSuccessPayloadNewCombined
|
||||
| Glob String
|
||||
| DoHttp { masked : Pages.StaticHttp.Request.Request, unmasked : Pages.StaticHttp.Request.Request }
|
||||
| Port String
|
||||
| Errors (List BuildError)
|
||||
| ApiResponse
|
||||
|
||||
|
||||
successCodecNew2 : String -> String -> Codec ToJsSuccessPayloadNewCombined
|
||||
successCodecNew2 canonicalSiteUrl currentPagePath =
|
||||
Codec.custom
|
||||
(\success vReadFile vGlob vDoHttp vSendApiResponse vPort value ->
|
||||
(\errorsTag vApiResponse success vReadFile vGlob vDoHttp vSendApiResponse vPort value ->
|
||||
case value of
|
||||
ApiResponse ->
|
||||
vApiResponse
|
||||
|
||||
Errors errorList ->
|
||||
errorsTag errorList
|
||||
|
||||
PageProgress payload ->
|
||||
success payload
|
||||
|
||||
@ -210,6 +120,8 @@ successCodecNew2 canonicalSiteUrl currentPagePath =
|
||||
Port string ->
|
||||
vPort string
|
||||
)
|
||||
|> Codec.variant1 "Errors" Errors errorCodec
|
||||
|> Codec.variant0 "ApiResponse" ApiResponse
|
||||
|> Codec.variant1 "PageProgress" PageProgress (successCodecNew canonicalSiteUrl currentPagePath)
|
||||
|> Codec.variant1 "ReadFile" ReadFile Codec.string
|
||||
|> Codec.variant1 "Glob" Glob Codec.string
|
||||
|
@ -16,7 +16,7 @@ import OptimizedDecoder as Decode exposing (Decoder)
|
||||
import Pages.ContentCache as ContentCache exposing (ContentCache)
|
||||
import Pages.Internal.Platform.Cli exposing (..)
|
||||
import Pages.Internal.Platform.Effect as Effect exposing (Effect)
|
||||
import Pages.Internal.Platform.ToJsPayload as ToJsPayload exposing (ToJsPayload)
|
||||
import Pages.Internal.Platform.ToJsPayload as ToJsPayload
|
||||
import Pages.Internal.StaticHttpBody as StaticHttpBody
|
||||
import Pages.Manifest as Manifest
|
||||
import Pages.ProgramConfig exposing (ProgramConfig)
|
||||
@ -50,11 +50,8 @@ all =
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86 }"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
, test "StaticHttp request for initial are resolved" <|
|
||||
@ -74,11 +71,8 @@ all =
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86 }"""
|
||||
|> expectSuccess
|
||||
[ ( "post-1"
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
, describe "single page renders"
|
||||
@ -149,11 +143,8 @@ all =
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86, "language": "Elm" }"""
|
||||
|> expectSuccess
|
||||
[ ( "post-1"
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86,"language":"Elm"}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86,"language":"Elm"}"""
|
||||
)
|
||||
]
|
||||
, test "andThen" <|
|
||||
@ -176,14 +167,11 @@ all =
|
||||
"NEXT-REQUEST"
|
||||
"""null"""
|
||||
|> expectSuccess
|
||||
[ ( "elm-pages"
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """null"""
|
||||
)
|
||||
, ( get "NEXT-REQUEST"
|
||||
, """null"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """null"""
|
||||
)
|
||||
, ( get "NEXT-REQUEST"
|
||||
, """null"""
|
||||
)
|
||||
]
|
||||
, test "andThen chain avoids repeat requests" <|
|
||||
@ -270,75 +258,73 @@ all =
|
||||
"url10"
|
||||
"""{"image": "image10.jpg"}"""
|
||||
|> expectSuccess
|
||||
[ ( "elm-pages"
|
||||
, [ ( get "https://pokeapi.co/api/v2/pokemon/"
|
||||
, """[{"url":"url1"},{"url":"url2"},{"url":"url3"},{"url":"url4"},{"url":"url5"},{"url":"url6"},{"url":"url7"},{"url":"url8"},{"url":"url9"},{"url":"url10"}]"""
|
||||
)
|
||||
, ( get "url1"
|
||||
, """{"image":"image1.jpg"}"""
|
||||
)
|
||||
, ( get "url2"
|
||||
, """{"image":"image2.jpg"}"""
|
||||
)
|
||||
, ( get "url3"
|
||||
, """{"image":"image3.jpg"}"""
|
||||
)
|
||||
, ( get "url4"
|
||||
, """{"image":"image4.jpg"}"""
|
||||
)
|
||||
, ( get "url5"
|
||||
, """{"image":"image5.jpg"}"""
|
||||
)
|
||||
, ( get "url6"
|
||||
, """{"image":"image6.jpg"}"""
|
||||
)
|
||||
, ( get "url7"
|
||||
, """{"image":"image7.jpg"}"""
|
||||
)
|
||||
, ( get "url8"
|
||||
, """{"image":"image8.jpg"}"""
|
||||
)
|
||||
, ( get "url9"
|
||||
, """{"image":"image9.jpg"}"""
|
||||
)
|
||||
, ( get "url10"
|
||||
, """{"image":"image10.jpg"}"""
|
||||
)
|
||||
]
|
||||
)
|
||||
]
|
||||
, test "port is sent out once all requests are finished" <|
|
||||
\() ->
|
||||
start
|
||||
[ ( [ "elm-pages" ]
|
||||
, DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") starDecoder
|
||||
)
|
||||
, ( [ "elm-pages-starter" ]
|
||||
, DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages-starter") starDecoder
|
||||
)
|
||||
]
|
||||
|> ProgramTest.simulateHttpOk
|
||||
"GET"
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86 }"""
|
||||
|> ProgramTest.simulateHttpOk
|
||||
"GET"
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
"""{ "stargazer_count": 22 }"""
|
||||
|> expectSuccess
|
||||
[ ( "elm-pages"
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
)
|
||||
, ( "elm-pages-starter"
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
, """{"stargazer_count":22}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://pokeapi.co/api/v2/pokemon/"
|
||||
, """[{"url":"url1"},{"url":"url2"},{"url":"url3"},{"url":"url4"},{"url":"url5"},{"url":"url6"},{"url":"url7"},{"url":"url8"},{"url":"url9"},{"url":"url10"}]"""
|
||||
)
|
||||
, ( get "url1"
|
||||
, """{"image":"image1.jpg"}"""
|
||||
)
|
||||
, ( get "url2"
|
||||
, """{"image":"image2.jpg"}"""
|
||||
)
|
||||
, ( get "url3"
|
||||
, """{"image":"image3.jpg"}"""
|
||||
)
|
||||
, ( get "url4"
|
||||
, """{"image":"image4.jpg"}"""
|
||||
)
|
||||
, ( get "url5"
|
||||
, """{"image":"image5.jpg"}"""
|
||||
)
|
||||
, ( get "url6"
|
||||
, """{"image":"image6.jpg"}"""
|
||||
)
|
||||
, ( get "url7"
|
||||
, """{"image":"image7.jpg"}"""
|
||||
)
|
||||
, ( get "url8"
|
||||
, """{"image":"image8.jpg"}"""
|
||||
)
|
||||
, ( get "url9"
|
||||
, """{"image":"image9.jpg"}"""
|
||||
)
|
||||
, ( get "url10"
|
||||
, """{"image":"image10.jpg"}"""
|
||||
)
|
||||
]
|
||||
|
||||
--, test "port is sent out once all requests are finished" <|
|
||||
-- \() ->
|
||||
-- start
|
||||
-- [ ( [ "elm-pages" ]
|
||||
-- , DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") starDecoder
|
||||
-- )
|
||||
-- , ( [ "elm-pages-starter" ]
|
||||
-- , DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages-starter") starDecoder
|
||||
-- )
|
||||
-- ]
|
||||
-- |> ProgramTest.simulateHttpOk
|
||||
-- "GET"
|
||||
-- "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
-- """{ "stargazer_count": 86 }"""
|
||||
-- |> ProgramTest.simulateHttpOk
|
||||
-- "GET"
|
||||
-- "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
-- """{ "stargazer_count": 22 }"""
|
||||
-- |> expectSuccess
|
||||
-- [ ( "elm-pages"
|
||||
-- , [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
-- , """{"stargazer_count":86}"""
|
||||
-- )
|
||||
-- ]
|
||||
-- )
|
||||
-- , ( "elm-pages-starter"
|
||||
-- , [ ( get "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
-- , """{"stargazer_count":22}"""
|
||||
-- )
|
||||
-- ]
|
||||
-- )
|
||||
-- ]
|
||||
, test "reduced JSON is sent out" <|
|
||||
\() ->
|
||||
start
|
||||
@ -351,11 +337,8 @@ all =
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86, "unused_field": 123 }"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
, test "you can use elm/json decoders with StaticHttp.unoptimizedRequest" <|
|
||||
@ -380,11 +363,8 @@ all =
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86, "unused_field": 123 }"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{ "stargazer_count": 86, "unused_field": 123 }"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{ "stargazer_count": 86, "unused_field": 123 }"""
|
||||
)
|
||||
]
|
||||
, test "plain string" <|
|
||||
@ -407,11 +387,8 @@ all =
|
||||
"https://example.com/file.txt"
|
||||
"This is a raw text file."
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://example.com/file.txt"
|
||||
, "This is a raw text file."
|
||||
)
|
||||
]
|
||||
[ ( get "https://example.com/file.txt"
|
||||
, "This is a raw text file."
|
||||
)
|
||||
]
|
||||
, test "Err in String to Result function turns into decode error" <|
|
||||
@ -443,7 +420,7 @@ all =
|
||||
"This is a raw text file."
|
||||
|> ProgramTest.expectOutgoingPortValues
|
||||
"toJsPort"
|
||||
(Codec.decoder ToJsPayload.toJsCodec)
|
||||
(Codec.decoder (ToJsPayload.successCodecNew2 "" ""))
|
||||
(expectErrorsPort
|
||||
"""-- STATIC HTTP DECODING ERROR ----------------------------------------------------- elm-pages
|
||||
|
||||
@ -471,15 +448,12 @@ String was not uppercased"""
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86, "unused_field": 123 }"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( { method = "POST"
|
||||
, url = "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, headers = []
|
||||
, body = DataSource.emptyBody
|
||||
}
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
[ ( { method = "POST"
|
||||
, url = "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, headers = []
|
||||
, body = DataSource.emptyBody
|
||||
}
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
, test "json is reduced from andThen chains" <|
|
||||
@ -502,14 +476,11 @@ String was not uppercased"""
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
"""{ "stargazer_count": 50, "unused_field": 456 }"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":100}"""
|
||||
)
|
||||
, ( get "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
, """{"stargazer_count":50}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":100}"""
|
||||
)
|
||||
, ( get "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
, """{"stargazer_count":50}"""
|
||||
)
|
||||
]
|
||||
, test "reduced json is preserved by StaticHttp.map2" <|
|
||||
@ -530,14 +501,11 @@ String was not uppercased"""
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
"""{ "stargazer_count": 50, "unused_field": 456 }"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":100}"""
|
||||
)
|
||||
, ( get "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
, """{"stargazer_count":50}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":100}"""
|
||||
)
|
||||
, ( get "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
, """{"stargazer_count":50}"""
|
||||
)
|
||||
]
|
||||
, test "the port sends out even if there are no http requests" <|
|
||||
@ -547,7 +515,7 @@ String was not uppercased"""
|
||||
, DataSource.succeed ()
|
||||
)
|
||||
]
|
||||
|> expectSuccess [ ( "", [] ) ]
|
||||
|> expectSuccess []
|
||||
, test "the port sends out when there are duplicate http requests for the same page" <|
|
||||
\() ->
|
||||
start
|
||||
@ -562,11 +530,8 @@ String was not uppercased"""
|
||||
"http://example.com"
|
||||
"""null"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "http://example.com"
|
||||
, """null"""
|
||||
)
|
||||
]
|
||||
[ ( get "http://example.com"
|
||||
, """null"""
|
||||
)
|
||||
]
|
||||
, test "an error is sent out for decoder failures" <|
|
||||
@ -582,7 +547,7 @@ String was not uppercased"""
|
||||
"""{ "stargazer_count": 86 }"""
|
||||
|> ProgramTest.expectOutgoingPortValues
|
||||
"toJsPort"
|
||||
(Codec.decoder ToJsPayload.toJsCodec)
|
||||
(Codec.decoder (ToJsPayload.successCodecNew2 "" ""))
|
||||
(expectErrorsPort
|
||||
"""-- STATIC HTTP DECODING ERROR ----------------------------------------------------- elm-pages
|
||||
|
||||
@ -625,7 +590,7 @@ I encountered some errors while decoding this JSON:
|
||||
""" "continuation-url" """
|
||||
|> ProgramTest.expectOutgoingPortValues
|
||||
"toJsPort"
|
||||
(Codec.decoder ToJsPayload.toJsCodec)
|
||||
(Codec.decoder (ToJsPayload.successCodecNew2 "" ""))
|
||||
(expectErrorsPort
|
||||
"""-- MISSING SECRET ----------------------------------------------------- elm-pages
|
||||
|
||||
@ -654,21 +619,8 @@ So maybe MISSING should be API_KEY"""
|
||||
)
|
||||
|> ProgramTest.expectOutgoingPortValues
|
||||
"toJsPort"
|
||||
(Codec.decoder ToJsPayload.toJsCodec)
|
||||
(Codec.decoder (ToJsPayload.successCodecNew2 "" ""))
|
||||
(expectErrorsPort """-- STATIC HTTP ERROR ----------------------------------------------------- elm-pages
|
||||
|
||||
I got an error making an HTTP request to this URL: https://api.github.com/repos/dillonkearns/elm-pages
|
||||
|
||||
Bad status: 404
|
||||
Status message: TODO: if you need this, please report to https://github.com/avh4/elm-program-test/issues
|
||||
Body:
|
||||
|
||||
-- STATIC HTTP DECODING ERROR ----------------------------------------------------- elm-pages
|
||||
|
||||
|
||||
|
||||
Payload sent back invalid JSON
|
||||
TODO
|
||||
""")
|
||||
, test "uses real secrets to perform request and masked secrets to store and lookup response" <|
|
||||
\() ->
|
||||
@ -705,17 +657,14 @@ TODO
|
||||
}
|
||||
)
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( { method = "GET"
|
||||
, url = "https://api.github.com/repos/dillonkearns/elm-pages?apiKey=<API_KEY>"
|
||||
, headers =
|
||||
[ ( "Authorization", "Bearer <BEARER>" )
|
||||
]
|
||||
, body = DataSource.emptyBody
|
||||
}
|
||||
, """{}"""
|
||||
)
|
||||
]
|
||||
[ ( { method = "GET"
|
||||
, url = "https://api.github.com/repos/dillonkearns/elm-pages?apiKey=<API_KEY>"
|
||||
, headers =
|
||||
[ ( "Authorization", "Bearer <BEARER>" )
|
||||
]
|
||||
, body = DataSource.emptyBody
|
||||
}
|
||||
, """{}"""
|
||||
)
|
||||
]
|
||||
, describe "staticHttpCache"
|
||||
@ -735,11 +684,8 @@ TODO
|
||||
)
|
||||
]
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
, test "it ignores unused cache" <|
|
||||
@ -762,11 +708,8 @@ TODO
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86 }"""
|
||||
|> expectSuccess
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
[ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
, test "validate DataSource is not stored for any pages" <|
|
||||
@ -1007,7 +950,7 @@ TODO
|
||||
"""{ "stargazer_count": 123 }"""
|
||||
|> ProgramTest.expectOutgoingPortValues
|
||||
"toJsPort"
|
||||
(Codec.decoder ToJsPayload.toJsCodec)
|
||||
(Codec.decoder (ToJsPayload.successCodecNew2 "" ""))
|
||||
(expectErrorsPort """-- NON-UNIQUE DISTILL KEYS ----------------------------------------------------- elm-pages
|
||||
I encountered DataSource.distill with two matching keys that had differing encoded values.
|
||||
|
||||
@ -1020,91 +963,92 @@ The second encoded value was:
|
||||
|
||||
123""")
|
||||
]
|
||||
, describe "generateFiles"
|
||||
[ test "initial requests are sent out" <|
|
||||
\() ->
|
||||
startLowLevel
|
||||
[ ApiRoute.succeed
|
||||
(DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages")
|
||||
(starDecoder
|
||||
|> Decode.map
|
||||
(\starCount ->
|
||||
{ body = "Star count: " ++ String.fromInt starCount
|
||||
}
|
||||
)
|
||||
)
|
||||
)
|
||||
|> ApiRoute.literal "test.txt"
|
||||
|> ApiRoute.single
|
||||
]
|
||||
[]
|
||||
[]
|
||||
|> ProgramTest.simulateHttpOk
|
||||
"GET"
|
||||
"https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
"""{ "stargazer_count": 86 }"""
|
||||
|> expectSuccessNew
|
||||
[]
|
||||
[ \success ->
|
||||
success.filesToGenerate
|
||||
|> Expect.equal
|
||||
[ { path = [ "test.txt" ]
|
||||
, content = "Star count: 86"
|
||||
}
|
||||
]
|
||||
]
|
||||
, test "it sends success port when no HTTP requests are needed because they're all cached" <|
|
||||
\() ->
|
||||
startLowLevel
|
||||
[ ApiRoute.succeed
|
||||
(DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages-starter")
|
||||
(starDecoder
|
||||
|> Decode.map
|
||||
(\starCount ->
|
||||
{ body = "Star count: " ++ String.fromInt starCount
|
||||
}
|
||||
)
|
||||
)
|
||||
)
|
||||
|> ApiRoute.literal "test.txt"
|
||||
|> ApiRoute.single
|
||||
]
|
||||
[ ( { url = "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, method = "GET"
|
||||
, headers = []
|
||||
, body = StaticHttpBody.EmptyBody
|
||||
}
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
, ( { url = "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
, method = "GET"
|
||||
, headers = []
|
||||
, body = StaticHttpBody.EmptyBody
|
||||
}
|
||||
, """{"stargazer_count":23}"""
|
||||
)
|
||||
]
|
||||
[ ( []
|
||||
, DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") starDecoder
|
||||
)
|
||||
]
|
||||
|> expectSuccessNew
|
||||
[ ( ""
|
||||
, [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
, """{"stargazer_count":86}"""
|
||||
)
|
||||
]
|
||||
)
|
||||
]
|
||||
[ \success ->
|
||||
success.filesToGenerate
|
||||
|> Expect.equal
|
||||
[ { path = [ "test.txt" ]
|
||||
, content = "Star count: 23"
|
||||
}
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
--, describe "generateFiles"
|
||||
-- [ test "initial requests are sent out" <|
|
||||
-- \() ->
|
||||
-- startLowLevel
|
||||
-- [ ApiRoute.succeed
|
||||
-- (DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages")
|
||||
-- (starDecoder
|
||||
-- |> Decode.map
|
||||
-- (\starCount ->
|
||||
-- { body = "Star count: " ++ String.fromInt starCount
|
||||
-- }
|
||||
-- )
|
||||
-- )
|
||||
-- )
|
||||
-- |> ApiRoute.literal "test.txt"
|
||||
-- |> ApiRoute.single
|
||||
-- ]
|
||||
-- []
|
||||
-- []
|
||||
-- |> ProgramTest.simulateHttpOk
|
||||
-- "GET"
|
||||
-- "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
-- """{ "stargazer_count": 86 }"""
|
||||
-- |> expectSuccessNew
|
||||
-- []
|
||||
-- [ \success ->
|
||||
-- success.filesToGenerate
|
||||
-- |> Expect.equal
|
||||
-- [ { path = [ "test.txt" ]
|
||||
-- , content = "Star count: 86"
|
||||
-- }
|
||||
-- ]
|
||||
-- ]
|
||||
-- , test "it sends success port when no HTTP requests are needed because they're all cached" <|
|
||||
-- \() ->
|
||||
-- startLowLevel
|
||||
-- [ ApiRoute.succeed
|
||||
-- (DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages-starter")
|
||||
-- (starDecoder
|
||||
-- |> Decode.map
|
||||
-- (\starCount ->
|
||||
-- { body = "Star count: " ++ String.fromInt starCount
|
||||
-- }
|
||||
-- )
|
||||
-- )
|
||||
-- )
|
||||
-- |> ApiRoute.literal "test.txt"
|
||||
-- |> ApiRoute.single
|
||||
-- ]
|
||||
-- [ ( { url = "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
-- , method = "GET"
|
||||
-- , headers = []
|
||||
-- , body = StaticHttpBody.EmptyBody
|
||||
-- }
|
||||
-- , """{"stargazer_count":86}"""
|
||||
-- )
|
||||
-- , ( { url = "https://api.github.com/repos/dillonkearns/elm-pages-starter"
|
||||
-- , method = "GET"
|
||||
-- , headers = []
|
||||
-- , body = StaticHttpBody.EmptyBody
|
||||
-- }
|
||||
-- , """{"stargazer_count":23}"""
|
||||
-- )
|
||||
-- ]
|
||||
-- [ ( []
|
||||
-- , DataSource.Http.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") starDecoder
|
||||
-- )
|
||||
-- ]
|
||||
-- |> expectSuccessNew
|
||||
-- [ ( ""
|
||||
-- , [ ( get "https://api.github.com/repos/dillonkearns/elm-pages"
|
||||
-- , """{"stargazer_count":86}"""
|
||||
-- )
|
||||
-- ]
|
||||
-- )
|
||||
-- ]
|
||||
-- [ \success ->
|
||||
-- success.filesToGenerate
|
||||
-- |> Expect.equal
|
||||
-- [ { path = [ "test.txt" ]
|
||||
-- , content = "Star count: 23"
|
||||
-- }
|
||||
-- ]
|
||||
-- ]
|
||||
-- ]
|
||||
]
|
||||
|
||||
|
||||
@ -1430,9 +1374,6 @@ simulateEffects effect =
|
||||
Effect.NoEffect ->
|
||||
SimulatedEffect.Cmd.none
|
||||
|
||||
Effect.SendJsData value ->
|
||||
SimulatedEffect.Ports.send "toJsPort" (value |> Codec.encoder ToJsPayload.toJsCodec)
|
||||
|
||||
-- toJsPort value |> Cmd.map never
|
||||
Effect.Batch list ->
|
||||
list
|
||||
@ -1500,7 +1441,12 @@ simulateEffects effect =
|
||||
]
|
||||
|
||||
Err error ->
|
||||
Debug.todo "Unhandled HTTP error."
|
||||
GotBuildError
|
||||
{ title = "Static HTTP Error"
|
||||
, message = []
|
||||
, fatal = True
|
||||
, path = ""
|
||||
}
|
||||
)
|
||||
, timeout = Nothing
|
||||
, tracker = Nothing
|
||||
@ -1529,7 +1475,7 @@ simulateEffects effect =
|
||||
SimulatedEffect.Cmd.none
|
||||
|
||||
|
||||
expectErrorsPort : String -> List ToJsPayload -> Expect.Expectation
|
||||
expectErrorsPort : String -> List ToJsPayload.ToJsSuccessPayloadNewCombined -> Expect.Expectation
|
||||
expectErrorsPort expectedPlainString actualPorts =
|
||||
case actualPorts of
|
||||
[ ToJsPayload.Errors actualRichTerminalString ] ->
|
||||
@ -1549,10 +1495,12 @@ normalizeErrorExpectEqual : String -> String -> Expect.Expectation
|
||||
normalizeErrorExpectEqual expectedPlainString actualRichTerminalString =
|
||||
actualRichTerminalString
|
||||
|> Regex.replace
|
||||
(Regex.fromString "\u{001B}\\[[0-9;]+m"
|
||||
-- strip out all possible ANSI sequences
|
||||
(Regex.fromString "(\\x9B|\\x1B\\[)[0-?]*[ -/]*[@-~]"
|
||||
|> Maybe.withDefault Regex.never
|
||||
)
|
||||
(\_ -> "")
|
||||
|> String.replace "\u{001B}" ""
|
||||
|> normalizeNewlines
|
||||
|> Expect.equal
|
||||
(expectedPlainString |> normalizeNewlines)
|
||||
@ -1567,6 +1515,10 @@ normalizeNewlines string =
|
||||
|> Regex.replace
|
||||
(Regex.fromString "( )+" |> Maybe.withDefault Regex.never)
|
||||
(\_ -> " ")
|
||||
|> String.replace "\u{000D}" ""
|
||||
|> Regex.replace
|
||||
(Regex.fromString "\\s" |> Maybe.withDefault Regex.never)
|
||||
(\_ -> "")
|
||||
|
||||
|
||||
toJsPort : a -> Cmd msg
|
||||
@ -1594,40 +1546,37 @@ starDecoder =
|
||||
Decode.field "stargazer_count" Decode.int
|
||||
|
||||
|
||||
expectSuccess : List ( String, List ( Request.Request, String ) ) -> ProgramTest model msg effect -> Expect.Expectation
|
||||
expectSuccess : List ( Request.Request, String ) -> ProgramTest model msg effect -> Expect.Expectation
|
||||
expectSuccess expectedRequests previous =
|
||||
expectSuccessNew expectedRequests [] previous
|
||||
|
||||
|
||||
expectSuccessNew : List ( String, List ( Request.Request, String ) ) -> List (ToJsPayload.ToJsSuccessPayload -> Expect.Expectation) -> ProgramTest model msg effect -> Expect.Expectation
|
||||
expectSuccessNew expectedRequests expectations previous =
|
||||
expectSuccessNew : List ( Request.Request, String ) -> List (ToJsPayload.ToJsSuccessPayloadNew -> Expect.Expectation) -> ProgramTest model msg effect -> Expect.Expectation
|
||||
expectSuccessNew expectedRequest expectations previous =
|
||||
previous
|
||||
|> ProgramTest.expectOutgoingPortValues
|
||||
"toJsPort"
|
||||
(Codec.decoder ToJsPayload.toJsCodec)
|
||||
(Codec.decoder (ToJsPayload.successCodecNew2 "" ""))
|
||||
(\value ->
|
||||
case value of
|
||||
(ToJsPayload.Success portPayload) :: _ ->
|
||||
portPayload
|
||||
|> Expect.all
|
||||
((\subject ->
|
||||
subject.pages
|
||||
|> Expect.equalDicts
|
||||
(expectedRequests
|
||||
(ToJsPayload.PageProgress portPayload) :: _ ->
|
||||
let
|
||||
singleExpectation : ToJsPayload.ToJsSuccessPayloadNew -> Expect.Expectation
|
||||
singleExpectation =
|
||||
\subject ->
|
||||
subject.contentJson
|
||||
|> Expect.equal
|
||||
(expectedRequest
|
||||
|> List.map
|
||||
(\( url, requests ) ->
|
||||
( url
|
||||
, requests
|
||||
|> List.map
|
||||
(\( request, response ) ->
|
||||
( Request.hash request, response )
|
||||
)
|
||||
|> Dict.fromList
|
||||
)
|
||||
(\( request, response ) ->
|
||||
( Request.hash request, response )
|
||||
)
|
||||
|> Dict.fromList
|
||||
)
|
||||
)
|
||||
in
|
||||
portPayload
|
||||
|> Expect.all
|
||||
(singleExpectation
|
||||
:: expectations
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user