2011-02-09 21:03:53 +00:00
require 'spec_helper'
describe Cocoon do
class TestClass < ActionView :: Base
end
subject { TestClass . new }
it { should respond_to ( :link_to_add_association ) }
it { should respond_to ( :link_to_remove_association ) }
2011-03-06 21:40:37 +00:00
context " link_to_add_association " do
before ( :each ) do
@tester = TestClass . new
@post = Post . new
@form_obj = stub ( :object = > @post )
2011-03-15 14:41:17 +00:00
@tester . stub ( :render_association ) . and_return ( 'form<tag>' )
2011-03-06 21:40:37 +00:00
end
2011-03-07 21:02:21 +00:00
context " without a block " do
2012-03-12 22:53:52 +00:00
it " accepts a name " do
2011-03-07 21:02:21 +00:00
result = @tester . link_to_add_association ( 'add something' , @form_obj , :comments )
2011-06-17 23:40:35 +00:00
result . to_s . should == '<a href="#" class="add_fields" data-association="comment" data-associations="comments" data-template="form<tag>">add something</a>'
2011-03-07 21:02:21 +00:00
end
2012-03-12 22:53:52 +00:00
it " accepts html options and pass them to link_to " do
2011-03-07 21:02:21 +00:00
result = @tester . link_to_add_association ( 'add something' , @form_obj , :comments , { :class = > 'something silly' } )
2011-06-17 23:40:35 +00:00
result . to_s . should == '<a href="#" class="something silly add_fields" data-association="comment" data-associations="comments" data-template="form<tag>">add something</a>'
2011-03-07 21:02:21 +00:00
end
end
context " with a block " do
it " the block gives the link text " do
result = @tester . link_to_add_association ( @form_obj , :comments ) do
" some long name "
end
2011-06-17 23:40:35 +00:00
result . to_s . should == '<a href="#" class="add_fields" data-association="comment" data-associations="comments" data-template="form<tag>">some long name</a>'
2011-03-07 21:02:21 +00:00
end
2012-03-12 22:53:52 +00:00
it " accepts html options and pass them to link_to " do
2011-03-07 21:02:21 +00:00
result = @tester . link_to_add_association ( @form_obj , :comments , { :class = > 'floppy disk' } ) do
" some long name "
end
2011-06-17 23:40:35 +00:00
result . to_s . should == '<a href="#" class="floppy disk add_fields" data-association="comment" data-associations="comments" data-template="form<tag>">some long name</a>'
2011-04-24 12:36:50 +00:00
end
end
context " with an irregular plural " do
2012-03-12 22:53:52 +00:00
it " uses the correct plural " do
2011-04-24 12:36:50 +00:00
result = @tester . link_to_add_association ( 'add something' , @form_obj , :people )
2011-06-17 23:40:35 +00:00
result . to_s . should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tag>">add something</a>'
2011-03-07 21:02:21 +00:00
end
2011-10-21 23:42:07 +00:00
end
2012-04-06 22:35:57 +00:00
context " when using aliased association and class-name " do
it " uses the correct name " do
result = @tester . link_to_add_association ( 'add something' , @form_obj , :admin_comments )
result . to_s . should == '<a href="#" class="add_fields" data-association="admin_comment" data-associations="admin_comments" data-template="form<tag>">add something</a>'
end
end
2011-10-21 23:42:07 +00:00
it " tttt " do
@post . class . reflect_on_association ( :people ) . klass . new . should be_a ( Person )
end
context " with extra render-options for rendering the child relation " do
2012-03-12 22:53:52 +00:00
it " uses the correct plural " do
2012-03-12 19:30:11 +00:00
@tester . should_receive ( :render_association ) . with ( :people , @form_obj , anything , { :wrapper = > 'inline' } , nil )
2011-10-21 23:42:07 +00:00
result = @tester . link_to_add_association ( 'add something' , @form_obj , :people , :render_options = > { :wrapper = > 'inline' } )
result . to_s . should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tag>">add something</a>'
end
end
2012-04-07 00:14:26 +00:00
context " with extra render-options to pass locals to the partial " do
it " uses the correct plural " do
@tester . unstub ( :render_association )
@form_obj . should_receive ( :fields_for ) { | association , new_object , options_hash , & block | block . call }
@tester . should_receive ( :render ) . with ( " person_fields " , { :f = > nil , :dynamic = > true , :alfred = > " Judoka " } ) . and_return ( " partiallll " )
result = @tester . link_to_add_association ( 'add something' , @form_obj , :people , :render_options = > { :wrapper = > 'inline' , :locals = > { :alfred = > 'Judoka' } } )
result . to_s . should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="partiallll">add something</a>'
end
end
2011-10-21 23:42:07 +00:00
context " when using formtastic " do
before ( :each ) do
@tester . unstub ( :render_association )
@form_obj . stub ( :semantic_fields_for ) . and_return ( 'form<tagzzz>' )
end
it " calls semantic_fields_for and not fields_for " do
@form_obj . should_receive ( :semantic_fields_for )
@form_obj . should_receive ( :fields_for ) . never
result = @tester . link_to_add_association ( 'add something' , @form_obj , :people )
result . to_s . should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tagzzz>">add something</a>'
2011-03-07 21:02:21 +00:00
2011-10-21 23:42:07 +00:00
end
end
context " when using simple_form " do
before ( :each ) do
@tester . unstub ( :render_association )
@form_obj . stub ( :simple_fields_for ) . and_return ( 'form<tagxxx>' )
end
it " responds_to :simple_fields_for " do
@form_obj . should respond_to ( :simple_fields_for )
end
it " calls simple_fields_for and not fields_for " do
@form_obj . should_receive ( :simple_fields_for )
@form_obj . should_receive ( :fields_for ) . never
result = @tester . link_to_add_association ( 'add something' , @form_obj , :people )
result . to_s . should == '<a href="#" class="add_fields" data-association="person" data-associations="people" data-template="form<tagxxx>">add something</a>'
end
2011-03-07 21:02:21 +00:00
end
end
context " link_to_remove_association " do
before ( :each ) do
@tester = TestClass . new
@post = Post . new
@form_obj = stub ( :object = > @post , :object_name = > @post . class . name )
end
2012-03-12 22:53:52 +00:00
context " without a block " do
it " accepts a name " do
2011-03-07 21:02:21 +00:00
result = @tester . link_to_remove_association ( 'remove something' , @form_obj )
result . to_s . should == " <input id= \" Post__destroy \" name= \" Post[_destroy] \" type= \" hidden \" /><a href= \" # \" class= \" remove_fields dynamic \" >remove something</a> "
end
2012-03-12 22:53:52 +00:00
it " accepts html options and pass them to link_to " do
2011-03-07 21:02:21 +00:00
result = @tester . link_to_remove_association ( 'remove something' , @form_obj , { :class = > 'add_some_class' , :'data-something' = > 'bla' } )
result . to_s . should == " <input id= \" Post__destroy \" name= \" Post[_destroy] \" type= \" hidden \" /><a href= \" # \" class= \" add_some_class remove_fields dynamic \" data-something= \" bla \" >remove something</a> "
end
2011-03-06 21:40:37 +00:00
end
2011-03-07 21:02:21 +00:00
context " with a block " do
it " the block gives the name " do
result = @tester . link_to_remove_association ( @form_obj ) do
" remove some long name "
end
result . to_s . should == " <input id= \" Post__destroy \" name= \" Post[_destroy] \" type= \" hidden \" /><a href= \" # \" class= \" remove_fields dynamic \" >remove some long name</a> "
end
2012-03-12 22:53:52 +00:00
it " accepts html options and pass them to link_to " do
2011-03-07 21:02:21 +00:00
result = @tester . link_to_remove_association ( @form_obj , { :class = > 'add_some_class' , :'data-something' = > 'bla' } ) do
" remove some long name "
end
result . to_s . should == " <input id= \" Post__destroy \" name= \" Post[_destroy] \" type= \" hidden \" /><a href= \" # \" class= \" add_some_class remove_fields dynamic \" data-something= \" bla \" >remove some long name</a> "
2011-03-06 21:40:37 +00:00
end
end
2012-03-12 19:30:11 +00:00
context " association with conditions " do
it " should create correct association " do
result = @tester . create_object ( @form_obj , :admin_comments )
result . author . should == " Admin "
end
end
2012-03-12 22:53:52 +00:00
context " setup_partial " do
it " generates the default partial name if no partial given " do
2012-03-12 19:30:11 +00:00
result = @tester . setup_partial ( nil , :admin_comments )
result . should == " admin_comment_fields "
2012-03-12 22:53:52 +00:00
end
it " uses the given partial name " do
2012-03-12 19:30:11 +00:00
result = @tester . setup_partial ( " comment_fields " , :admin_comments )
result . should == " comment_fields "
end
end
2011-03-06 21:40:37 +00:00
end
2011-03-15 14:41:17 +00:00
end