Permalink
Browse files

Rails::Generators::GeneratedAttribute: tests, cleanups and a bugfix [#…

…4631 state:resolved]

Signed-off-by: José Valim <jose.valim@gmail.com>
  • Loading branch information...
1 parent 566967e commit d93b45e8d32e3c4917c6b16bcea3a694800d2c49 @jeffkreeftmeijer jeffkreeftmeijer committed with josevalim May 17, 2010
View
3 railties/lib/rails/generators/generated_attribute.rb
@@ -1,3 +1,5 @@
+require 'active_support/time'
+
module Rails
module Generators
class GeneratedAttribute
@@ -13,7 +15,6 @@ def field_type
when :time then :time_select
when :datetime, :timestamp then :datetime_select
when :date then :date_select
- when :string then :text_field
when :text then :text_area
when :boolean then :check_box
else
View
30 railties/lib/rails/generators/test_case.rb
@@ -189,18 +189,23 @@ def assert_instance_method(method, content)
end
alias :assert_method :assert_instance_method
- # Asserts the given field name gets translated to an attribute type
- # properly.
+ # Asserts the given attribute type gets translated to a field type
+ # properly:
#
# assert_field_type :date, :date_select
#
- def assert_field_type(name, attribute_type)
- assert_equal(
- Rails::Generators::GeneratedAttribute.new('test', name.to_s).field_type,
- attribute_type
- )
+ def assert_field_type(attribute_type, field_type)
+ assert_equal(field_type, create_generated_attribute(attribute_type).field_type)
end
-
+
+ # Asserts the given attribute type gets a proper default value:
+ #
+ # assert_field_type :string, "MyString"
+ #
+ def assert_field_default_value(attribute_type, value)
+ assert_equal(value, create_generated_attribute(attribute_type).default)
+ end
+
# Runs the generator configured for this class. The first argument is an array like
# command line arguments:
#
@@ -226,6 +231,15 @@ def generator(args=self.default_arguments, options={}, config={})
@generator ||= self.generator_class.new(args, options, config.reverse_merge(:destination_root => destination_root))
end
+ # Create a Rails::Generators::GeneratedAttribute by supplying the
+ # attribute type and, optionally, the attribute name:
+ #
+ # create_generated_attribute(:string, 'name')
+ #
+ def create_generated_attribute(attribute_type, name = 'test')
+ Rails::Generators::GeneratedAttribute.new(name, attribute_type.to_s)
+ end
+
protected
def destination_root_is_set? #:nodoc:
View
91 railties/test/generators/generated_attribute_test.rb
@@ -5,36 +5,107 @@ class GeneratedAttributeTest < Rails::Generators::TestCase
include GeneratorsTestHelper
def test_field_type_returns_text_field
- %w(integer float decimal string).each do |name|
- assert_field_type name, :text_field
+ %w(integer float decimal string).each do |attribute_type|
+ assert_field_type attribute_type, :text_field
end
end
def test_field_type_returns_datetime_select
- %w(datetime timestamp).each do |name|
- assert_field_type name, :datetime_select
+ %w(datetime timestamp).each do |attribute_type|
+ assert_field_type attribute_type, :datetime_select
end
end
def test_field_type_returns_time_select
- assert_field_type 'time', :time_select
+ assert_field_type :time, :time_select
end
def test_field_type_returns_date_select
- assert_field_type 'date', :date_select
+ assert_field_type :date, :date_select
end
def test_field_type_returns_text_area
- assert_field_type 'text', :text_area
+ assert_field_type :text, :text_area
end
def test_field_type_returns_check_box
- assert_field_type 'boolean', :check_box
+ assert_field_type :boolean, :check_box
end
def test_field_type_with_unknown_type_returns_text_field
- %w(foo bar baz).each do |name|
- assert_field_type name, :text_field
+ %w(foo bar baz).each do |attribute_type|
+ assert_field_type attribute_type, :text_field
+ end
+ end
+
+ def test_default_value_is_integer
+ assert_field_default_value :integer, 1
+ end
+
+ def test_default_value_is_float
+ assert_field_default_value :float, 1.5
+ end
+
+ def test_default_value_is_decimal
+ assert_field_default_value :decimal, '9.99'
+ end
+
+ def test_default_value_is_datetime
+ %w(datetime timestamp time).each do |attribute_type|
+ assert_field_default_value attribute_type, Time.now.to_s(:db)
+ end
+ end
+
+ def test_default_value_is_date
+ assert_field_default_value :date, Date.today.to_s(:db)
+ end
+
+ def test_default_value_is_string
+ assert_field_default_value :string, 'MyString'
+ end
+
+ def test_default_value_is_text
+ assert_field_default_value :text, 'MyText'
+ end
+
+ def test_default_value_is_boolean
+ assert_field_default_value :boolean, false
+ end
+
+ def test_default_value_is_nil
+ %w(references belongs_to).each do |attribute_type|
+ assert_field_default_value attribute_type, nil
+ end
+ end
+
+ def test_default_value_is_empty_string
+ %w(foo bar baz).each do |attribute_type|
+ assert_field_default_value attribute_type, ''
+ end
+ end
+
+ def test_human_name
+ assert_equal(
+ 'Full name',
+ create_generated_attribute(:string, 'full_name').human_name
+ )
+ end
+
+ def test_reference_is_true
+ %w(references belongs_to).each do |attribute_type|
+ assert_equal(
+ true,
+ create_generated_attribute(attribute_type).reference?
+ )
+ end
+ end
+
+ def test_reference_is_false
+ %w(foo bar baz).each do |attribute_type|
+ assert_equal(
+ false,
+ create_generated_attribute(attribute_type).reference?
+ )
end
end
end

0 comments on commit d93b45e

Please sign in to comment.