From 6ad391a2cb16b26d3246fde9d3565545e75fe90f Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Fri, 14 Apr 2017 10:56:28 +0200 Subject: [PATCH] Remove `choose/n` in favor of `click/2` + `Query.radio_button` --- lib/wallaby/browser.ex | 35 ------------- test/wallaby/browser/choose_test.exs | 78 ---------------------------- test/wallaby/browser/click_test.exs | 50 ++++++++++++++++++ 3 files changed, 50 insertions(+), 113 deletions(-) delete mode 100644 test/wallaby/browser/choose_test.exs diff --git a/lib/wallaby/browser.ex b/lib/wallaby/browser.ex index 5531239d..bd226938 100644 --- a/lib/wallaby/browser.ex +++ b/lib/wallaby/browser.ex @@ -172,41 +172,6 @@ defmodule Wallaby.Browser do |> find(query, &(Element.fill_in(&1, with: value))) end - @doc """ - Chooses a radio button based on id, label text, or name. - """ - @spec choose(Element.t) :: Element.t - @spec choose(parent, Query.t) :: parent - @spec choose(parent, locator, opts) :: parent - - def choose(parent, locator, opts) when is_binary(locator) do - IO.warn """ - choose/3 has been deprecated. Please use: click(parent, Query.radio_button("#{locator}", #{inspect(opts)})) - """ - - parent - |> find(Query.radio_button(locator, opts), &Element.click/1) - end - def choose(parent, locator) when is_binary(locator) do - IO.warn """ - choose/2 has been deprecated. Please use: click(parent, Query.radio_button("#{locator}")) - """ - - parent - |> find(Query.radio_button(locator, []), &Element.click/1) - end - def choose(parent, query) do - IO.warn "choose/2 has been deprecated. Please use click/2" - - parent - |> find(query, &Element.click/1) - end - def choose(%Element{}=element) do - IO.warn "choose/1 has been deprecated. Please use Element.click/1" - - Element.click(element) - end - @doc """ Checks a checkbox based on id, label text, or name. """ diff --git a/test/wallaby/browser/choose_test.exs b/test/wallaby/browser/choose_test.exs deleted file mode 100644 index 109af29f..00000000 --- a/test/wallaby/browser/choose_test.exs +++ /dev/null @@ -1,78 +0,0 @@ -defmodule Wallaby.Browser.ChooseTest do - use Wallaby.SessionCase, async: true - alias Wallaby.Query, as: Q - - setup %{session: session} do - page = - session - |> visit("forms.html") - - {:ok, page: page} - end - - test "choosing a radio button", %{page: page} do - refute find(page, "#option2") |> checked? - - page - |> choose("option2") - - assert find(page, "#option2") |> checked? - end - - test "choosing a radio button unchecks other buttons in the group", %{page: page} do - page - |> choose("Option 1") - |> find(Query.css("#option1")) - |> checked? - |> assert - - page - |> choose("option2") - - refute find(page, "#option1") |> checked? - assert find(page, "#option2") |> checked? - end - - test "choosing a radio button returns the parent", %{page: page} do - page - |> choose("Option 1") - |> choose("option2") - - assert find(page, "#option2") |> checked? - end - - test "throw an error if a label exists but does not have a for attribute", %{page: page} do - bad_form = - page - |> find(Query.css(".bad-form")) - - assert_raise Wallaby.QueryError, fn -> - choose(bad_form, "Radio with bad label") - end - end - - test "waits until the radio button appears", %{page: page} do - assert choose(page, "Hidden Radio Button") - end - - test "escape quotes", %{page: page} do - assert choose(page, "I'm a radio button") - end - - describe "choose/2" do - test "works with radio_button queries", %{page: page} do - assert page - |> choose( Q.radio_button("Option 1") ) - end - - test "works with option queries", %{page: page} do - assert page - |> choose( Q.option("Select Option 1") ) - end - - test "works with other queries", %{page: page} do - assert page - |> choose( Q.css("#select-option-1") ) - end - end -end diff --git a/test/wallaby/browser/click_test.exs b/test/wallaby/browser/click_test.exs index 23e31bed..90bb1eb5 100644 --- a/test/wallaby/browser/click_test.exs +++ b/test/wallaby/browser/click_test.exs @@ -17,5 +17,55 @@ defmodule Wallaby.Browser.ClickTest do assert page |> click(Query.button("Invisible Button", visible: false)) end + + test "can be chained/returns parent", %{page: page} do + page + |> click(Query.css("#option1")) + |> click(Query.css("#option2")) + + assert selected?(page, Query.css("#option2")) + end + end + + describe "click/2 with radio buttons (choose replacement)" do + test "choosing a radio button", %{page: page} do + refute selected?(page, Query.css("#option2")) + + page + |> click(Query.radio_button("option2")) + + assert selected?(page, Query.css("#option2")) + end + + test "choosing a radio button unchecks other buttons in the group", %{page: page} do + page + |> click(Query.radio_button("Option 1")) + |> selected?(Query.css("#option1")) + |> assert + + page + |> click(Query.radio_button("option2")) + + refute selected?(page, Query.css("#option1")) + assert selected?(page, Query.css("#option2")) + end + + test "throw an error if a label exists but does not have a for attribute", %{page: page} do + bad_form = + page + |> find(Query.css(".bad-form")) + + assert_raise Wallaby.QueryError, fn -> + click(bad_form, Query.radio_button("Radio with bad label")) + end + end + + test "waits until the radio button appears", %{page: page} do + assert click(page, Query.radio_button("Hidden Radio Button")) + end + + test "escape quotes", %{page: page} do + assert click(page, Query.radio_button("I'm a radio button")) + end end end