require 'test_helper'
class ExpressFormTest < ActiveSupport::TestCase
def simplest_form
arbre(foo: resource) {
express_form(:foo) {
submit value: 'Save it!'
}
}
end
def helpers
mock_action_view do
def foos_path
'/foos'
end
end
end
def form_with_method(method)
arbre(foo: resource) {
express_form(:foo, method: method) {
submit value: 'Save it!'
}
}
end
test "simplest form renders" do
assert simplest_form
end
test "simplest form will have the proper id" do
assert_match(/
/, simplest_form.gsub("\n",''))
end
test "simplest form contains rails form helpers" do
compiled_src = simplest_form
assert_match("input name=\"utf8\" type=\"hidden\"", compiled_src)
assert_match("name=\"authenticity_token\" value=\"AUTH_TOKEN\"", compiled_src)
assert_match(//, compiled_src.gsub("\n",''))
end
# TODO Still failing
# test "simplest_form contains submit" do
# assert_match '', simplest_form
# end
test "simplest_form uses form_action for the action" do
assert_includes form_open_tag_attrs(simplest_form), 'action="/foos"'
end
test "express_form default method is POST" do
assert_includes form_open_tag_attrs(simplest_form), 'method="POST"'
end
test "express_form generates correct markup when method :get is passed in" do
get_form = form_with_method(:get)
assert_includes form_open_tag_attrs(get_form), 'method="GET"'
refute_match hidden_method_tag, get_form
end
test "express_form generates correct markup when method :post is passed in" do
post_form = form_with_method(:post)
assert_includes form_open_tag_attrs(post_form), 'method="POST"'
refute_match hidden_method_tag, post_form
end
test "express_form generates correct markup when method :put is passed in" do
put_form = form_with_method(:put)
assert_includes form_open_tag_attrs(put_form), 'method="POST"'
assert_match hidden_method_tag('value="patch"'), put_form
end
test "express_form generates correct markup when method :patch is passed in" do
patch_form = form_with_method(:patch)
assert_includes form_open_tag_attrs(patch_form), 'method="POST"'
assert_match hidden_method_tag('value="patch"'), patch_form
end
test "express_form generates correct markup when method :delete is passed in" do
delete_form = form_with_method(:delete)
assert_includes form_open_tag_attrs(delete_form), 'method="POST"'
assert_match hidden_method_tag('value="delete"'), delete_form
end
private
def form_open_tag_attrs(form)
form.match(/