spec/test_helper.rb in formtastic-0.9.0 vs spec/test_helper.rb in formtastic-0.9.1
- old
+ new
@@ -23,5 +23,137 @@
Spec::Runner.configure do |config|
config.include(RspecHpricotMatchers)
end
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
+
+require 'formtastic'
+
+module FormtasticSpecHelper
+ include ActionView::Helpers::FormHelper
+ include ActionView::Helpers::FormTagHelper
+ include ActionView::Helpers::FormOptionsHelper
+ include ActionView::Helpers::UrlHelper
+ include ActionView::Helpers::TagHelper
+ include ActionView::Helpers::TextHelper
+ include ActionView::Helpers::ActiveRecordHelper
+ include ActionView::Helpers::RecordIdentificationHelper
+ include ActionView::Helpers::DateHelper
+ include ActionView::Helpers::CaptureHelper
+ include ActiveSupport
+ include ActionController::PolymorphicRoutes
+
+ include Formtastic::SemanticFormHelper
+
+ def default_input_type(column_type, column_name = :generic_column_name)
+ @new_post.stub!(column_name)
+ @new_post.stub!(:column_for_attribute).and_return(mock('column', :type => column_type)) unless column_type.nil?
+
+ semantic_form_for(@new_post) do |builder|
+ @default_type = builder.send(:default_input_type, column_name)
+ end
+
+ return @default_type
+ end
+
+ class ::Post
+ def id
+ end
+ end
+ class ::Author
+ end
+
+ def mock_everything
+
+ # Resource-oriented styles like form_for(@post) will expect a path method for the object,
+ # so we're defining some here.
+ def post_path(o); "/posts/1"; end
+ def posts_path; "/posts"; end
+ def new_post_path; "/posts/new"; end
+
+ def author_path(o); "/authors/1"; end
+ def authors_path; "/authors"; end
+ def new_author_path; "/authors/new"; end
+
+ @fred = mock('user')
+ @fred.stub!(:class).and_return(::Author)
+ @fred.stub!(:to_label).and_return('Fred Smith')
+ @fred.stub!(:login).and_return('fred_smith')
+ @fred.stub!(:id).and_return(37)
+ @fred.stub!(:new_record?).and_return(false)
+ @fred.stub!(:errors).and_return(mock('errors', :[] => nil))
+
+ @bob = mock('user')
+ @bob.stub!(:class).and_return(::Author)
+ @bob.stub!(:to_label).and_return('Bob Rock')
+ @bob.stub!(:login).and_return('bob')
+ @bob.stub!(:id).and_return(42)
+ @bob.stub!(:posts).and_return([])
+ @bob.stub!(:post_ids).and_return([])
+ @bob.stub!(:new_record?).and_return(false)
+ @bob.stub!(:errors).and_return(mock('errors', :[] => nil))
+
+ ::Author.stub!(:find).and_return([@fred, @bob])
+ ::Author.stub!(:human_attribute_name).and_return { |column_name| column_name.humanize }
+ ::Author.stub!(:human_name).and_return('::Author')
+ ::Author.stub!(:reflect_on_validations_for).and_return([])
+ ::Author.stub!(:reflect_on_association).and_return { |column_name| mock('reflection', :options => {}, :klass => Post, :macro => :has_many) if column_name == :posts }
+
+ # Sometimes we need a mock @post object and some Authors for belongs_to
+ @new_post = mock('post')
+ @new_post.stub!(:class).and_return(::Post)
+ @new_post.stub!(:id).and_return(nil)
+ @new_post.stub!(:new_record?).and_return(true)
+ @new_post.stub!(:errors).and_return(mock('errors', :[] => nil))
+ @new_post.stub!(:author).and_return(nil)
+
+ @freds_post = mock('post')
+ @freds_post.stub!(:class).and_return(::Post)
+ @freds_post.stub!(:to_label).and_return('Fred Smith')
+ @freds_post.stub!(:id).and_return(19)
+ @freds_post.stub!(:author).and_return(@fred)
+ @freds_post.stub!(:author_id).and_return(@fred.id)
+ @freds_post.stub!(:authors).and_return([@fred])
+ @freds_post.stub!(:author_ids).and_return([@fred.id])
+ @freds_post.stub!(:new_record?).and_return(false)
+ @freds_post.stub!(:errors).and_return(mock('errors', :[] => nil))
+ @fred.stub!(:posts).and_return([@freds_post])
+ @fred.stub!(:post_ids).and_return([@freds_post.id])
+
+ ::Post.stub!(:human_attribute_name).and_return { |column_name| column_name.humanize }
+ ::Post.stub!(:human_name).and_return('Post')
+ ::Post.stub!(:reflect_on_all_validations).and_return([])
+ ::Post.stub!(:reflect_on_validations_for).and_return([])
+ ::Post.stub!(:reflect_on_association).and_return do |column_name|
+ case column_name
+ when :author, :author_status
+ mock('reflection', :options => {}, :klass => ::Author, :macro => :belongs_to)
+ when :authors
+ mock('reflection', :options => {}, :klass => ::Author, :macro => :has_and_belongs_to_many)
+ end
+ end
+ ::Post.stub!(:find).and_return([@freds_post])
+
+ @new_post.stub!(:title)
+ @new_post.stub!(:body)
+ @new_post.stub!(:published)
+ @new_post.stub!(:column_for_attribute).with(:meta_description).and_return(mock('column', :type => :string, :limit => 255))
+ @new_post.stub!(:column_for_attribute).with(:title).and_return(mock('column', :type => :string, :limit => 255))
+ @new_post.stub!(:column_for_attribute).with(:body).and_return(mock('column', :type => :text))
+ @new_post.stub!(:column_for_attribute).with(:published).and_return(mock('column', :type => :boolean))
+ end
+
+ def self.included(base)
+ base.class_eval do
+
+ attr_accessor :output_buffer
+
+ def protect_against_forgery?
+ false
+ end
+
+ end
+ end
+
+end
+
+::ActiveSupport::Deprecation.silenced = true