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(/]*>/)[0] end def hidden_method_tag(attrs="") /]*>/ end end