diff --git a/lib/ae_page_objects/core/application_router.rb b/lib/ae_page_objects/core/application_router.rb index f90bcdc4..374d07a6 100644 --- a/lib/ae_page_objects/core/application_router.rb +++ b/lib/ae_page_objects/core/application_router.rb @@ -16,24 +16,10 @@ def generate_path(named_route, *args) class Rails23 < Base def recognizes?(path, url) ["GET", "PUT", "POST", "DELETE", "PATCH"].map(&:downcase).map(&:to_sym).each do |method| - path_route_result = ActionController::Routing::Routes.named_routes[path].requirements - recognized_result = nil - - begin - recognized_result = ActionController::Routing::Routes.recognize_path(url, {:method => method}).select do - |key, _| - key.to_s.match(/(controller|action)/) - end - rescue ActionController::MethodNotAllowed - end + route = ActionController::Routing::Routes.named_routes[path] + route.recognize(url, {:method => method}) - # Only the first recognized path returned by Rails is considered, - # which means, we only want highest prioritized route. - if recognized_result && path_route_result == Hash[recognized_result] - return true - else - next - end + return true if route && route.recognize(url, {:method => method}) end false @@ -58,18 +44,14 @@ def recognizes?(path, url) ["GET", "PUT", "POST", "DELETE", "PATCH"].each do |method| router.recognize(request_for(url, method)) do |route, matches, params| - if route.name.to_s == path.to_s - return true - else - # We break the inner loop here because only the first recognized path returned by Rails is considered, - # which means, we only want highest prioritized route. - break - end + return true if route.name.to_s == path.to_s end end + false end + private def request_for(url, method) @@ -104,7 +86,6 @@ def routes class Rails32 < Rails3 private - def url_and_router(url) url = Journey::Router::Utils.normalize_path(url) unless url =~ %r{://} router = ::Rails.application.routes.router @@ -115,8 +96,7 @@ def url_and_router(url) class Rails4 < Rails32 - private - + private def url_and_router(url) require 'action_dispatch/journey' url = ActionDispatch::Journey::Router::Utils.normalize_path(url) unless url =~ %r{://} @@ -125,6 +105,7 @@ def url_and_router(url) [url, router] end end + end def path_recognizes_url?(path, url) diff --git a/test/test_apps/shared/test/selenium/page_object_integration_test.rb b/test/test_apps/shared/test/selenium/page_object_integration_test.rb index c8fb1e7a..e41a27ee 100644 --- a/test/test_apps/shared/test/selenium/page_object_integration_test.rb +++ b/test/test_apps/shared/test/selenium/page_object_integration_test.rb @@ -126,44 +126,6 @@ def test_window_change_to assert_equal PageObjects::Books::NewPage, books_new_page.class end - def test_window_change_to__multiple_pages - book = Book.create!(:title => "Brave New World") - - visit("/books/#{book.id}") - result_page = AePageObjects.browser.current_window.change_to(PageObjects::Books::NewPage, - PageObjects::Books::ShowPage) - assert_equal true, result_page.is_a?(PageObjects::Books::ShowPage) - - result_page = AePageObjects.browser.current_window.change_to(PageObjects::Books::ShowPage, - PageObjects::Books::NewPage) - assert_equal true, result_page.is_a?(PageObjects::Books::ShowPage) - - assert_nothing_raised do - AePageObjects.browser.current_window.change_to(PageObjects::Books::ShowPage) - end - - assert_raises AePageObjects::DocumentLoadError do - AePageObjects.browser.current_window.change_to(PageObjects::Books::NewPage) - end - - visit("/books/new") - result_page = AePageObjects.browser.current_window.change_to(PageObjects::Books::NewPage, - PageObjects::Books::ShowPage) - assert_equal true, result_page.is_a?(PageObjects::Books::NewPage) - - result_page = AePageObjects.browser.current_window.change_to(PageObjects::Books::ShowPage, - PageObjects::Books::NewPage) - assert_equal true, result_page.is_a?(PageObjects::Books::NewPage) - - assert_nothing_raised do - AePageObjects.browser.current_window.change_to(PageObjects::Books::NewPage) - end - - assert_raises AePageObjects::DocumentLoadError do - AePageObjects.browser.current_window.change_to(PageObjects::Books::ShowPage) - end - end - def test_element_proxy author = PageObjects::Authors::NewPage.visit