From 8c5622f0d4d3b5c6bce52b0eb22756a83060b1b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 27 Jun 2009 13:03:07 +0200 Subject: Initial scratch of model generators. --- .../test/generators/controller_generator_test.rb | 2 + railties/test/generators/generators_test_helper.rb | 14 +++-- railties/test/generators/helper_generator_test.rb | 19 ++++++ railties/test/generators/mailer_generator_test.rb | 6 +- railties/test/generators/model_generator_test.rb | 72 ++++++++++++++++++++++ .../test/generators/observer_generator_test.rb | 6 +- 6 files changed, 107 insertions(+), 12 deletions(-) create mode 100644 railties/test/generators/model_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index e10580f40f..d0c963a9ac 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -20,6 +20,8 @@ class ControllerGeneratorTest < GeneratorsTestCase assert_match /The name 'ObjectController' is either already used in your application or reserved/, content end + # No need to spec content since it's already spec'ed on helper generator. + # def test_invokes_helper run_generator assert_file "app/helpers/account_helper.rb" diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 1fcfdaebb9..29ff306551 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -34,15 +34,17 @@ class GeneratorsTestCase < Test::Unit::TestCase end alias :silence :capture - def assert_file(relative, content=nil) + def assert_file(relative, *contents) absolute = File.join(destination_root, relative) assert File.exists?(absolute) - case content - when String - assert_equal content, File.read(absolute) - when Regexp - assert_match content, File.read(absolute) + contents.each do |content| + case content + when String + assert_equal content, File.read(absolute) + when Regexp + assert_match content, File.read(absolute) + end end end diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index 9b2f277f54..b2533e5315 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -33,6 +33,25 @@ class HelperGeneratorTest < GeneratorsTestCase assert_match /The name 'AnotherObjectHelperTest' is either already used in your application or reserved/, content end + def test_namespaced_and_not_namespaced_helpers + run_generator ["products"] + + # We have to require the generated helper to show the problem because + # the test helpers just check for generated files and contents but + # do not actually load them. But they have to be loaded (as in a real environment) + # to make the second generator run fail + require "#{destination_root}/app/helpers/products_helper" + + assert_nothing_raised do + begin + run_generator ["admin::products"] + ensure + # cleanup + Object.send(:remove_const, :ProductsHelper) + end + end + end + protected def run_generator(args=["admin"]) diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index 710847587d..3e5dc60361 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -18,9 +18,9 @@ class MailerGeneratorTest < GeneratorsTestCase def test_invokes_default_test_framework run_generator - assert_file "test/unit/notifier_test.rb" - assert_file "test/fixtures/notifier/foo" - assert_file "test/fixtures/notifier/bar" + assert_file "test/unit/notifier_test.rb", /class NotifierTest < ActionMailer::TestCase/ + assert_file "test/fixtures/notifier/foo", /app\/views\/notifier\/foo/ + assert_file "test/fixtures/notifier/bar", /app\/views\/notifier\/bar/ end def test_invokes_default_template_engine diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb new file mode 100644 index 0000000000..425c4f581a --- /dev/null +++ b/railties/test/generators/model_generator_test.rb @@ -0,0 +1,72 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/active_record/model/model_generator' +require 'generators/rails/model/model_generator' +require 'generators/test_unit/model/model_generator' + +class ModelGeneratorTest < GeneratorsTestCase + + def test_invokes_default_orm + run_generator + assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/ + end + + def test_invokes_default_test_framework + run_generator + assert_file "test/unit/account_test.rb", /class AccountTest < ActiveSupport::TestCase/ + assert_file "test/fixtures/accounts.yml", /name: MyString/, /age: 1/ + end + + def test_fixtures_are_skipped + run_generator ["account", "--skip-fixture"] + assert_no_file "test/fixtures/accounts.yml" + end + + def test_check_class_collision + content = capture(:stderr){ run_generator ["object"] } + assert_match /The name 'Object' is either already used in your application or reserved/, content + end + +# def test_model_skip_migration_skips_migration +# run_generator('model', %w(Product name:string --skip-migration)) + +# assert_generated_model_for :product +# assert_generated_fixtures_for :products +# assert_skipped_migration :create_products +# end + +# def test_model_with_attributes_generates_resources_with_attributes +# run_generator('model', %w(Product name:string supplier_id:integer created_at:timestamp)) + +# assert_generated_model_for :product +# assert_generated_fixtures_for :products +# assert_generated_migration :create_products do |t| +# assert_generated_column t, :name, :string +# assert_generated_column t, :supplier_id, :integer +# assert_generated_column t, :created_at, :timestamp +# end +# end + +# def test_model_with_reference_attributes_generates_belongs_to_associations +# run_generator('model', %w(Product name:string supplier:references)) + +# assert_generated_model_for :product do |body| +# assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" +# end +# end + +# def test_model_with_belongs_to_attributes_generates_belongs_to_associations +# run_generator('model', %w(Product name:string supplier:belongs_to)) + +# assert_generated_model_for :product do |body| +# assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" +# end +# end + + protected + + def run_generator(args=["Account", "name:string", "age:integer"]) + silence(:stdout) { Rails::Generators::ModelGenerator.start args, :root => destination_root } + end + +end diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb index 780c854d85..e2b027028a 100644 --- a/railties/test/generators/observer_generator_test.rb +++ b/railties/test/generators/observer_generator_test.rb @@ -6,19 +6,19 @@ require 'generators/test_unit/observer/observer_generator' class ObserverGeneratorTest < GeneratorsTestCase - def test_observer_skeleton_is_created + def test_invokes_default_orm run_generator assert_file "app/models/account_observer.rb", /class AccountObserver < ActiveRecord::Observer/ end - def test_observer_with_class_path_skeleton_is_created + def test_invokes_default_orm_with_class_path run_generator ["admin/account"] assert_file "app/models/admin/account_observer.rb", /class Admin::AccountObserver < ActiveRecord::Observer/ end def test_invokes_default_test_framework run_generator - assert_file "test/unit/account_observer_test.rb" + assert_file "test/unit/account_observer_test.rb", /class AccountObserverTest < ActiveSupport::TestCase/ end def test_logs_if_the_test_framework_cannot_be_found -- cgit v1.2.3