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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
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_invalid_database_option_raises_an_error
content = capture(:stderr){ run_generator(["-d", "unknown"]) }
assert_match /Invalid value for \-\-database option/, content
end
def test_dispatchers_are_not_added_by_default
run_generator
assert_no_file "config.ru"
assert_no_file "public/dispatch.cgi"
assert_no_file "public/dispatch.fcgi"
end
def test_dispatchers_are_added_if_required
run_generator ["--with-dispatchers"]
assert_file "config.ru"
assert_file "public/dispatch.cgi"
assert_file "public/dispatch.fcgi"
end
def test_config_database_is_added_by_default
run_generator
assert_file "config/database.yml", /sqlite3/
end
def test_config_database_is_not_added_if_skip_activerecord_is_given
run_generator ["--skip-activerecord"]
assert_no_file "config/database.yml"
end
def test_activerecord_is_removed_from_frameworks_if_skip_activerecord_is_given
run_generator ["--skip-activerecord"]
assert_file "config/environment.rb", /config\.frameworks \-= \[ :active_record \]/
end
def test_prototype_and_test_unit_are_added_by_default
run_generator
assert_file "public/javascripts/prototype.js"
assert_file "test"
end
def test_prototype_and_test_unit_are_skipped_if_required
run_generator ["--skip-prototype", "--skip-testunit"]
assert_no_file "public/javascripts/prototype.js"
assert_no_file "test"
end
def test_shebang_is_added_to_files
run_generator ["--ruby", "foo/bar/baz"]
%w(
about
console
dbconsole
destroy
generate
plugin
runner
server
).each { |path| assert_file "script/#{path}", /#!foo\/bar\/baz/ }
end
def test_rails_is_vendorized_if_freeze_is_supplied
generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false)
silence(:stdout){ generator.invoke(:all) }
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
|