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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
require 'abstract_unit'
require 'generators/generators_test_helper'
require 'generators/rails/app/app_generator'
class ActionsTest < GeneratorsTestCase
def setup
super
@git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git'
@svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk'
end
def test_apply_loads_and_evaluates_a_template
template = <<-TEMPLATE
@foo = "FOO"
TEMPLATE
template.instance_eval "def read; self; end" # Make the string respond to read
generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template)
action :apply, "http://gist.github.com/103208.txt"
assert_equal generator.instance_variable_get("@foo"), "FOO"
end
def test_create_file_should_write_data_to_file_path
action :create_file, 'lib/test_file.rb', 'heres test data'
assert_file 'lib/test_file.rb', 'heres test data'
end
def test_create_file_should_write_block_contents_to_file_path
action(:create_file, 'lib/test_file.rb'){ 'heres block data' }
assert_file 'lib/test_file.rb', 'heres block data'
end
def test_plugin_with_git_option_should_run_plugin_install
generator.expects(:run_ruby_script).once.with("script/plugin install #{@git_plugin_uri}", false)
action :plugin, 'restful-authentication', :git => @git_plugin_uri
end
def test_plugin_with_svn_option_should_run_plugin_install
generator.expects(:run_ruby_script).once.with("script/plugin install #{@svn_plugin_uri}", false)
action :plugin, 'restful-authentication', :svn => @svn_plugin_uri
end
def test_plugin_with_git_option_and_submodule_should_use_git_scm
generator.expects(:run).with("git submodule add #{@git_plugin_uri} vendor/plugins/rest_auth", false)
action :plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true
end
def test_plugin_with_no_options_should_skip_method
generator.expects(:run).never
action :plugin, 'rest_auth', {}
end
def test_gem_should_put_gem_dependency_in_enviroment
run_generator
action :gem, 'will-paginate'
assert_file 'config/environment.rb', /config\.gem 'will\-paginate'/
end
def test_gem_with_options_should_include_options_in_gem_dependency_in_environment
run_generator
action :gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'
regexp = /#{Regexp.escape("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'")}/
assert_file 'config/environment.rb', regexp
end
def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment
run_generator
action :gem, 'rspec', :env => 'test'
assert_file 'config/environments/test.rb', /config\.gem 'rspec'/
end
def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments
run_generator
action :gem, 'quietbacktrace', :env => %w[ development test ]
assert_file 'config/environments/development.rb', /config\.gem 'quietbacktrace'/
assert_file 'config/environments/test.rb', /config\.gem 'quietbacktrace'/
end
def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly
run_generator
action :gem, 'mislav-will-paginate', :lib => false
assert_file 'config/environment.rb', /config\.gem 'mislav\-will\-paginate'\, :lib => false/
end
def test_environment_should_include_data_in_environment_initializer_block
run_generator
load_paths = 'config.load_paths += %w["#{RAILS_ROOT}/app/extras"]'
action :environment, load_paths
assert_file 'config/environment.rb', /#{Regexp.escape(load_paths)}/
end
def test_environment_with_block_should_include_block_contents_in_environment_initializer_block
run_generator
action :environment do
'# This wont be added'
'# This will be added'
end
assert_file 'config/environment.rb', /# This will be added/
end
def test_git_with_symbol_should_run_command_using_git_scm
generator.expects(:run).once.with('git init')
action :git, :init
end
def test_git_with_hash_should_run_each_command_using_git_scm
generator.expects(:run).times(2)
action :git, :rm => 'README', :add => '.'
end
def test_vendor_should_write_data_to_file_in_vendor
action :vendor, 'vendor_file.rb', '# vendor data'
assert_file 'vendor/vendor_file.rb', '# vendor data'
end
def test_lib_should_write_data_to_file_in_lib
action :lib, 'my_library.rb', 'class MyLibrary'
assert_file 'lib/my_library.rb', 'class MyLibrary'
end
def test_rakefile_should_write_date_to_file_in_lib_tasks
action :rakefile, 'myapp.rake', 'task :run => [:environment]'
assert_file 'lib/tasks/myapp.rake', 'task :run => [:environment]'
end
def test_initializer_should_write_date_to_file_in_config_initializers
action :initializer, 'constants.rb', 'MY_CONSTANT = 42'
assert_file 'config/initializers/constants.rb', 'MY_CONSTANT = 42'
end
def test_generate_should_run_script_generate_with_argument_and_options
generator.expects(:run_ruby_script).once.with('script/generate model MyModel', false)
action :generate, 'model', 'MyModel'
end
def test_rake_should_run_rake_command_with_development_env
generator.expects(:run).once.with('rake log:clear RAILS_ENV=development', false)
action :rake, 'log:clear'
end
def test_rake_with_env_option_should_run_rake_command_in_env
generator.expects(:run).once.with('rake log:clear RAILS_ENV=production', false)
action :rake, 'log:clear', :env => 'production'
end
def test_rake_with_sudo_option_should_run_rake_command_with_sudo
generator.expects(:run).once.with('sudo rake log:clear RAILS_ENV=development', false)
action :rake, 'log:clear', :sudo => true
end
def test_capify_should_run_the_capify_command
generator.expects(:run).once.with('capify .', false)
action :capify!
end
def test_freeze_should_freeze_rails_edge
generator.expects(:run).once.with('rake rails:freeze:edge', false)
action :freeze!
end
def test_route_should_add_data_to_the_routes_block_in_config_routes
run_generator
route_command = "map.route '/login', :controller => 'sessions', :action => 'new'"
action :route, route_command
assert_file 'config/routes.rb', /#{Regexp.escape(route_command)}/
end
protected
def run_generator
silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root] }
end
def generator(config={})
@generator ||= Rails::Generators::Base.new([], {}, { :root => destination_root }.merge!(config))
end
def action(*args, &block)
silence(:stdout){ generator.send(*args, &block) }
end
end
|