From fd48480a05c237316bad647300d972e2188c7ff7 Mon Sep 17 00:00:00 2001 From: Alexander Kobjolke Date: Sat, 30 Dec 2023 23:19:56 +0100 Subject: [PATCH] Ensure that ClickedThumbnail message is emitted --- tests/PhotoGrooveTest.elm | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/tests/PhotoGrooveTest.elm b/tests/PhotoGrooveTest.elm index d436821..4be8f52 100644 --- a/tests/PhotoGrooveTest.elm +++ b/tests/PhotoGrooveTest.elm @@ -1,12 +1,13 @@ module PhotoGrooveTest exposing (..) import Expect -import Fuzz +import Fuzz exposing (Fuzzer) import Html.Attributes as Attr import Json.Decode as J import Json.Encode as Encode import PhotoGroove.Internal as Testee exposing (FilterType(..), FilterValues, Message(..), Photo, filterTypeToName, initialModel) import Test exposing (..) +import Test.Html.Event as Event import Test.Html.Query as Query import Test.Html.Selector exposing (attribute, tag) @@ -89,6 +90,28 @@ thumbnailRendered url query = |> Query.count (Expect.atLeast 1) +clickThumbnail : Test +clickThumbnail = + fuzz3 urlFuzzer Fuzz.string urlFuzzer "clicking a thumbnail selects it" <| + \urlsBefore urlSelected urlsAfter -> + let + url = + urlSelected ++ ".jpeg" + + photos = + (urlsBefore ++ url :: urlsAfter) |> List.map photoFromUrl + + srcToClick = + Testee.urlPrefix ++ url + in + { initialModel | status = Testee.Loaded photos "" } + |> Testee.view + |> Query.fromHtml + |> Query.find [ tag "img", attribute (Attr.src srcToClick) ] + |> Event.simulate Event.click + |> Event.expect (Testee.ClickedThumbnail url) + + photoFromUrl : String -> Photo photoFromUrl url = { url = url, size = 0, title = "" } @@ -105,3 +128,15 @@ selectedUrl status = Testee.Errored _ -> Nothing + + +urlFuzzer : Fuzzer (List String) +urlFuzzer = + Fuzz.intRange 1 5 + |> Fuzz.map urlsFromCount + + +urlsFromCount : Int -> List String +urlsFromCount count = + List.range 1 count + |> List.map (\num -> String.fromInt num ++ ".jpg")