aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/generator/app_test.rb
blob: ab0554d0cfd48faea74070e1061c8be213c95398 (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
require 'abstract_unit'
require 'generator/generator_test_helper'

class AppTest < GeneratorTestCase

  def test_application_skeleton_is_created
    run_generator

    %w(
      app/controllers
      app/helpers
      app/models
      app/views/layouts
      config/environments
      config/initializers
      config/locales
      db
      doc
      lib
      lib/tasks
      log
      public/images
      public/javascripts
      public/stylesheets
      script/performance
      test/fixtures
      test/functional
      test/integration
      test/performance
      test/unit
      vendor
      vendor/plugins
      tmp/sessions
      tmp/sockets
      tmp/cache
      tmp/pids
    ).each{ |path| assert_file path }
  end

  def test_template_raises_an_error_with_invalid_path
    content = capture(:stderr){ run_generator(["-m", "non/existant/path"]) }
    assert_match /The template \[.*\] could not be loaded/, content
    assert_match /non\/existant\/path/, content
  end

  def test_template_is_executed_when_supplied
    path = "http://gist.github.com/103208.txt"
    template = %{ say "It works!" }
    template.instance_eval "def read; self; end" # Make the string respond to read

    generator(:template => path, :database => "sqlite3").expects(:open).with(path).returns(template)
    assert_match /It works!/, silence(:stdout){ generator.invoke(:all) }
  end

  protected

    def run_generator(args=[])
      silence(:stdout) { Rails::Generators::App.start [destination_root].concat(args) }
    end

    def generator(options={})
      @generator ||= Rails::Generators::App.new([destination_root], options, :root => destination_root)
    end

end