aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/generators_test.rb
blob: c7195f753d8ecaa25e6f5a34c964cb92d59cbe08 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
require File.join(File.dirname(__FILE__), 'generators', 'generators_test_helper')
require 'generators/rails/model/model_generator'
require 'mocha'

class GeneratorsTest < GeneratorsTestCase
  def test_invoke_when_generator_is_not_found
    output = capture(:stdout){ Rails::Generators.invoke :unknown }
    assert_equal "Could not find generator unknown.\n", output
  end

  def test_help_when_a_generator_with_required_arguments_is_invoked_without_arguments
    output = capture(:stdout){ Rails::Generators.invoke :model, [] }
    assert_match /Description:/, output
  end

  def test_invoke_with_default_values
    Rails::Generators::ModelGenerator.expects(:start).with(["Account"], {})
    Rails::Generators.invoke :model, ["Account"]
  end

  def test_invoke_with_config_values
    Rails::Generators::ModelGenerator.expects(:start).with(["Account"], :behavior => :skip)
    Rails::Generators.invoke :model, ["Account"], :behavior => :skip
  end

  def test_find_by_namespace_without_base_or_context
    assert_nil Rails::Generators.find_by_namespace(:model)
  end

  def test_find_by_namespace_with_base
    klass = Rails::Generators.find_by_namespace(:model, :rails)
    assert klass
    assert_equal "rails:generators:model", klass.namespace
  end

  def test_find_by_namespace_with_context
    klass = Rails::Generators.find_by_namespace(:test_unit, nil, :model)
    assert klass
    assert_equal "test_unit:generators:model", klass.namespace
  end

  def test_find_by_namespace_add_generators_to_raw_lookups
    klass = Rails::Generators.find_by_namespace("test_unit:model")
    assert klass
    assert_equal "test_unit:generators:model", klass.namespace
  end

  def test_find_by_namespace_lookup_to_the_rails_root_folder
    klass = Rails::Generators.find_by_namespace(:fixjour)
    assert klass
    assert_equal "fixjour", klass.namespace
  end

  def test_find_by_namespace_lookup_to_deep_rails_root_folders
    klass = Rails::Generators.find_by_namespace(:fixjour, :active_record)
    assert klass
    assert_equal "active_record:generators:fixjour", klass.namespace
  end

  def test_find_by_namespace_lookup_traverse_folders
    klass = Rails::Generators.find_by_namespace(:javascripts, :rails)
    assert klass
    assert_equal "rails:generators:javascripts", klass.namespace
  end

  def test_find_by_namespace_lookup_to_vendor_folders
    klass = Rails::Generators.find_by_namespace(:mspec)
    assert klass
    assert_equal "mspec", klass.namespace
  end

  def test_builtin_generators
    assert Rails::Generators.builtin.include? %w(rails model)
  end

  def test_rails_generators_help_with_builtin_information
    output = capture(:stdout){ Rails::Generators.help }
    assert_match /model/, output
    assert_match /scaffold_controller/, output
  end

  def test_rails_generators_with_others_information
    output = capture(:stdout){ Rails::Generators.help }.split("\n").last
    assert_equal "Others: active_record:fixjour, fixjour, mspec, rails:javascripts.", output
  end

  def test_no_color_sets_proper_shell
    Rails::Generators.no_color!
    assert_equal Thor::Shell::Basic, Thor::Base.shell
  ensure
    Thor::Base.shell = Thor::Shell::Color
  end
end