require File.join(File.dirname(__FILE__), "test_helper")
class SubmitFormTest < Test::Unit::TestCase
include ActionView::Helpers::FormTagHelper
include ActionView::Helpers::TagHelper
include XHRHelpers
def setup
@controller = TestController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
def test_submit_to_namespaced_controller
@controller = Admin::NamespacedController.new
value = "jason"
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field_tag "username", "#{value}" %>
<%= submit_tag %>
EOD
submit_form
assert_response :success
assert_equal value, @controller.params[:username]
end
def test_submit_requires_submit_tag
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field_tag "username", "jason" %>
EOD
assert_raise(FormTestHelper::Form::MissingSubmitError) { submit_form }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
EOD
assert_nothing_raised { submit_form }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
EOD
assert_nothing_raised { submit_form }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= image_submit_tag 'image.png' %>
EOD
assert_nothing_raised { submit_form }
end
def test_submit_requires_submit_tag_with_value
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field_tag "username", "jason" %>
EOD
assert_raise(FormTestHelper::Form::MissingSubmitError) { submit_form :submit_value => "yes" }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
EOD
assert_nothing_raised { submit_form :submit_value => "yes" }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
EOD
assert_raise(FormTestHelper::Form::MissingSubmitError) { submit_form :submit_value => "yes" }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
EOD
assert_nothing_raised { submit_form :submit_value => "yes" }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
EOD
assert_raise(FormTestHelper::Form::MissingSubmitError) { submit_form :submit_value => "yes" }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= image_submit_tag 'image.png', :value => "yes" %>
EOD
assert_nothing_raised { submit_form }
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= image_submit_tag 'image.png', :value => "no" %>
EOD
assert_raise(FormTestHelper::Form::MissingSubmitError) { submit_form :submit_value => "yes" }
end
def test_submit_form_accepts_block
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field_tag "username", "jason" %>
<%= submit_tag %>
EOD
new_value = 'brent'
submit_form do |form|
form['username'] = new_value
end
assert_response :success
assert_equal new_value, @controller.params[:username]
end
def test_submit_form_without_block_selects_and_submits
html = <<-EOD
<%= form_tag({:action => 'create'}, {:id => :test}) %>
<%= text_field_tag "username", "jason" %>
<%= submit_tag %>
EOD
render_rhtml html
submit_form
assert_response :success
assert_equal 'jason', @controller.params[:username]
render_rhtml html
assert_select "form#?", "test"
new_value = 'brent'
submit_form "test", :username => new_value
assert_response :success
assert_equal new_value, @controller.params[:username]
render_rhtml html
new_value = 'david'
submit_form :username => new_value
assert_response :success
assert_equal new_value, @controller.params[:username]
end
def test_submit_form_sets_referrer_header
render_rhtml <<-EOD
<%= form_tag(:action => 'redirect_to_back') %>
<%= submit_tag %>
EOD
submit_form
assert_response :redirect
assert_redirected_to :action => 'rhtml'
end
def test_submit_form_by_xhr_using_a_block
render_for_xhr
new_value = 'brent'
submit_form :xhr => true do | form |
form['username'] = new_value
end
check_xhr_responses new_value
end
def test_accessing_simple_field_by_method_call
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field_tag "username", "jason" %>
<%= submit_tag %>
EOD
new_value = 'brent'
submit_form do |form|
assert_equal 'jason', form.username
form.username = new_value
end
assert_response :success
assert_equal new_value, @controller.params[:username]
end
def test_accessing_deep_field_by_method_call
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field_tag "user[username]", "jason" %>
<%= submit_tag %>
EOD
new_value = 'brent'
submit_form do |form|
assert_equal 'jason', form.user.username
form.user.username = new_value
end
assert_response :success
assert_equal new_value, @controller.params[:user][:username]
end
def test_accessing_field_as_keys
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field_tag "user[username]", "jason" %>
<%= submit_tag %>
EOD
new_value = 'brent'
submit_form do |form|
assert_equal 'jason', form.user.username
form.user['username'] = new_value
end
assert_response :success
assert_equal new_value, @controller.params[:user][:username]
end
def test_accessing_nonexistant_fields_as_keys_raises_exceptions
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= submit_tag %>
EOD
assert_raise(FormTestHelper::Form::FieldNotFoundError) do
submit_form do |form|
assert_equal 'jason', form.user.username
form.user['username'] = new_value
end
end
end
def test_with_object
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field :book, :name %>
<%= select :book, :category, [['Mining', 1], ['Programming', 2]] %>
<%= check_box :book, :classic %>
<%= submit_tag %>
EOD
submit_form do |form|
form.with_object(:book) do |book|
book.name = 'Pickaxe'
book.category = 'Programming'
book.classic.check
end
end
assert_response :success
assert_equal 'Pickaxe', @controller.params[:book][:name]
end
def test_updating_fields_with_hash
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= text_field :book, :name %>
<%= select :book, :category, [['Mining', 1], ['Programming', 2]] %>
<%= check_box :book, :classic %>
<%= submit_tag %>
EOD
new_book = {
:name => 'Pickaxe',
:category => '2', # Could assign "Programming", but then it won't equal 2 in the params.
:classic => '1'
}
submit_form do |form|
form.book.update(new_book)
end
assert_response :success
new_book.each do |attribute,expects|
assert_equal expects, @controller.params[:book][attribute]
end
end
def test_submit_form_sets_response_body
render_rhtml <<-EOD
<%= form_tag(:action => 'create') %>
<%= submit_tag %>
EOD
submit_form
assert_equal "created", @response.body
end
def test_submit_form_with_multiple_submit_values_submitting_with_a_block
value = "jason"
render_rhtml <<-EOD
<%= form_tag({:action => 'create'}, {:id => "test" }) %>
<%= text_field_tag "username", "#{value}" %>
<%= submit_tag "Yes", :value => "yes" %>
<%= submit_tag "No", :value => "no" %>
<%= submit_tag "Maybe", :value => "maybe" %>
EOD
form = submit_form "test", :submit_value => "maybe" do |form|
end
assert_response :success
assert_equal value, @controller.params[:username]
assert_equal({"commit"=>"maybe", "username"=>value, "action"=>"create", "controller"=>@controller.controller_name}, @controller.params)
end
def test_submit_form_with_multiple_submit_values_submitting_without_a_block
value = "jason"
render_rhtml <<-EOD
<%= form_tag({:action => 'create'}, {:id => "test" }) %>
<%= text_field_tag "username", "#{value}" %>
<%= submit_tag "Yes", :value => "yes" %>
<%= submit_tag "No", :value => "no" %>
<%= submit_tag "Maybe", :value => "maybe" %>
EOD
form = submit_form "test", :submit_value => "maybe"
assert_response :success
assert_equal value, @controller.params[:username]
assert_equal({"commit"=>"maybe", "username"=>value, "action"=>"create", "controller"=>@controller.controller_name}, @controller.params)
end
end