From 8c5622f0d4d3b5c6bce52b0eb22756a83060b1b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Valim?= <jose.valim@gmail.com>
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