From 9047ca019afaba5da228c7e0dc1a11cbb5e2e93b Mon Sep 17 00:00:00 2001
From: virusman <virusman@virusman.ru>
Date: Mon, 21 Jan 2013 16:52:10 +0400
Subject: Added AR integration tests for form helpers

---
 .../activerecord/form_helper_activerecord_test.rb  | 91 ++++++++++++++++++++++
 actionpack/test/fixtures/developer.rb              |  1 +
 2 files changed, 92 insertions(+)
 create mode 100644 actionpack/test/activerecord/form_helper_activerecord_test.rb

(limited to 'actionpack')

diff --git a/actionpack/test/activerecord/form_helper_activerecord_test.rb b/actionpack/test/activerecord/form_helper_activerecord_test.rb
new file mode 100644
index 0000000000..2e302c65a7
--- /dev/null
+++ b/actionpack/test/activerecord/form_helper_activerecord_test.rb
@@ -0,0 +1,91 @@
+require 'active_record_unit'
+require 'fixtures/project'
+require 'fixtures/developer'
+
+class FormHelperActiveRecordTest < ActionView::TestCase
+  tests ActionView::Helpers::FormHelper
+
+  def form_for(*)
+    @output_buffer = super
+  end
+
+  def setup
+    @developer = Developer.new
+    @developer.id   = 123
+    @developer.name = "developer #123"
+
+    @project = Project.new
+    @project.id   = 321
+    @project.name = "project #321"
+    @project.save
+
+    @developer.projects << @project
+    @developer.save
+  end
+
+  def teardown
+    Project.delete(321)
+    Developer.delete(123)
+  end
+
+  Routes = ActionDispatch::Routing::RouteSet.new
+  Routes.draw do
+    resources :developers do
+      resources :projects
+    end
+  end
+
+  def _routes
+    Routes
+  end
+
+  include Routes.url_helpers
+
+  def test_nested_fields_for_with_child_index_option_override_on_a_nested_attributes_collection_association
+    form_for(@developer) do |f|
+      concat f.fields_for(:projects, @developer.projects.first, :child_index => 'abc') { |cf|
+        concat cf.text_field(:name)
+      }
+    end
+
+    expected = whole_form('/developers/123', 'edit_developer_123', 'edit_developer', :method => 'patch') do
+      '<input id="developer_projects_attributes_abc_name" name="developer[projects_attributes][abc][name]" type="text" value="project #321" />' +
+          '<input id="developer_projects_attributes_abc_id" name="developer[projects_attributes][abc][id]" type="hidden" value="321" />'
+    end
+
+    assert_dom_equal expected, output_buffer
+  end
+
+  protected
+
+  def hidden_fields(method = nil)
+    txt =  %{<div style="margin:0;padding:0;display:inline">}
+    txt << %{<input name="utf8" type="hidden" value="&#x2713;" />}
+    if method && !%w(get post).include?(method.to_s)
+      txt << %{<input name="_method" type="hidden" value="#{method}" />}
+    end
+    txt << %{</div>}
+  end
+
+  def form_text(action = "/", id = nil, html_class = nil, remote = nil, multipart = nil, method = nil)
+    txt =  %{<form accept-charset="UTF-8" action="#{action}"}
+    txt << %{ enctype="multipart/form-data"} if multipart
+    txt << %{ data-remote="true"} if remote
+    txt << %{ class="#{html_class}"} if html_class
+    txt << %{ id="#{id}"} if id
+    method = method.to_s == "get" ? "get" : "post"
+    txt << %{ method="#{method}">}
+  end
+
+  def whole_form(action = "/", id = nil, html_class = nil, options = nil)
+    contents = block_given? ? yield : ""
+
+    if options.is_a?(Hash)
+      method, remote, multipart = options.values_at(:method, :remote, :multipart)
+    else
+      method = options
+    end
+
+    form_text(action, id, html_class, remote, multipart, method) + hidden_fields(method) + contents + "</form>"
+  end
+end
\ No newline at end of file
diff --git a/actionpack/test/fixtures/developer.rb b/actionpack/test/fixtures/developer.rb
index dd14548fac..4941463015 100644
--- a/actionpack/test/fixtures/developer.rb
+++ b/actionpack/test/fixtures/developer.rb
@@ -2,6 +2,7 @@ class Developer < ActiveRecord::Base
   has_and_belongs_to_many :projects
   has_many :replies
   has_many :topics, :through => :replies
+  accepts_nested_attributes_for :projects
 end
 
 class DeVeLoPeR < ActiveRecord::Base
-- 
cgit v1.2.3