noredink-ui/tests/Spec/Nri/Ui/Select.elm
Hardy Jones cbb7c34225
Test the new select version
We make a suite that checks the behavior of both versions.
Assuming they have the same API, this should work.

If we add another version and it changes the API,
we might want to rethink this approach.
2018-04-18 07:59:26 -07:00

62 lines
1.6 KiB
Elm

module Spec.Nri.Ui.Select exposing (spec)
import Expect exposing (Expectation)
import Html
import Html.Attributes as Attr
import Nri.Ui.Select.V1
import Nri.Ui.Select.V2
import Test exposing (..)
import Test.Html.Query as Query
import Test.Html.Selector exposing (..)
spec : Test
spec =
describe "view"
[ describe "V1" (viewSuite Nri.Ui.Select.V1.view)
, describe "V2" (viewSuite Nri.Ui.Select.V2.view)
]
viewSuite :
({ choices : List { label : String, value : String }, current : String } -> Html.Html msg)
-> List Test
viewSuite view =
[ test "shows all options" <|
\() ->
viewTest
view
"Tacos"
[ "Tacos", "Burritos", "Enchiladas" ]
|> Query.find [ tag "select" ]
|> Query.findAll [ tag "option" ]
|> Query.count (Expect.equal 3)
, test "selects the current option" <|
\() ->
viewTest
view
"Burritos"
[ "Tacos", "Burritos", "Enchiladas" ]
|> Query.find
[ tag "option"
, attribute <| Attr.selected True
]
|> Query.has [ text "Burritos" ]
]
viewTest :
({ choices : List { label : a, value : a }, current : b } -> Html.Html msg)
-> b
-> List a
-> Query.Single msg
viewTest view selected items =
Query.fromHtml
(Html.div []
[ view
{ choices = List.map (\x -> { label = x, value = x }) items
, current = selected
}
]
)