Test update and view function

This commit is contained in:
Alexander Kobjolke 2023-12-23 23:04:37 +01:00
parent a0c0a8354a
commit 9045353810

View file

@ -1,16 +1,20 @@
module PhotoGrooveTest exposing (..) module PhotoGrooveTest exposing (..)
import Expect exposing (Expectation) import Expect
import Fuzz exposing (Fuzzer, int, list, string) import Fuzz
import Html.Attributes as Attr
import Json.Decode as J import Json.Decode as J
import Json.Encode as Encode exposing (Value) import Json.Encode as Encode
import PhotoGroove.Internal as Testee import PhotoGroove.Internal as Testee exposing (FilterType(..), FilterValues, Message(..), Photo, filterTypeToName, initialModel)
import Test exposing (..) import Test exposing (..)
import Test.Html.Query as Query
import Test.Html.Selector exposing (attribute, tag)
suite : Test suite : Test
suite = suite =
describe "photoDecoder" concat
[ describe "photoDecoder"
[ fuzz2 Fuzz.string Fuzz.int "title always defaults to '(untitled)'" <| [ fuzz2 Fuzz.string Fuzz.int "title always defaults to '(untitled)'" <|
\url size -> \url size ->
[ ( "url", Encode.string url ) [ ( "url", Encode.string url )
@ -21,3 +25,83 @@ suite =
|> Result.map .title |> Result.map .title
|> Expect.equal (Ok "(untitled)") |> Expect.equal (Ok "(untitled)")
] ]
, describe "update"
[ describe "slider event sets filter value"
[ sliderTest Hue .hue
, sliderTest Ripple .ripple
, sliderTest Noise .noise
]
, test "when photos are loaded, the first one gets selected" <|
\_ ->
Testee.initialModel
|> Testee.update (GotPhotos (Ok <| [ photoFromUrl "1.jpg" ]))
|> Tuple.first
|> .status
|> selectedUrl
|> Expect.equal (Just "1.jpg")
]
, describe "view"
[ test "no photos, no thumbnails" <|
\_ ->
Testee.initialModel
|> Testee.view
|> Query.fromHtml
|> Query.findAll [ tag "img" ]
|> Query.count (Expect.equal 0)
, fuzz (Fuzz.intRange 1 5) "URLs render as thumbnails" <|
\count ->
let
urls : List String
urls =
List.range 1 count
|> List.map (\num -> String.fromInt num ++ ".png")
photos =
List.map photoFromUrl urls
checks =
List.map thumbnailRendered urls
in
{ initialModel | status = Testee.Loaded photos "" }
|> Testee.view
|> Query.fromHtml
|> Expect.all checks
]
]
sliderTest : FilterType -> (FilterValues -> Int) -> Test
sliderTest filterType value =
fuzz Fuzz.int (filterTypeToName filterType) <|
\amount ->
Testee.initialModel
|> Testee.update (ChangedFilter filterType amount)
|> Tuple.first
|> .filterValues
|> value
|> Expect.equal amount
thumbnailRendered : String -> Query.Single msg -> Expect.Expectation
thumbnailRendered url query =
query
|> Query.findAll [ tag "img", attribute (Attr.src (Testee.urlPrefix ++ url)) ]
|> Query.count (Expect.atLeast 1)
photoFromUrl : String -> Photo
photoFromUrl url =
{ url = url, size = 0, title = "" }
selectedUrl : Testee.Status -> Maybe String
selectedUrl status =
case status of
Testee.Loading ->
Nothing
Testee.Loaded _ url ->
Just url
Testee.Errored _ ->
Nothing