From cf8d8913028503889d72aed7f4af3e6c4d077feb Mon Sep 17 00:00:00 2001 From: Simon Rozet Date: Wed, 24 Jun 2009 18:18:46 +0200 Subject: [PATCH] More integration specs for the rack mode One test is still pending because form fields are double-escaped. --- spec/integration/rack/app.rb | 73 ++++++++++++++++ spec/integration/rack/rack_app.rb | 16 ---- .../rack/test/{test_helper.rb => helper.rb} | 2 + .../integration/rack/test/webrat_rack_test.rb | 83 +++++++------------ 4 files changed, 103 insertions(+), 71 deletions(-) create mode 100644 spec/integration/rack/app.rb delete mode 100644 spec/integration/rack/rack_app.rb rename spec/integration/rack/test/{test_helper.rb => helper.rb} (84%) diff --git a/spec/integration/rack/app.rb b/spec/integration/rack/app.rb new file mode 100644 index 0000000..61ab332 --- /dev/null +++ b/spec/integration/rack/app.rb @@ -0,0 +1,73 @@ +require "rubygems" +require "sinatra/base" + +class RackApp < Sinatra::Base + use_in_file_templates! + + get "/" do + erb :home + end + + get "/go" do + erb :go + end + + get "/internal_redirect" do + redirect "/" + end + + get "/external_redirect" do + redirect "http://google.com" + end + + get "/absolute_redirect" do + redirect URI.join(request.url, "foo").to_s + end + + get "/foo" do + "spam" + end + + post "/go" do + @user = params[:name] + @email = params[:email] + erb :hello + end +end + +__END__ +@@ layout + + + sinatra testing with webrat + + <%= yield %> + + + +@@ home +

visit there

+ +
+ +
+ +@@ go +
+
+ + +
+
+ + +
+ +
+ +@@ hello +

Hello, <%= @user %>

+

Your email is: <%= @email %>

diff --git a/spec/integration/rack/rack_app.rb b/spec/integration/rack/rack_app.rb deleted file mode 100644 index 978f734..0000000 --- a/spec/integration/rack/rack_app.rb +++ /dev/null @@ -1,16 +0,0 @@ -require "rubygems" -require "sinatra/base" - -class RackApp < Sinatra::Default - get "/" do - "Hello World" - end - - get "/redirect_absolute_url" do - redirect URI.join(request.url, "foo").to_s - end - - get "/foo" do - "spam" - end -end diff --git a/spec/integration/rack/test/test_helper.rb b/spec/integration/rack/test/helper.rb similarity index 84% rename from spec/integration/rack/test/test_helper.rb rename to spec/integration/rack/test/helper.rb index bfa85b9..7284dcf 100644 --- a/spec/integration/rack/test/test_helper.rb +++ b/spec/integration/rack/test/helper.rb @@ -4,6 +4,7 @@ require "rack/test" # require "redgreen" require File.dirname(__FILE__) + "/../../../../lib/webrat" +require File.dirname(__FILE__) + "/../app" Webrat.configure do |config| config.mode = :rack @@ -13,6 +14,7 @@ class Test::Unit::TestCase include Rack::Test::Methods include Webrat::Methods include Webrat::Matchers + include Webrat::HaveTagMatcher def app Rack::Builder.new { diff --git a/spec/integration/rack/test/webrat_rack_test.rb b/spec/integration/rack/test/webrat_rack_test.rb index 4fdef09..75e26d4 100644 --- a/spec/integration/rack/test/webrat_rack_test.rb +++ b/spec/integration/rack/test/webrat_rack_test.rb @@ -1,67 +1,40 @@ -require File.dirname(__FILE__) + "/test_helper" -require File.dirname(__FILE__) + "/../rack_app" +require File.dirname(__FILE__) + "/helper" class WebratRackTest < Test::Unit::TestCase - def test_visit_returns_response - response = visit "/" - assert response.ok? + def test_visits_pages + visit "/" + click_link "there" + + assert_have_tag("form[@method='post'][@action='/go']") end - def test_last_response_is_available - visit "/" - assert last_response.ok? - end - - def test_last_request_is_available - visit "/" - assert_equal "/", last_request.env["PATH_INFO"] - end - - def test_redirects - visit "/redirect_absolute_url" - assert_equal "spam", response_body - end - - def test_assertions_after_visit - visit "/" - assert_contain "Hello World" - end - - def test_assertions_after_visit - get "/" - assert_contain "Hello World" - end - - # def test_visits_pages - # visit "/" - # assert response_body.include?("visit") - # - # click_link "there" - # assert response_body.include?('
') - # end - # # def test_submits_form # visit "/go" # fill_in "Name", :with => "World" # fill_in "Email", :with => "world@example.org" # click_button "Submit" # - # assert response_body.include?("Hello, World") - # assert response_body.include?("Your email is: world@example.org") - # end - # - # def test_check_value_of_field - # visit "/" - # assert field_labeled("Prefilled").value, "text" - # end - # - # def test_follows_internal_redirects - # visit "/internal_redirect" - # assert response_body.include?("visit") - # end - # - # def test_does_not_follow_external_redirects - # visit "/external_redirect" - # assert response_code == 302 + # assert_contain "Hello, World" + # assert_contain "Your email is: world@example.org" # end + + def test_check_value_of_field + visit "/" + assert_equal field_labeled("Prefilled").value, "text" + end + + def test_follows_internal_redirects + visit "/internal_redirect" + assert_contain "visit" + end + + def test_does_not_follow_external_redirects + visit "/external_redirect" + assert last_response.redirect? + end + + def test_absolute_url_redirect + visit "/absolute_redirect" + assert_contain "spam" + end end