From 32dc36592bbbd4012d372af4a6a53dcfdfa490a7 Mon Sep 17 00:00:00 2001 From: Kyle Hargraves Date: Sat, 12 Apr 2008 18:20:43 -0500 Subject: [PATCH] Support relative links, including href="?foo=bar" --- lib/webrat/link.rb | 12 +++++++++++- test/clicks_link_test.rb | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/webrat/link.rb b/lib/webrat/link.rb index b2977d8..d9ff682 100644 --- a/lib/webrat/link.rb +++ b/lib/webrat/link.rb @@ -10,7 +10,7 @@ module Webrat method ||= http_method return if href =~ /^#/ && method == :get - Page.new(@page.session, href, method, authenticity_token.blank? ? {} : {"authenticity_token" => authenticity_token}) + Page.new(@page.session, absolute_href, method, authenticity_token.blank? ? {} : {"authenticity_token" => authenticity_token}) end def matches_text?(link_text) @@ -26,6 +26,16 @@ module Webrat def href @element["href"] end + + def absolute_href + if href =~ /^\?/ + "#{@page.url}#{href}" + elsif href !~ /^\// + "#{@page.url}/#{href}" + else + href + end + end def authenticity_token return unless onclick && onclick.include?("s.setAttribute('name', 'authenticity_token');") && diff --git a/test/clicks_link_test.rb b/test/clicks_link_test.rb index 7b5007b..47d450f 100644 --- a/test/clicks_link_test.rb +++ b/test/clicks_link_test.rb @@ -190,4 +190,22 @@ class ClicksLinkTest < Test::Unit::TestCase @session.expects(:send).with('get_via_redirect', '#section-1', {}).never @session.clicks_link "Jump to Section 1" end + + def test_should_follow_relative_links + @session.current_page.stubs(:url).returns("/page") + @response.stubs(:body).returns(<<-EOS) + Jump to sub page + EOS + @session.expects(:get_via_redirect).with("/page/sub", {}) + @session.clicks_link "Jump to sub page" + end + + def test_should_follow_query_parameters + @session.current_page.stubs(:url).returns("/page") + @response.stubs(:body).returns(<<-EOS) + Jump to foo bar + EOS + @session.expects(:get_via_redirect).with("/page?foo=bar", {}) + @session.clicks_link "Jump to foo bar" + end end