diff --git a/stages/3/src/ElmHub.elm b/stages/3/src/ElmHub.elm index 95dda5b..9ab2218 100644 --- a/stages/3/src/ElmHub.elm +++ b/stages/3/src/ElmHub.elm @@ -55,10 +55,11 @@ responseDecoder = searchResultDecoder : Decoder SearchResult searchResultDecoder = - Json.Decode.object2 + Json.Decode.object3 SearchResult ("id" := Json.Decode.int) ("name" := Json.Decode.string) + ("stargazers_count" := Json.Decode.int) type alias Model = @@ -70,6 +71,7 @@ type alias Model = type alias SearchResult = { id : ResultId , name : String + , stars : Int } @@ -107,7 +109,11 @@ defaultValue str = viewSearchResult : SearchResult -> Html viewSearchResult result = - div [] [ text result.name ] + div + [] + [ div [ class "star-count" ] [ text (toString result.stars) ] + , div [] [ text result.name ] + ] type Action diff --git a/stages/3/test/Tests.elm b/stages/3/test/Tests.elm index 2d2f847..0e0d93d 100644 --- a/stages/3/test/Tests.elm +++ b/stages/3/test/Tests.elm @@ -1,15 +1,35 @@ -module Tests where +module Tests (..) where import ElmTest exposing (..) - -import String +import ElmHub exposing (responseDecoder) +import Json.Decode exposing (decodeString) all : Test all = - suite "A Test Suite" - [ - test "Addition" (assertEqual (3 + 7) 10), - test "String.left" (assertEqual "a" (String.left 1 "abcdefg")), - test "This test should fail" (assert False) - ] + suite + "Decoding responses from GitHub" + [ test "they can decode empty responses" + <| let + emptyResponse = + """{ "items": [] }""" + in + assertEqual + (decodeString responseDecoder emptyResponse) + (Ok []) + , test "they can decode responses with results in them" + <| let + response = + """{ "items": [ + { "id": 5, "name": "foo", "stargazers_count": 42 }, + { "id": 3, "name": "bar", "stargazers_count": 77 } + ] }""" + in + assertEqual + (decodeString responseDecoder response) + (Ok + [ { id = 5, name = "foo", stars = 42 } + , { id = 3, name = "bar", stars = 77 } + ] + ) + ]