webrat/spec/api/fills_in_spec.rb

162 lines
5.6 KiB
Ruby
Raw Normal View History

require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2008-03-02 20:14:52 +00:00
2008-04-23 14:54:07 +00:00
describe "fills_in" do
before do
@session = Webrat::TestSession.new
2008-03-02 20:14:52 +00:00
end
2008-04-27 16:45:01 +00:00
it "should work with textareas" do
@session.response_body = <<-EOS
2008-03-02 20:14:52 +00:00
<form method="post" action="/login">
<label for="user_text">User Text</label>
<textarea id="user_text" name="user[text]"></textarea>
<input type="submit" />
</form>
EOS
@session.expects(:post).with("/login", "user" => {"text" => "filling text area"})
2008-03-02 20:14:52 +00:00
@session.fills_in "User Text", :with => "filling text area"
@session.clicks_button
end
2008-04-27 16:45:01 +00:00
it "should work with password fields" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<input id="user_text" name="user[text]" type="password" />
<input type="submit" />
</form>
EOS
@session.expects(:post).with("/login", "user" => {"text" => "pass"})
2008-04-07 23:19:30 +00:00
@session.fills_in "user_text", :with => "pass"
@session.clicks_button
end
2008-04-27 16:45:01 +00:00
it "should fail if input not found" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="get" action="/login">
</form>
EOS
2008-03-02 20:14:52 +00:00
2008-04-23 14:54:07 +00:00
lambda { @session.fills_in "Email", :with => "foo@example.com" }.should raise_error
2008-04-07 23:19:30 +00:00
end
2008-04-27 16:45:01 +00:00
it "should allow overriding default form values" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<label for="user_email">Email</label>
<input id="user_email" name="user[email]" value="test@example.com" type="text" />
<input type="submit" />
</form>
EOS
@session.expects(:post).with("/login", "user" => {"email" => "foo@example.com"})
2008-04-07 23:19:30 +00:00
@session.fills_in "user[email]", :with => "foo@example.com"
@session.clicks_button
end
2008-04-27 16:45:01 +00:00
it "should choose the shortest label match" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<label for="user_mail1">Some other mail</label>
<input id="user_mail1" name="user[mail1]" type="text" />
<label for="user_mail2">Some mail</label>
<input id="user_mail2" name="user[mail2]" type="text" />
<input type="submit" />
</form>
EOS
2008-03-02 20:14:52 +00:00
@session.expects(:post).with("/login", "user" => {"mail1" => "", "mail2" => "value"})
2008-04-07 23:19:30 +00:00
@session.fills_in "Some", :with => "value"
@session.clicks_button
end
2008-04-27 16:45:01 +00:00
it "should choose the first label match if closest is a tie" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<label for="user_mail1">Some mail one</label>
<input id="user_mail1" name="user[mail1]" type="text" />
<label for="user_mail2">Some mail two</label>
<input id="user_mail2" name="user[mail2]" type="text" />
<input type="submit" />
</form>
EOS
2008-03-02 20:14:52 +00:00
@session.expects(:post).with("/login", "user" => {"mail1" => "value", "mail2" => ""})
2008-04-07 23:19:30 +00:00
@session.fills_in "Some mail", :with => "value"
@session.clicks_button
end
2008-07-08 19:07:14 +00:00
it "should support unlabelled inputs" do # regression test
@session.response_body = <<-EOS
<form method="post" action="/login">
<input id="user_name" name="user[name]" value="test person" type="text" />
<label for="user_email">email</label>
<input id="user_email" name="user[email]" value="test@example.com" type="text" />
<input id="user_address" name="user[address]" value="123 some street" type="text" />
</form>
EOS
lambda { @session.fills_in "email", :with => "value" }.should_not raise_error
end
2008-04-27 16:45:01 +00:00
it "should anchor label matches to start of label" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<label for="user_email">Some mail</label>
<input id="user_email" name="user[email]" value="test@example.com" type="text" />
</form>
EOS
2008-03-02 20:14:52 +00:00
2008-04-23 14:54:07 +00:00
lambda { @session.fills_in "mail", :with => "value" }.should raise_error
2008-04-07 23:19:30 +00:00
end
2008-04-27 16:45:01 +00:00
it "should anchor label matches to word boundaries" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<label for="user_email">Emailtastic</label>
<input id="user_email" name="user[email]" value="test@example.com" type="text" />
</form>
EOS
2008-04-05 16:49:18 +00:00
2008-04-23 14:54:07 +00:00
lambda { @session.fills_in "Email", :with => "value" }.should raise_error
2008-04-07 23:19:30 +00:00
end
2008-04-27 16:45:01 +00:00
it "should work with inputs nested in labels" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<label>
Email
2008-04-05 16:49:18 +00:00
<input id="user_email" name="user[email]" value="test@example.com" type="text" />
2008-04-07 23:19:30 +00:00
</label>
<input type="submit" />
</form>
EOS
@session.expects(:post).with("/login", "user" => {"email" => "foo@example.com"})
2008-04-07 23:19:30 +00:00
@session.fills_in "Email", :with => "foo@example.com"
@session.clicks_button
end
2008-04-27 16:45:01 +00:00
it "should work with full input names" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<input id="user_email" name="user[email]" type="text" />
<input type="submit" />
</form>
EOS
@session.expects(:post).with("/login", "user" => {"email" => "foo@example.com"})
2008-04-07 23:19:30 +00:00
@session.fills_in "user[email]", :with => "foo@example.com"
@session.clicks_button
end
2008-04-27 16:45:01 +00:00
it "should work with symbols" do
@session.response_body = <<-EOS
2008-04-07 23:19:30 +00:00
<form method="post" action="/login">
<label for="user_email">Email</label>
<input id="user_email" name="user[email]" type="text" />
<input type="submit" />
</form>
EOS
@session.expects(:post).with("/login", "user" => {"email" => "foo@example.com"})
2008-04-07 23:19:30 +00:00
@session.fills_in :email, :with => "foo@example.com"
@session.clicks_button
2008-03-02 20:14:52 +00:00
end
2008-04-07 23:19:30 +00:00
end