Support passing an ActiveRecord model to #within when in Rails mode [#68 state:resolved] (Luke Melia)
This commit is contained in:
parent
21aef01222
commit
7a7cb3f002
@ -20,6 +20,8 @@
|
||||
* Use Hpricot and REXML when not parsing with Nokogiri (on JRuby, for example)
|
||||
|
||||
* Minor enhancements
|
||||
|
||||
* Support passing an ActiveRecord model to #within when in Rails mode [#68] (Luke Melia)
|
||||
* Added assert_contain, assert_not_contain [#86] (Mike Gaffney, Amos King)
|
||||
* Add configuration options for the Selenium environment and port (Kieran Pilkington)
|
||||
* Maximize the browser window after initializing Selenium (Luke Melia)
|
||||
|
@ -2,10 +2,27 @@ require "webrat"
|
||||
|
||||
require "action_controller"
|
||||
require "action_controller/integration"
|
||||
require "action_controller/record_identifier"
|
||||
|
||||
module Webrat
|
||||
class RailsSession < Session #:nodoc:
|
||||
|
||||
include ActionController::RecordIdentifier
|
||||
|
||||
# The Rails version of within supports passing in a model and Webrat
|
||||
# will apply a scope based on Rails' dom_id for that model.
|
||||
#
|
||||
# Example:
|
||||
# within User.last do
|
||||
# click_link "Delete"
|
||||
# end
|
||||
def within(selector_or_object, &block)
|
||||
if selector_or_object.is_a?(String)
|
||||
super
|
||||
else
|
||||
super('#' + dom_id(selector_or_object), &block)
|
||||
end
|
||||
end
|
||||
|
||||
def doc_root
|
||||
File.expand_path(File.join(RAILS_ROOT, 'public'))
|
||||
end
|
||||
|
@ -1,3 +1,9 @@
|
||||
class FakeModel
|
||||
def id
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
class WebratController < ApplicationController
|
||||
|
||||
def form
|
||||
|
@ -13,5 +13,11 @@
|
||||
<%= select_tag "month", "<option></option><option>January</option>" %>
|
||||
</label>
|
||||
|
||||
<% div_for FakeModel.new do %>
|
||||
<label>
|
||||
Object field <%= text_field_tag "object_field" %>
|
||||
</label>
|
||||
<% end %>
|
||||
|
||||
<%= submit_tag "Test" %>
|
||||
<% end %>
|
17
spec/integration/rails/test/integration/webrat_rails_test.rb
Normal file
17
spec/integration/rails/test/integration/webrat_rails_test.rb
Normal file
@ -0,0 +1,17 @@
|
||||
require 'test_helper'
|
||||
|
||||
class WebratTest < ActionController::IntegrationTest
|
||||
|
||||
test "should scope within an object" do
|
||||
visit root_path
|
||||
|
||||
within FakeModel.new do
|
||||
fill_in "Object field", :with => "Test"
|
||||
|
||||
assert_raise Webrat::NotFoundError do
|
||||
check "TOS"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
@ -1,6 +1,7 @@
|
||||
require 'test_helper'
|
||||
|
||||
class WebratTest < ActionController::IntegrationTest
|
||||
|
||||
test "should visit pages" do
|
||||
visit root_path
|
||||
assert_tag "Webrat Form"
|
||||
@ -24,4 +25,5 @@ class WebratTest < ActionController::IntegrationTest
|
||||
visit external_redirect_path
|
||||
assert response.redirect?
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -85,4 +85,26 @@ describe Webrat::RailsSession do
|
||||
it "should provide a doc_root" do
|
||||
Webrat::RailsSession.new(mock("integration session")).should respond_to(:doc_root)
|
||||
end
|
||||
|
||||
it "should accept an ActiveRecord argument to #within and translate to a selector using dom_id" do
|
||||
body = <<-HTML
|
||||
<a href="/page1">Edit</a>
|
||||
<div id="new_object">
|
||||
<a href="/page2">Edit</a>
|
||||
</div>
|
||||
HTML
|
||||
|
||||
response = mock("response", :body => body, :headers => {}, :code => 200)
|
||||
@integration_session.stub!(:response => response)
|
||||
@integration_session.should_receive(:get).with("/page2", {}, nil)
|
||||
|
||||
rails_session = Webrat::RailsSession.new(@integration_session)
|
||||
|
||||
object = Object.new
|
||||
object.stub!(:id => nil)
|
||||
|
||||
rails_session.within(object) do
|
||||
rails_session.click_link 'Edit'
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user