ghart-nifty-generators 0.3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. data/CHANGELOG +105 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +107 -0
  4. data/Rakefile +15 -0
  5. data/TODO +7 -0
  6. data/lib/nifty_generators.rb +3 -0
  7. data/nifty-generators.gemspec +31 -0
  8. data/rails_generators/nifty_admin_scaffold/USAGE +51 -0
  9. data/rails_generators/nifty_admin_scaffold/lib/insert_commands.rb +31 -0
  10. data/rails_generators/nifty_admin_scaffold/nifty_admin_scaffold_generator.rb +238 -0
  11. data/rails_generators/nifty_admin_scaffold/templates/actions/create.rb +8 -0
  12. data/rails_generators/nifty_admin_scaffold/templates/actions/destroy.rb +5 -0
  13. data/rails_generators/nifty_admin_scaffold/templates/actions/edit.rb +3 -0
  14. data/rails_generators/nifty_admin_scaffold/templates/actions/index.rb +3 -0
  15. data/rails_generators/nifty_admin_scaffold/templates/actions/new.rb +3 -0
  16. data/rails_generators/nifty_admin_scaffold/templates/actions/show.rb +3 -0
  17. data/rails_generators/nifty_admin_scaffold/templates/actions/update.rb +8 -0
  18. data/rails_generators/nifty_admin_scaffold/templates/controller.rb +5 -0
  19. data/rails_generators/nifty_admin_scaffold/templates/fixtures.yml +9 -0
  20. data/rails_generators/nifty_admin_scaffold/templates/helper.rb +2 -0
  21. data/rails_generators/nifty_admin_scaffold/templates/migration.rb +16 -0
  22. data/rails_generators/nifty_admin_scaffold/templates/model.rb +3 -0
  23. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  24. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  25. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  26. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  27. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  28. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  29. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  30. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/controller.rb +8 -0
  31. data/rails_generators/nifty_admin_scaffold/templates/tests/rspec/model.rb +7 -0
  32. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  33. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  34. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  35. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  36. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  37. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  38. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  39. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/controller.rb +5 -0
  40. data/rails_generators/nifty_admin_scaffold/templates/tests/shoulda/model.rb +7 -0
  41. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  42. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  43. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  44. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  45. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  46. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  47. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  48. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/controller.rb +5 -0
  49. data/rails_generators/nifty_admin_scaffold/templates/tests/testunit/model.rb +7 -0
  50. data/rails_generators/nifty_admin_scaffold/templates/views/erb/_form.html.erb +10 -0
  51. data/rails_generators/nifty_admin_scaffold/templates/views/erb/edit.html.erb +3 -0
  52. data/rails_generators/nifty_admin_scaffold/templates/views/erb/index.html.erb +29 -0
  53. data/rails_generators/nifty_admin_scaffold/templates/views/erb/new.html.erb +3 -0
  54. data/rails_generators/nifty_admin_scaffold/templates/views/erb/show.html.erb +14 -0
  55. data/rails_generators/nifty_admin_scaffold/templates/views/haml/_form.html.haml +10 -0
  56. data/rails_generators/nifty_admin_scaffold/templates/views/haml/edit.html.haml +14 -0
  57. data/rails_generators/nifty_admin_scaffold/templates/views/haml/index.html.haml +26 -0
  58. data/rails_generators/nifty_admin_scaffold/templates/views/haml/new.html.haml +7 -0
  59. data/rails_generators/nifty_admin_scaffold/templates/views/haml/show.html.haml +12 -0
  60. data/rails_generators/nifty_authentication/USAGE +50 -0
  61. data/rails_generators/nifty_authentication/lib/insert_commands.rb +74 -0
  62. data/rails_generators/nifty_authentication/nifty_authentication_generator.rb +128 -0
  63. data/rails_generators/nifty_authentication/templates/authentication.rb +61 -0
  64. data/rails_generators/nifty_authentication/templates/authlogic_session.rb +2 -0
  65. data/rails_generators/nifty_authentication/templates/fixtures.yml +24 -0
  66. data/rails_generators/nifty_authentication/templates/migration.rb +20 -0
  67. data/rails_generators/nifty_authentication/templates/sessions_controller.rb +45 -0
  68. data/rails_generators/nifty_authentication/templates/sessions_helper.rb +2 -0
  69. data/rails_generators/nifty_authentication/templates/tests/rspec/sessions_controller.rb +39 -0
  70. data/rails_generators/nifty_authentication/templates/tests/rspec/user.rb +83 -0
  71. data/rails_generators/nifty_authentication/templates/tests/rspec/users_controller.rb +26 -0
  72. data/rails_generators/nifty_authentication/templates/tests/shoulda/sessions_controller.rb +40 -0
  73. data/rails_generators/nifty_authentication/templates/tests/shoulda/user.rb +85 -0
  74. data/rails_generators/nifty_authentication/templates/tests/shoulda/users_controller.rb +27 -0
  75. data/rails_generators/nifty_authentication/templates/tests/testunit/sessions_controller.rb +36 -0
  76. data/rails_generators/nifty_authentication/templates/tests/testunit/user.rb +88 -0
  77. data/rails_generators/nifty_authentication/templates/tests/testunit/users_controller.rb +23 -0
  78. data/rails_generators/nifty_authentication/templates/user.rb +42 -0
  79. data/rails_generators/nifty_authentication/templates/users_controller.rb +18 -0
  80. data/rails_generators/nifty_authentication/templates/users_helper.rb +2 -0
  81. data/rails_generators/nifty_authentication/templates/views/erb/login.html.erb +30 -0
  82. data/rails_generators/nifty_authentication/templates/views/erb/signup.html.erb +24 -0
  83. data/rails_generators/nifty_authentication/templates/views/haml/login.html.haml +30 -0
  84. data/rails_generators/nifty_authentication/templates/views/haml/signup.html.haml +24 -0
  85. data/rails_generators/nifty_config/USAGE +23 -0
  86. data/rails_generators/nifty_config/nifty_config_generator.rb +32 -0
  87. data/rails_generators/nifty_config/templates/config.yml +8 -0
  88. data/rails_generators/nifty_config/templates/load_config.rb +2 -0
  89. data/rails_generators/nifty_layout/USAGE +25 -0
  90. data/rails_generators/nifty_layout/lib/insert_commands.rb +43 -0
  91. data/rails_generators/nifty_layout/nifty_layout_generator.rb +55 -0
  92. data/rails_generators/nifty_layout/templates/helper.rb +22 -0
  93. data/rails_generators/nifty_layout/templates/layout.html.haml +26 -0
  94. data/rails_generators/nifty_layout/templates/stylesheet.sass +67 -0
  95. data/rails_generators/nifty_scaffold/USAGE +51 -0
  96. data/rails_generators/nifty_scaffold/nifty_scaffold_generator.rb +237 -0
  97. data/rails_generators/nifty_scaffold/templates/actions/create.rb +9 -0
  98. data/rails_generators/nifty_scaffold/templates/actions/destroy.rb +6 -0
  99. data/rails_generators/nifty_scaffold/templates/actions/edit.rb +3 -0
  100. data/rails_generators/nifty_scaffold/templates/actions/index.rb +3 -0
  101. data/rails_generators/nifty_scaffold/templates/actions/new.rb +3 -0
  102. data/rails_generators/nifty_scaffold/templates/actions/show.rb +3 -0
  103. data/rails_generators/nifty_scaffold/templates/actions/update.rb +9 -0
  104. data/rails_generators/nifty_scaffold/templates/controller.rb +3 -0
  105. data/rails_generators/nifty_scaffold/templates/fixtures.yml +9 -0
  106. data/rails_generators/nifty_scaffold/templates/helper.rb +2 -0
  107. data/rails_generators/nifty_scaffold/templates/migration.rb +16 -0
  108. data/rails_generators/nifty_scaffold/templates/model.rb +3 -0
  109. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/create.rb +11 -0
  110. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/destroy.rb +6 -0
  111. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/edit.rb +4 -0
  112. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/index.rb +4 -0
  113. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/new.rb +4 -0
  114. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/show.rb +4 -0
  115. data/rails_generators/nifty_scaffold/templates/tests/rspec/actions/update.rb +11 -0
  116. data/rails_generators/nifty_scaffold/templates/tests/rspec/controller.rb +8 -0
  117. data/rails_generators/nifty_scaffold/templates/tests/rspec/model.rb +7 -0
  118. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/create.rb +13 -0
  119. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/destroy.rb +8 -0
  120. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/edit.rb +6 -0
  121. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/index.rb +6 -0
  122. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/new.rb +6 -0
  123. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/show.rb +6 -0
  124. data/rails_generators/nifty_scaffold/templates/tests/shoulda/actions/update.rb +13 -0
  125. data/rails_generators/nifty_scaffold/templates/tests/shoulda/controller.rb +5 -0
  126. data/rails_generators/nifty_scaffold/templates/tests/shoulda/model.rb +7 -0
  127. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/create.rb +11 -0
  128. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/destroy.rb +6 -0
  129. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/edit.rb +4 -0
  130. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/index.rb +4 -0
  131. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/new.rb +4 -0
  132. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/show.rb +4 -0
  133. data/rails_generators/nifty_scaffold/templates/tests/testunit/actions/update.rb +11 -0
  134. data/rails_generators/nifty_scaffold/templates/tests/testunit/controller.rb +5 -0
  135. data/rails_generators/nifty_scaffold/templates/tests/testunit/model.rb +7 -0
  136. data/rails_generators/nifty_scaffold/templates/views/erb/_form.html.erb +10 -0
  137. data/rails_generators/nifty_scaffold/templates/views/erb/edit.html.erb +14 -0
  138. data/rails_generators/nifty_scaffold/templates/views/erb/index.html.erb +29 -0
  139. data/rails_generators/nifty_scaffold/templates/views/erb/new.html.erb +7 -0
  140. data/rails_generators/nifty_scaffold/templates/views/erb/show.html.erb +20 -0
  141. data/rails_generators/nifty_scaffold/templates/views/haml/_form.html.haml +10 -0
  142. data/rails_generators/nifty_scaffold/templates/views/haml/edit.html.haml +14 -0
  143. data/rails_generators/nifty_scaffold/templates/views/haml/index.html.haml +25 -0
  144. data/rails_generators/nifty_scaffold/templates/views/haml/new.html.haml +7 -0
  145. data/rails_generators/nifty_scaffold/templates/views/haml/show.html.haml +20 -0
  146. data/tasks/deployment.rake +2 -0
  147. data/test/test_helper.rb +117 -0
  148. data/test/test_nifty_admin_scaffold_generator.rb +538 -0
  149. data/test/test_nifty_authentication_generator.rb +236 -0
  150. data/test/test_nifty_config_generator.rb +37 -0
  151. data/test/test_nifty_layout_generator.rb +47 -0
  152. data/test/test_nifty_scaffold_generator.rb +538 -0
  153. metadata +222 -0
@@ -0,0 +1,236 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyAuthenticationGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+ context "" do # empty context so we can use setup block
20
+ setup do
21
+ Rails.stubs(:version).returns("2.0.2")
22
+ Dir.mkdir("#{RAILS_ROOT}/config") unless File.exists?("#{RAILS_ROOT}/config")
23
+ File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f|
24
+ f.puts "ActionController::Routing::Routes.draw do |map|\n\nend"
25
+ end
26
+ Dir.mkdir("#{RAILS_ROOT}/app") unless File.exists?("#{RAILS_ROOT}/app")
27
+ Dir.mkdir("#{RAILS_ROOT}/app/controllers") unless File.exists?("#{RAILS_ROOT}/app/controllers")
28
+ File.open("#{RAILS_ROOT}/app/controllers/application.rb", 'w') do |f|
29
+ f.puts "class Application < ActionController::Base\n\nend"
30
+ end
31
+ end
32
+
33
+ teardown do
34
+ FileUtils.rm_rf "#{RAILS_ROOT}/config"
35
+ FileUtils.rm_rf "#{RAILS_ROOT}/app"
36
+ end
37
+
38
+ context "generator without arguments" do
39
+ rails_generator :nifty_authentication
40
+ should_generate_file 'app/models/user.rb'
41
+ should_generate_file 'app/controllers/users_controller.rb'
42
+ should_generate_file 'app/helpers/users_helper.rb'
43
+ should_generate_file 'app/views/users/new.html.erb'
44
+ should_generate_file 'app/controllers/sessions_controller.rb'
45
+ should_generate_file 'app/helpers/sessions_helper.rb'
46
+ should_generate_file 'app/views/sessions/new.html.erb'
47
+ should_generate_file 'lib/authentication.rb'
48
+ should_generate_file 'test/fixtures/users.yml'
49
+ should_generate_file 'test/unit/user_test.rb'
50
+ should_generate_file 'test/functional/users_controller_test.rb'
51
+ should_generate_file 'test/functional/sessions_controller_test.rb'
52
+
53
+ should "generate migration file" do
54
+ assert !Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
55
+ end
56
+
57
+ should "generate routes" do
58
+ assert_generated_file "config/routes.rb" do |body|
59
+ assert_match "map.resources :sessions", body
60
+ assert_match "map.resources :users", body
61
+ assert_match "map.login 'login', :controller => 'sessions', :action => 'new'", body
62
+ assert_match "map.logout 'logout', :controller => 'sessions', :action => 'destroy'", body
63
+ assert_match "map.signup 'signup', :controller => 'users', :action => 'new'", body
64
+ end
65
+ end
66
+
67
+ should "include Authentication" do
68
+ application_controller_name = Rails.version >= '2.3.0' ? 'application_controller' : 'application'
69
+ assert_generated_file "app/controllers/#{application_controller_name}.rb" do |body|
70
+ assert_match "include Authentication", body
71
+ end
72
+ end
73
+ end
74
+
75
+ context "generator with user and session names" do
76
+ rails_generator :nifty_authentication, "Account", "CurrentSession"
77
+ should_generate_file 'app/models/account.rb'
78
+ should_generate_file 'app/controllers/accounts_controller.rb'
79
+ should_generate_file 'app/helpers/accounts_helper.rb'
80
+ should_generate_file 'app/views/accounts/new.html.erb'
81
+ should_generate_file 'app/controllers/current_sessions_controller.rb'
82
+ should_generate_file 'app/helpers/current_sessions_helper.rb'
83
+ should_generate_file 'app/views/current_sessions/new.html.erb'
84
+ should_generate_file 'test/fixtures/accounts.yml'
85
+ should_generate_file 'test/unit/account_test.rb'
86
+ should_generate_file 'test/functional/accounts_controller_test.rb'
87
+ should_generate_file 'test/functional/current_sessions_controller_test.rb'
88
+
89
+ should "generate routes" do
90
+ assert_generated_file "config/routes.rb" do |body|
91
+ assert_match "map.resources :current_sessions", body
92
+ assert_match "map.resources :accounts", body
93
+ assert_match "map.login 'login', :controller => 'current_sessions', :action => 'new'", body
94
+ assert_match "map.logout 'logout', :controller => 'current_sessions', :action => 'destroy'", body
95
+ assert_match "map.signup 'signup', :controller => 'accounts', :action => 'new'", body
96
+ end
97
+ end
98
+ end
99
+
100
+ context "generator with shoulda option" do
101
+ rails_generator :nifty_authentication, :test_framework => :shoulda
102
+
103
+ should "have controller and model tests using shoulda syntax" do
104
+ assert_generated_file "test/functional/users_controller_test.rb" do |body|
105
+ assert_match " should ", body
106
+ end
107
+ assert_generated_file "test/functional/sessions_controller_test.rb" do |body|
108
+ assert_match " should ", body
109
+ end
110
+
111
+ assert_generated_file "test/unit/user_test.rb" do |body|
112
+ assert_match " should ", body
113
+ end
114
+ end
115
+ end
116
+
117
+ context "generator with rspec option" do
118
+ rails_generator :nifty_authentication, :test_framework => :rspec
119
+ should_generate_file 'spec/fixtures/users.yml'
120
+ end
121
+
122
+ context "with spec dir" do
123
+ setup do
124
+ Dir.mkdir("#{RAILS_ROOT}/spec") unless File.exists?("#{RAILS_ROOT}/spec")
125
+ end
126
+
127
+ teardown do
128
+ FileUtils.rm_rf "#{RAILS_ROOT}/spec"
129
+ end
130
+
131
+ context "generator without arguments" do
132
+ rails_generator :nifty_authentication
133
+ should_generate_file 'spec/fixtures/users.yml'
134
+ should_generate_file 'spec/models/user_spec.rb'
135
+ should_generate_file 'spec/controllers/users_controller_spec.rb'
136
+ should_generate_file 'spec/controllers/sessions_controller_spec.rb'
137
+ end
138
+
139
+ context "generator with user and session names" do
140
+ rails_generator :nifty_authentication, "Account", "CurrentSessions"
141
+ should_generate_file 'spec/fixtures/accounts.yml'
142
+ should_generate_file 'spec/models/account_spec.rb'
143
+ should_generate_file 'spec/controllers/accounts_controller_spec.rb'
144
+ should_generate_file 'spec/controllers/current_sessions_controller_spec.rb'
145
+ end
146
+
147
+ context "generator with testunit option" do
148
+ rails_generator :nifty_authentication, :test_framework => :testunit
149
+ should_generate_file 'test/fixtures/users.yml'
150
+ end
151
+ end
152
+
153
+ context "generator with haml option" do
154
+ rails_generator :nifty_authentication, :haml => true
155
+
156
+ should_generate_file "app/views/users/new.html.haml"
157
+ should_generate_file "app/views/sessions/new.html.haml"
158
+ end
159
+
160
+ context "generator with authlogic option and custom names" do
161
+ rails_generator :nifty_authentication, "Account", :authlogic => true
162
+ should_generate_file 'app/models/account.rb'
163
+ should_generate_file 'app/controllers/accounts_controller.rb'
164
+ should_generate_file 'app/helpers/accounts_helper.rb'
165
+ should_generate_file 'app/views/accounts/new.html.erb'
166
+ should_generate_file 'app/controllers/account_sessions_controller.rb'
167
+ should_generate_file 'app/helpers/account_sessions_helper.rb'
168
+ should_generate_file 'app/views/account_sessions/new.html.erb'
169
+ should_generate_file 'test/fixtures/accounts.yml'
170
+ should_generate_file 'test/unit/account_test.rb'
171
+ should_generate_file 'test/functional/accounts_controller_test.rb'
172
+ should_generate_file 'test/functional/account_sessions_controller_test.rb'
173
+ should_generate_file 'lib/authentication.rb'
174
+
175
+ should "only include acts_as_authentic in account model" do
176
+ assert_generated_file "app/models/account.rb" do |body|
177
+ assert_match "acts_as_authentic", body
178
+ assert_no_match(/validates/, body)
179
+ assert_no_match(/def/, body)
180
+ end
181
+ end
182
+
183
+ should "should generate authentication module with current_account_session method" do
184
+ assert_generated_file "lib/authentication.rb" do |body|
185
+ assert_match "def current_account_session", body
186
+ end
187
+ end
188
+
189
+ should "should generate AccountSession model" do
190
+ assert_generated_file "app/models/account_session.rb" do |body|
191
+ assert_match "class AccountSession < Authlogic::Session::Base", body
192
+ end
193
+ end
194
+
195
+ should "should generate restful style actions in sessions controller" do
196
+ assert_generated_file "app/controllers/account_sessions_controller.rb" do |body|
197
+ assert_match "AccountSession.new", body
198
+ end
199
+ end
200
+
201
+ should "should generate form for account session" do
202
+ assert_generated_file "app/views/account_sessions/new.html.erb" do |body|
203
+ assert_match "form_for @account_session", body
204
+ end
205
+ end
206
+
207
+ should "should not include tests in account since authlogic is already tested" do
208
+ assert_generated_file "test/unit/account_test.rb" do |body|
209
+ assert_no_match(/def test/, body)
210
+ end
211
+ end
212
+
213
+ should "should handle session controller tests differently" do
214
+ assert_generated_file "test/functional/account_sessions_controller_test.rb" do |body|
215
+ assert_match "AccountSession.find", body
216
+ end
217
+ end
218
+
219
+ should "generate migration with authlogic columns" do
220
+ file = Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").first
221
+ assert file, "migration file doesn't exist"
222
+ assert_match(/[0-9]+_create_accounts.rb$/, file)
223
+ assert_generated_file "db/migrate/#{File.basename(file)}" do |body|
224
+ assert_match "class CreateAccounts", body
225
+ assert_match "t.string :username", body
226
+ assert_match "t.string :email", body
227
+ assert_match "t.string :crypted_password", body
228
+ assert_match "t.string :password_salt", body
229
+ assert_match "t.string :persistence_token", body
230
+ assert_match "t.timestamps", body
231
+ assert_no_match(/password_hash/, body)
232
+ end
233
+ end
234
+ end
235
+ end
236
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyConfigGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+
20
+ context "generator without name" do
21
+ rails_generator :nifty_config
22
+ should_generate_file 'config/app_config.yml'
23
+ should_generate_file 'config/initializers/load_app_config.rb'
24
+ end
25
+
26
+ context "generator with name" do
27
+ rails_generator :nifty_config, "FooBar"
28
+ should_generate_file 'config/foo_bar_config.yml'
29
+
30
+ should "use the name as a constant in the initializer" do
31
+ assert_generated_file 'config/initializers/load_foo_bar_config.rb' do |body|
32
+ assert_match "config/foo_bar_config.yml", body
33
+ assert_match "FOO_BAR_CONFIG = ", body
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,47 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyLayoutGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+
20
+ context "generator without name" do
21
+ rails_generator :nifty_layout
22
+ should_generate_file 'app/views/layouts/application.html.erb'
23
+ end
24
+
25
+ context "generator with name" do
26
+ rails_generator :nifty_layout, "foobar"
27
+ should_generate_file 'app/views/layouts/foobar.html.erb'
28
+ should_generate_file 'public/stylesheets/foobar.css'
29
+ should_generate_file 'app/helpers/layout_helper.rb'
30
+ end
31
+
32
+ context "generator with CamelCase name" do
33
+ rails_generator :nifty_layout, "FooBar"
34
+ should_generate_file 'app/views/layouts/foo_bar.html.erb'
35
+ end
36
+
37
+ context "generator with haml option" do
38
+ rails_generator :nifty_layout, "foobar", :haml => true
39
+ should_generate_file 'app/views/layouts/foobar.html.haml'
40
+ should_generate_file 'public/stylesheets/sass/foobar.sass'
41
+ end
42
+
43
+ context "generator with compass option" do
44
+ rails_generator :nifty_layout, "foobar", :compass => true
45
+ should_generate_file 'app/stylesheets/partials/_foobar.sass'
46
+ end
47
+ end
@@ -0,0 +1,538 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class TestNiftyScaffoldGenerator < Test::Unit::TestCase
4
+ include NiftyGenerators::TestHelper
5
+
6
+ # Some generator-related assertions:
7
+ # assert_generated_file(name, &block) # block passed the file contents
8
+ # assert_directory_exists(name)
9
+ # assert_generated_class(name, &block)
10
+ # assert_generated_module(name, &block)
11
+ # assert_generated_test_for(name, &block)
12
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
13
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
14
+ #
15
+ # Other helper methods are:
16
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
17
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
18
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
19
+
20
+ context "routed" do
21
+ setup do
22
+ Dir.mkdir("#{RAILS_ROOT}/config") unless File.exists?("#{RAILS_ROOT}/config")
23
+ File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f|
24
+ f.puts "ActionController::Routing::Routes.draw do |map|\n\nend"
25
+ end
26
+ end
27
+
28
+ teardown do
29
+ FileUtils.rm_rf "#{RAILS_ROOT}/config"
30
+ end
31
+
32
+ context "generator without name" do
33
+ should "raise usage error" do
34
+ assert_raise Rails::Generator::UsageError do
35
+ run_rails_generator :nifty_scaffold
36
+ end
37
+ end
38
+ end
39
+
40
+ context "generator with no options and no existing model" do
41
+ rails_generator :nifty_scaffold, "LineItem"
42
+
43
+ should_generate_file "app/helpers/line_items_helper.rb"
44
+
45
+ should "generate controller with class as camelcase name pluralized and all actions" do
46
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
47
+ assert_match "class LineItemsController < ApplicationController", body
48
+ %w[index show new create edit update destroy].each do |action|
49
+ assert_match "def #{action}", body
50
+ end
51
+ end
52
+ end
53
+
54
+ %w[index show new edit].each do |action|
55
+ should_generate_file "app/views/line_items/#{action}.html.erb"
56
+ end
57
+
58
+ should "have name attribute" do
59
+ assert_generated_file "app/views/line_items/_form.html.erb" do |body|
60
+ assert_match "<%= f.text_field :name %>", body
61
+ end
62
+ end
63
+
64
+ should "add map.resources line to routes" do
65
+ assert_generated_file "config/routes.rb" do |body|
66
+ assert_match "map.resources :line_items", body
67
+ end
68
+ end
69
+
70
+ should_not_generate_file "app/models/line_item.rb"
71
+ end
72
+
73
+ context "generator with some attributes" do
74
+ rails_generator :nifty_scaffold, "line_item", "name:string", "description:text"
75
+
76
+ should "generate migration with attribute columns" do
77
+ file = Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").first
78
+ assert file, "migration file doesn't exist"
79
+ assert_match(/[0-9]+_create_line_items.rb$/, file)
80
+ assert_generated_file "db/migrate/#{File.basename(file)}" do |body|
81
+ assert_match "class CreateLineItems", body
82
+ assert_match "t.string :name", body
83
+ assert_match "t.text :description", body
84
+ assert_match "t.timestamps", body
85
+ end
86
+ end
87
+
88
+ should "generate model with class as camelcase name and add attr_accessible for attributes" do
89
+ assert_generated_file "app/models/line_item.rb" do |body|
90
+ assert_match "class LineItem < ActiveRecord::Base", body
91
+ assert_match "attr_accessible :name, :description", body
92
+ end
93
+ end
94
+ end
95
+
96
+ context "generator with index action" do
97
+ rails_generator :nifty_scaffold, "line_item", "index"
98
+
99
+ should_generate_file "app/views/line_items/index.html.erb"
100
+
101
+ should "generate controller with index action" do
102
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
103
+ assert_match "def index", body
104
+ assert_match "@line_items = LineItem.all", body
105
+ assert_no_match(/ def index/, body)
106
+ end
107
+ end
108
+ end
109
+
110
+ context "generator with show action" do
111
+ rails_generator :nifty_scaffold, "line_item", "show"
112
+
113
+ should_generate_file "app/views/line_items/show.html.erb"
114
+
115
+ should "generate controller with show action" do
116
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
117
+ assert_match "def show", body
118
+ assert_match "@line_item = LineItem.find(params[:id])", body
119
+ end
120
+ end
121
+ end
122
+
123
+ context "generator with new and create actions" do
124
+ rails_generator :nifty_scaffold, "LineItem", "new", "create"
125
+
126
+ should_not_generate_file "app/views/line_items/create.html.erb"
127
+ should_not_generate_file "app/views/line_items/_form.html.erb"
128
+
129
+ should "render form in 'new' template" do
130
+ assert_generated_file "app/views/line_items/new.html.erb" do |body|
131
+ assert_match "<% form_for @line_item do |f| %>", body
132
+ end
133
+ end
134
+
135
+ should "generate controller with actions" do
136
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
137
+ assert_match "def new", body
138
+ assert_match "@line_item = LineItem.new\n", body
139
+ assert_match "def create", body
140
+ assert_match "@line_item = LineItem.new(params[:line_item])", body
141
+ assert_match "if @line_item.save", body
142
+ assert_match "flash[:notice] = \"Successfully created line item.\"", body
143
+ assert_match "redirect_to root_url", body
144
+ assert_match "render :action => 'new'", body
145
+ end
146
+ end
147
+ end
148
+
149
+ context "generator with edit and update actions" do
150
+ rails_generator :nifty_scaffold, "line_item", "edit", "update"
151
+
152
+ should_not_generate_file "app/views/line_items/update.html.erb"
153
+ should_not_generate_file "app/views/line_items/_form.html.erb"
154
+
155
+ should "render form in 'edit' template" do
156
+ assert_generated_file "app/views/line_items/edit.html.erb" do |body|
157
+ assert_match "<% form_for @line_item do |f| %>", body
158
+ end
159
+ end
160
+
161
+ should "generate controller with actions" do
162
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
163
+ assert_match "def edit", body
164
+ assert_match "@line_item = LineItem.find(params[:id])", body
165
+ assert_match "def update", body
166
+ assert_match "if @line_item.update_attributes(params[:line_item])", body
167
+ assert_match "flash[:notice] = \"Successfully updated line item.\"", body
168
+ assert_match "redirect_to root_url", body
169
+ assert_match "render :action => 'edit'", body
170
+ end
171
+ end
172
+ end
173
+
174
+ context "generator with edit and update actions" do
175
+ rails_generator :nifty_scaffold, "line_item", "destroy"
176
+
177
+ should_not_generate_file "app/views/line_items/destroy.html.erb"
178
+
179
+ should "generate controller with action" do
180
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
181
+ assert_match "def destroy", body
182
+ assert_match "@line_item = LineItem.find(params[:id])", body
183
+ assert_match "@line_item.destroy", body
184
+ assert_match "flash[:notice] = \"Successfully destroyed line item.\"", body
185
+ assert_match "redirect_to root_url", body
186
+ end
187
+ end
188
+ end
189
+
190
+ context "generator with new and edit actions" do
191
+ rails_generator :nifty_scaffold, "line_item", "new", "edit"
192
+
193
+ should_generate_file "app/views/line_items/_form.html.erb"
194
+
195
+ should "render the form partial in views" do
196
+ %w[new edit].each do |action|
197
+ assert_generated_file "app/views/line_items/#{action}.html.erb" do |body|
198
+ assert_match "<%= render :partial => 'form' %>", body
199
+ end
200
+ end
201
+ end
202
+ end
203
+
204
+ context "generator with attributes and actions" do
205
+ rails_generator :nifty_scaffold, "line_item", "name:string", "new", "price:float", "index", "available:boolean"
206
+
207
+ should "render a form field for each attribute in 'new' template" do
208
+ assert_generated_file "app/views/line_items/new.html.erb" do |body|
209
+ assert_match "<%= f.text_field :name %>", body
210
+ assert_match "<%= f.text_field :price %>", body
211
+ assert_match "<%= f.check_box :available %>", body
212
+ end
213
+ end
214
+ end
215
+
216
+ context "generator with show, create, and update actions" do
217
+ rails_generator :nifty_scaffold, "line_item", "show", "create", "update"
218
+
219
+ should "redirect to line item show page, not index" do
220
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
221
+ assert_match "redirect_to @line_item", body
222
+ assert_no_match(/redirect_to line_items_url/, body)
223
+ end
224
+ end
225
+ end
226
+
227
+ context "generator with attributes and skip model option" do
228
+ rails_generator :nifty_scaffold, "line_item", "foo:string", :skip_model => true
229
+
230
+ should "use passed attribute" do
231
+ assert_generated_file "app/views/line_items/_form.html.erb" do |body|
232
+ assert_match "<%= f.text_field :foo %>", body
233
+ end
234
+ end
235
+
236
+ should "not generate migration file" do
237
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
238
+ end
239
+
240
+ should_not_generate_file "app/models/line_item.rb"
241
+ end
242
+
243
+ context "generator with no attributes" do
244
+ rails_generator :nifty_scaffold, "line_item"
245
+
246
+ should "not generate migration file" do
247
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
248
+ end
249
+
250
+ should_not_generate_file "app/models/line_item.rb"
251
+ end
252
+
253
+ context "generator with only new and edit actions" do
254
+ rails_generator :nifty_scaffold, "line_item", "new", "edit"
255
+
256
+ should "included create and update actions in controller" do
257
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
258
+ assert_match "def create", body
259
+ assert_match "def update", body
260
+ assert_match "root_url", body
261
+ end
262
+ end
263
+ end
264
+
265
+ context "generator with exclemation mark and show, new, and edit actions" do
266
+ rails_generator :nifty_scaffold, "line_item", "!", "show", "new", "edit"
267
+
268
+ should "only include index and destroy actions" do
269
+ assert_generated_file "app/controllers/line_items_controller.rb" do |body|
270
+ %w[index destroy].each { |a| assert_match "def #{a}", body }
271
+ %w[show new create edit update].each do |a|
272
+ assert_no_match(/def #{a}/, body)
273
+ end
274
+ end
275
+ end
276
+ end
277
+
278
+ context "generator with --skip-controller" do
279
+ rails_generator :nifty_scaffold, "line_item", :skip_controller => true
280
+ should_not_generate_file "app/controllers/line_items_controller.rb"
281
+ should_not_generate_file "app/helpers/line_items_helper.rb"
282
+ should_not_generate_file "app/views/line_items/index.html.erb"
283
+ end
284
+
285
+ context "generator with --skip-migration" do
286
+ rails_generator :nifty_scaffold, "line_item", "name:string", :skip_migration => true
287
+
288
+ should "not generate migration file" do
289
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
290
+ end
291
+ end
292
+
293
+ context "generator with --skip-timestamps" do
294
+ rails_generator :nifty_scaffold, "line_item", "name:string", :skip_timestamps => true
295
+
296
+ should "generate migration with no timestamps" do
297
+ file = Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").first
298
+ assert file, "migration file doesn't exist"
299
+ assert_generated_file "db/migrate/#{File.basename(file)}" do |body|
300
+ assert_no_match(/t.timestamps/, body)
301
+ end
302
+ end
303
+ end
304
+
305
+ context "generator with --make-fixture" do
306
+ rails_generator :nifty_scaffold, "line_item", "name:string", :make_fixture => true
307
+
308
+ should "have fixture with attributes" do
309
+ assert_generated_file "test/fixtures/line_items.yml" do |body|
310
+ assert_match "name: MyString", body
311
+ end
312
+ end
313
+ end
314
+
315
+ context "existing model" do
316
+ setup do
317
+ Dir.mkdir("#{RAILS_ROOT}/app") unless File.exists?("#{RAILS_ROOT}/app")
318
+ Dir.mkdir("#{RAILS_ROOT}/app/models") unless File.exists?("#{RAILS_ROOT}/app/models")
319
+ File.open("#{RAILS_ROOT}/app/models/recipe.rb", 'w') do |f|
320
+ f.puts "raise 'should not be loaded'"
321
+ end
322
+ end
323
+
324
+ teardown do
325
+ FileUtils.rm_rf "#{RAILS_ROOT}/app"
326
+ end
327
+
328
+ context "generator with skip model option" do
329
+ rails_generator :nifty_scaffold, "recipe", :skip_model => true
330
+
331
+ should "use model columns for attributes" do
332
+ assert_generated_file "app/views/recipes/_form.html.erb" do |body|
333
+ assert_match "<%= f.text_field :foo %>", body
334
+ assert_match "<%= f.text_field :bar %>", body
335
+ assert_match "<%= f.text_field :book_id %>", body
336
+ assert_no_match(/:id/, body)
337
+ assert_no_match(/:created_at/, body)
338
+ assert_no_match(/:updated_at/, body)
339
+ end
340
+ end
341
+
342
+ should "not generate migration file" do
343
+ assert Dir.glob("#{RAILS_ROOT}/db/migrate/*.rb").empty?
344
+ end
345
+ end
346
+
347
+ context "generator with attribute specified" do
348
+ rails_generator :nifty_scaffold, "recipe", "zippo:string"
349
+
350
+ should "use specified attribute" do
351
+ assert_generated_file "app/views/recipes/_form.html.erb" do |body|
352
+ assert_match "<%= f.text_field :zippo %>", body
353
+ end
354
+ end
355
+ end
356
+ end
357
+
358
+ context "with spec dir" do
359
+ setup do
360
+ Dir.mkdir("#{RAILS_ROOT}/spec") unless File.exists?("#{RAILS_ROOT}/spec")
361
+ end
362
+
363
+ teardown do
364
+ FileUtils.rm_rf "#{RAILS_ROOT}/spec"
365
+ end
366
+
367
+ context "generator with some attributes" do
368
+ rails_generator :nifty_scaffold, "line_item", "name:string", "description:text"
369
+
370
+ should_generate_file "spec/models/line_item_spec.rb"
371
+
372
+ should "have controller specs for each action" do
373
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
374
+ assert_match "get :index", body
375
+ assert_match "get :show", body
376
+ assert_match "get :new", body
377
+ assert_match "get :edit", body
378
+ assert_match "post :create", body
379
+ assert_match "put :update", body
380
+ assert_match "delete :destroy", body
381
+ end
382
+ end
383
+
384
+ should "generate fixture file" do
385
+ assert Dir.glob("#{RAILS_ROOT}/test/fixtures/*.yml").empty?
386
+ end
387
+ end
388
+
389
+ context "generator with new and index actions" do
390
+ rails_generator :nifty_scaffold, "line_item", "new", "index"
391
+
392
+ should "have controller spec with only mentioned actions" do
393
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
394
+ assert_match "get :index", body
395
+ assert_match "get :new", body
396
+ assert_match "post :create", body
397
+ assert_no_match(/get :show/, body)
398
+ assert_no_match(/get :edit/, body)
399
+ assert_no_match(/put :update/, body)
400
+ assert_no_match(/delete :destroy/, body)
401
+ end
402
+ end
403
+
404
+ should "redirect to index action on successful create" do
405
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
406
+ assert_match "redirect_to(line_items_url)", body
407
+ end
408
+ end
409
+ end
410
+
411
+ context "generator with edit and index actions" do
412
+ rails_generator :nifty_scaffold, "line_item", "edit", "index"
413
+
414
+ should "redirect to index action on successful update" do
415
+ assert_generated_file "spec/controllers/line_items_controller_spec.rb" do |body|
416
+ assert_match "redirect_to(line_items_url)", body
417
+ end
418
+ end
419
+ end
420
+
421
+ context "generator with testunit specified" do
422
+ rails_generator :nifty_scaffold, "line_item", "name:string", :test_framework => :testunit
423
+
424
+ should_generate_file "test/unit/line_item_test.rb"
425
+ end
426
+ end
427
+
428
+ context "with test dir" do
429
+ setup do
430
+ Dir.mkdir("#{RAILS_ROOT}/test") unless File.exists?("#{RAILS_ROOT}/test")
431
+ end
432
+
433
+ teardown do
434
+ FileUtils.rm_rf "#{RAILS_ROOT}/test"
435
+ end
436
+
437
+ context "generator with some attributes" do
438
+ rails_generator :nifty_scaffold, "line_item", "name:string", "description:text"
439
+
440
+ should_generate_file "test/unit/line_item_test.rb"
441
+
442
+ should "have controller tests for each action" do
443
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
444
+ assert_match "get :index", body
445
+ assert_match "get :show", body
446
+ assert_match "get :new", body
447
+ assert_match "get :edit", body
448
+ assert_match "post :create", body
449
+ assert_match "put :update", body
450
+ assert_match "delete :destroy", body
451
+ end
452
+ end
453
+
454
+ should "generate fixture file" do
455
+ assert Dir.glob("#{RAILS_ROOT}/test/fixtures/*.yml").empty?
456
+ end
457
+ end
458
+
459
+ context "generator with new and index actions" do
460
+ rails_generator :nifty_scaffold, "line_item", "new", "index"
461
+
462
+ should "have controller test with only mentioned actions" do
463
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
464
+ assert_match "get :index", body
465
+ assert_match "get :new", body
466
+ assert_match "post :create", body
467
+ assert_no_match(/get :show/, body)
468
+ assert_no_match(/get :edit/, body)
469
+ assert_no_match(/put :update/, body)
470
+ assert_no_match(/delete :destroy/, body)
471
+ end
472
+ end
473
+
474
+ should "redirect to index action on successful create" do
475
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
476
+ assert_match "assert_redirected_to line_items_url", body
477
+ end
478
+ end
479
+ end
480
+
481
+ context "generator with edit and index actions" do
482
+ rails_generator :nifty_scaffold, "line_item", "edit", "index"
483
+
484
+ should "redirect to index action on successful update" do
485
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
486
+ assert_match "assert_redirected_to line_items_url", body
487
+ end
488
+ end
489
+ end
490
+
491
+ context "generator with rspec specified" do
492
+ rails_generator :nifty_scaffold, "line_item", "name:string", :test_framework => :rspec
493
+
494
+ should_generate_file "spec/models/line_item_spec.rb"
495
+ end
496
+
497
+ context "generator with shoulda specified" do
498
+ rails_generator :nifty_scaffold, "line_item", "name:string", :test_framework => :shoulda
499
+
500
+ should "have controller and model tests using shoulda syntax" do
501
+ assert_generated_file "test/functional/line_items_controller_test.rb" do |body|
502
+ assert_match " should ", body
503
+ end
504
+
505
+ assert_generated_file "test/unit/line_item_test.rb" do |body|
506
+ assert_match " should ", body
507
+ end
508
+ end
509
+ end
510
+ end
511
+
512
+ context "generator with haml option" do
513
+ rails_generator :nifty_scaffold, "LineItem", :haml => true
514
+
515
+ %w[index show new edit _form].each do |action|
516
+ should_generate_file "app/views/line_items/#{action}.html.haml"
517
+ end
518
+
519
+ should "render the form partial in views" do
520
+ %w[new edit].each do |action|
521
+ assert_generated_file "app/views/line_items/#{action}.html.haml" do |body|
522
+ assert_match /^= render :partial => 'form'$/, body
523
+ end
524
+ end
525
+ end
526
+ end
527
+ end
528
+ end
529
+
530
+ # just an example model we can use
531
+ class Recipe < ActiveRecord::Base
532
+ add_column :id, :integer
533
+ add_column :foo, :string
534
+ add_column :bar, :string
535
+ add_column :book_id, :integer
536
+ add_column :created_at, :datetime
537
+ add_column :updated_at, :datetime
538
+ end