From 341fa1cd9515d26805a95583575113539a91be24 Mon Sep 17 00:00:00 2001 From: Jeff Kreeftmeijer Date: Mon, 17 May 2010 22:43:06 +0200 Subject: [PATCH] Rails::Generators::GeneratedAttribute: tests, cleanups and a bugfix [#4631 state:resolved] --- .../lib/rails/generators/generated_attribute.rb | 3 +- railties/lib/rails/generators/test_case.rb | 30 +++++-- .../test/generators/generated_attribute_test.rb | 91 +++++++++++++++++-- 3 files changed, 105 insertions(+), 19 deletions(-) diff --git a/railties/lib/rails/generators/generated_attribute.rb b/railties/lib/rails/generators/generated_attribute.rb index f01934f..3b9fff2 100644 --- a/railties/lib/rails/generators/generated_attribute.rb +++ b/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 @@ module Rails 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 diff --git a/railties/lib/rails/generators/test_case.rb b/railties/lib/rails/generators/test_case.rb index 952400e..0dfb5cd 100644 --- a/railties/lib/rails/generators/test_case.rb +++ b/railties/lib/rails/generators/test_case.rb @@ -189,18 +189,23 @@ module Rails 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 @@ module Rails @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: diff --git a/railties/test/generators/generated_attribute_test.rb b/railties/test/generators/generated_attribute_test.rb index dacb06f..de7e4de 100644 --- a/railties/test/generators/generated_attribute_test.rb +++ b/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 -- 1.6.4.1