From 3e4205a22f4958d62980fce8a86eb53b1e92ec84 Mon Sep 17 00:00:00 2001 From: Oleksiy Radyvanyuk Date: Mon, 4 Aug 2014 15:31:47 +0200 Subject: [PATCH] Fix to the method `element_is_not_hidden` incorrectly dealing with removing invisible elements from resulting array. --- gem/lib/frank-cucumber/frank_helper.rb | 2 +- gem/test/frank_helper_test.rb | 75 ++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 gem/test/frank_helper_test.rb diff --git a/gem/lib/frank-cucumber/frank_helper.rb b/gem/lib/frank-cucumber/frank_helper.rb index 433c503..3858bc4 100644 --- a/gem/lib/frank-cucumber/frank_helper.rb +++ b/gem/lib/frank-cucumber/frank_helper.rb @@ -276,7 +276,7 @@ def wait_for_nothing_to_be_animating( timeout = false ) # a better name for this method would be element_exists_and_is_not_hidden def element_is_not_hidden(selector) matches = frankly_map( selector, 'FEX_isVisible' ) - matches.delete(false) + matches.delete(0) !matches.empty? end diff --git a/gem/test/frank_helper_test.rb b/gem/test/frank_helper_test.rb new file mode 100644 index 0000000..e093797 --- /dev/null +++ b/gem/test/frank_helper_test.rb @@ -0,0 +1,75 @@ +require_relative 'test_helper.rb' + +class HelperForTesting + include Frank::Cucumber::FrankHelper + + def mock_frank_server + RR.mock(@mock_frank_server = Object.new) + end + + private + def frank_server + @mock_frank_server + end +end + +describe "frank helper" do + the_helper = nil + + before do + the_helper = HelperForTesting.new + end + + def successful_response_array(array) + %Q{ { "outcome": "SUCCESS", "results": #{array} } } + end + + describe "when determining visibility of selector" do + + def setup_the_helper_mock_result_array(helper, array) + operation_map = Frank::Cucumber::Gateway.build_operation_map("FEX_isVisible", []) + helper.mock_frank_server.send_post('map', + :query => anything, + :operation => operation_map, + :selector_engine => anything) { successful_response_array(array) } + end + + it "correctly processes no value case" do + selector = "NoView" + setup_the_helper_mock_result_array(the_helper, []) + the_helper.element_is_not_hidden( selector ).must_equal(false) + end + + it "filters out the only invisible element" do + selector = "SingleView" + setup_the_helper_mock_result_array(the_helper, [0]) + the_helper.element_is_not_hidden( selector ).must_equal(false) + end + + it "keeps the only visible element" do + selector = "SingleView" + setup_the_helper_mock_result_array(the_helper, [1]) + the_helper.element_is_not_hidden( selector ).must_equal(true) + end + + it "filters out invisible elements out of multiple candidates" do + selector = "MultipleViews" + setup_the_helper_mock_result_array(the_helper, [0, 0, 0, 0, 0]) + the_helper.element_is_not_hidden( selector ).must_equal(false) + end + + it "keeps all the visible elements" do + selector = "MultipleViews" + setup_the_helper_mock_result_array(the_helper, [1, 1, 1]) + the_helper.element_is_not_hidden( selector ).must_equal(true) + end + + it "only filters out invisible and keeps all the visible elements" do + selector = "MultipleViews" + setup_the_helper_mock_result_array(the_helper, [1, 0, 1, 0, 1]) + the_helper.element_is_not_hidden( selector ).must_equal(true) + end + + end + +end