spree 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of spree might be problematic. Click here for more details.

Files changed (211) hide show
  1. data/History.txt +5 -0
  2. data/Manifest.txt +158 -21
  3. data/config/hoe.rb +2 -1
  4. data/lib/spree/version.rb +1 -1
  5. data/starter-app/app/views/layouts/application.rhtml +6 -4
  6. data/starter-app/db/sample/line_items.yml +6 -4
  7. data/starter-app/db/sample/{variations.yml → variants.yml} +16 -0
  8. data/starter-app/log/README +1 -0
  9. data/starter-app/public/images/spree.jpg +0 -0
  10. data/starter-app/public/stylesheets/application.css +2 -2
  11. data/starter-app/script/spec +4 -0
  12. data/starter-app/script/spec_server +102 -0
  13. data/starter-app/spec/models/cart_item_spec.rb +50 -0
  14. data/starter-app/spec/models/cart_spec.rb +51 -0
  15. data/starter-app/spec/models/line_item_spec.rb +33 -0
  16. data/starter-app/spec/models/product_spec.rb +29 -0
  17. data/starter-app/spec/rcov.opts +2 -0
  18. data/starter-app/spec/spec.opts +6 -0
  19. data/starter-app/spec/spec_helper.rb +39 -0
  20. data/starter-app/stories/all.rb +4 -0
  21. data/starter-app/stories/helper.rb +3 -0
  22. data/starter-app/vendor/plugins/rspec_on_rails/MIT-LICENSE +31 -0
  23. data/starter-app/vendor/plugins/rspec_on_rails/README +3 -0
  24. data/starter-app/vendor/plugins/rspec_on_rails/Rakefile +9 -0
  25. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/CHANGES +1 -0
  26. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb +35 -0
  27. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb +4 -0
  28. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt +0 -0
  29. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts +2 -0
  30. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec +4 -0
  31. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server +102 -0
  32. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts +6 -0
  33. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb +39 -0
  34. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb +3 -0
  35. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE +33 -0
  36. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb +49 -0
  37. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb +25 -0
  38. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb +11 -0
  39. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb +12 -0
  40. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/USAGE +18 -0
  41. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb +30 -0
  42. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb +11 -0
  43. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb +167 -0
  44. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb +313 -0
  45. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb +25 -0
  46. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
  47. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb +22 -0
  48. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb +26 -0
  49. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb +61 -0
  50. data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb +22 -0
  51. data/starter-app/vendor/plugins/rspec_on_rails/init.rb +9 -0
  52. data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/discover.rb +1 -0
  53. data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb +81 -0
  54. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails.rb +51 -0
  55. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb +47 -0
  56. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb +42 -0
  57. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb +255 -0
  58. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb +66 -0
  59. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb +82 -0
  60. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb +62 -0
  61. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb +14 -0
  62. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb +68 -0
  63. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb +90 -0
  64. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb +171 -0
  65. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb +12 -0
  66. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb +14 -0
  67. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb +21 -0
  68. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb +11 -0
  69. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb +27 -0
  70. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb +30 -0
  71. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb +5 -0
  72. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb +66 -0
  73. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb +21 -0
  74. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb +29 -0
  75. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb +130 -0
  76. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb +55 -0
  77. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb +113 -0
  78. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb +70 -0
  79. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb +71 -0
  80. data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb +23 -0
  81. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb +36 -0
  82. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb +8 -0
  83. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb +55 -0
  84. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb +83 -0
  85. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb +43 -0
  86. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb +187 -0
  87. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb +112 -0
  88. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb +118 -0
  89. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb +64 -0
  90. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb +18 -0
  91. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb +16 -0
  92. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
  93. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb +263 -0
  94. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb +54 -0
  95. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb +48 -0
  96. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb +14 -0
  97. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb +783 -0
  98. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb +37 -0
  99. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb +13 -0
  100. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb +62 -0
  101. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb +203 -0
  102. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb +169 -0
  103. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb +65 -0
  104. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb +7 -0
  105. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb +89 -0
  106. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb +11 -0
  107. data/starter-app/vendor/plugins/rspec_on_rails/spec/rails_suite.rb +7 -0
  108. data/starter-app/vendor/plugins/rspec_on_rails/spec/spec_helper.rb +46 -0
  109. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb +2 -0
  110. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb +56 -0
  111. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb +59 -0
  112. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb +26 -0
  113. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb +58 -0
  114. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb +10 -0
  115. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb +5 -0
  116. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb +6 -0
  117. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb +13 -0
  118. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml +0 -0
  119. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml +1 -0
  120. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml +1 -0
  121. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml +0 -0
  122. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml +1 -0
  123. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml +1 -0
  124. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml +0 -0
  125. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs +1 -0
  126. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml +0 -0
  127. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs +1 -0
  128. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml +1 -0
  129. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs +1 -0
  130. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs +1 -0
  131. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs +1 -0
  132. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs +1 -0
  133. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs +1 -0
  134. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs +1 -0
  135. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs +1 -0
  136. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs +1 -0
  137. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml +1 -0
  138. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml +1 -0
  139. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml +1 -0
  140. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml +2 -0
  141. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml +0 -0
  142. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml +1 -0
  143. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml +1 -0
  144. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml +1 -0
  145. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml +3 -0
  146. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml +2 -0
  147. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml +2 -0
  148. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml +1 -0
  149. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml +2 -0
  150. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml +3 -0
  151. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml +5 -0
  152. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml +3 -0
  153. data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml +1 -0
  154. data/starter-app/vendor/plugins/rspec_on_rails/stories/all.rb +10 -0
  155. data/starter-app/vendor/plugins/rspec_on_rails/stories/helper.rb +5 -0
  156. data/starter-app/vendor/plugins/rspec_on_rails/stories/steps/people.rb +8 -0
  157. data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback +15 -0
  158. data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb +25 -0
  159. data/starter-app/vendor/plugins/rspec_on_rails/tasks/rspec.rake +137 -0
  160. data/starter-app/vendor/plugins/spree/LICENSE +1 -1
  161. data/starter-app/vendor/plugins/spree/app/controllers/admin/categories_controller.rb +0 -24
  162. data/starter-app/vendor/plugins/spree/app/controllers/admin/products_controller.rb +16 -16
  163. data/starter-app/vendor/plugins/spree/app/controllers/cart_controller.rb +2 -8
  164. data/starter-app/vendor/plugins/spree/app/helpers/admin/products_helper.rb +1 -1
  165. data/starter-app/vendor/plugins/spree/app/helpers/spree/base_helper.rb +2 -2
  166. data/starter-app/vendor/plugins/spree/app/models/cart.rb +7 -20
  167. data/starter-app/vendor/plugins/spree/app/models/cart_item.rb +3 -6
  168. data/starter-app/vendor/plugins/spree/app/models/category.rb +6 -22
  169. data/starter-app/vendor/plugins/spree/app/models/line_item.rb +3 -5
  170. data/starter-app/vendor/plugins/spree/app/models/option_value.rb +1 -1
  171. data/starter-app/vendor/plugins/spree/app/models/product.rb +18 -2
  172. data/starter-app/vendor/plugins/spree/app/models/variant.rb +5 -0
  173. data/starter-app/vendor/plugins/spree/app/views/admin/categories/_form.rhtml +1 -5
  174. data/starter-app/vendor/plugins/spree/app/views/admin/overview/index.rhtml +3 -0
  175. data/starter-app/vendor/plugins/spree/app/views/admin/products/_form.rhtml +2 -2
  176. data/starter-app/vendor/plugins/spree/app/views/admin/products/{_new_variation.rhtml → _new_variant.rhtml} +1 -1
  177. data/starter-app/vendor/plugins/spree/app/views/admin/products/_variants.rhtml +43 -0
  178. data/starter-app/vendor/plugins/spree/app/views/cart/index.rhtml +4 -4
  179. data/starter-app/vendor/plugins/spree/app/views/layouts/admin.rhtml +1 -1
  180. data/starter-app/vendor/plugins/spree/app/views/order_mailer/cancel.rhtml +1 -1
  181. data/starter-app/vendor/plugins/spree/app/views/order_mailer/confirm.rhtml +1 -1
  182. data/starter-app/vendor/plugins/spree/app/views/shared/_order_details.rhtml +1 -1
  183. data/starter-app/vendor/plugins/spree/app/views/store/show.rhtml +30 -29
  184. data/starter-app/vendor/plugins/spree/assets/images/spree/spree.jpg +0 -0
  185. data/starter-app/vendor/plugins/spree/assets/stylesheets/spree-admin.css +1 -1
  186. data/starter-app/vendor/plugins/spree/assets/stylesheets/store/_controller.css +1 -1
  187. data/starter-app/vendor/plugins/spree/db/migrate/002_create_cart_items.rb +1 -2
  188. data/starter-app/vendor/plugins/spree/db/migrate/006_create_line_items.rb +5 -7
  189. data/starter-app/vendor/plugins/spree/db/migrate/011_create_variants.rb +11 -0
  190. data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variants.rb +12 -0
  191. data/starter-app/vendor/plugins/spree/test/unit/product_test.rb +0 -33
  192. metadata +170 -23
  193. data/starter-app/vendor/plugins/spree/app/controllers/admin/variations_controller.rb +0 -73
  194. data/starter-app/vendor/plugins/spree/app/helpers/admin/variations_helper.rb +0 -2
  195. data/starter-app/vendor/plugins/spree/app/models/variation.rb +0 -8
  196. data/starter-app/vendor/plugins/spree/app/views/admin/option_types/test.rhtml +0 -8
  197. data/starter-app/vendor/plugins/spree/app/views/admin/products/_variations.rhtml +0 -41
  198. data/starter-app/vendor/plugins/spree/app/views/admin/variations/_form.rhtml +0 -33
  199. data/starter-app/vendor/plugins/spree/app/views/admin/variations/_option_values.rhtml +0 -5
  200. data/starter-app/vendor/plugins/spree/app/views/admin/variations/list.rhtml +0 -23
  201. data/starter-app/vendor/plugins/spree/app/views/admin/variations/new.rhtml +0 -14
  202. data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo142x65.gif +0 -0
  203. data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo245x112.gif +0 -0
  204. data/starter-app/vendor/plugins/spree/db/migrate/011_create_variations.rb +0 -11
  205. data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variations.rb +0 -12
  206. data/starter-app/vendor/plugins/spree/test/functional/admin/variations_controller_test.rb +0 -18
  207. data/starter-app/vendor/plugins/spree/test/integration/variations_test.rb +0 -24
  208. data/starter-app/vendor/plugins/spree/test/unit/cart_item_test.rb +0 -55
  209. data/starter-app/vendor/plugins/spree/test/unit/cart_test.rb +0 -35
  210. data/starter-app/vendor/plugins/spree/test/unit/line_item_test.rb +0 -61
  211. data/starter-app/vendor/plugins/spree/test/unit/variation_test.rb +0 -9
@@ -0,0 +1,39 @@
1
+ # This file is copied to ~/spec when you run 'ruby script/generate rspec'
2
+ # from the project root directory.
3
+ ENV["RAILS_ENV"] = "test"
4
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
5
+ require 'spec'
6
+ require 'spec/rails'
7
+
8
+ Spec::Runner.configure do |config|
9
+ # If you're not using ActiveRecord you should remove these
10
+ # lines, delete config/database.yml and disable :active_record
11
+ # in your config/boot.rb
12
+ config.use_transactional_fixtures = true
13
+ config.use_instantiated_fixtures = false
14
+ config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
15
+
16
+ # == Fixtures
17
+ #
18
+ # You can declare fixtures for each example_group like this:
19
+ # describe "...." do
20
+ # fixtures :table_a, :table_b
21
+ #
22
+ # Alternatively, if you prefer to declare them only once, you can
23
+ # do so right here. Just uncomment the next line and replace the fixture
24
+ # names with your fixtures.
25
+ #
26
+ # config.global_fixtures = :table_a, :table_b
27
+ #
28
+ # If you declare global fixtures, be aware that they will be declared
29
+ # for all of your examples, even those that don't use them.
30
+ #
31
+ # == Mock Framework
32
+ #
33
+ # RSpec uses it's own mocking framework by default. If you prefer to
34
+ # use mocha, flexmock or RR, uncomment the appropriate line:
35
+ #
36
+ # config.mock_with :mocha
37
+ # config.mock_with :flexmock
38
+ # config.mock_with :rr
39
+ end
@@ -0,0 +1,3 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'spec/rails/story_adapter'
@@ -0,0 +1,33 @@
1
+ Description:
2
+ The rspec_controller generator creates stub specs and files for a new
3
+ controller and its views.
4
+
5
+ The generator takes a controller name and a list of views as arguments.
6
+ The controller name may be given in CamelCase or under_score and should
7
+ not be suffixed with 'Controller'. To create a controller within a
8
+ module, specify the controller name as 'module/controller'.
9
+
10
+ The generator creates stubs for a controller (and spec), a view (and spec)
11
+ for each view in the argument list, plus a helper.
12
+
13
+ Example:
14
+ ./script/generate rspec_controller dog bark fetch
15
+ ...
16
+ create spec/controllers/dog_controller_spec.rb
17
+ create app/controllers/dog_controller.rb
18
+ create app/helpers/dog_helper.rb
19
+ create spec/views/dog/bark_view_spec.rb
20
+ create app/views/dog/bark.rhtml
21
+ create spec/views/dog/fetch_view_spec.rb
22
+ create app/views/dog/fetch.rhtml
23
+
24
+ Modules Example:
25
+ ./script/generate rspec_controller 'pets/dog' bark fetch
26
+ ...
27
+ create spec/controllers/pets/dog_controller_spec.rb
28
+ create app/controllers/pets/dog_controller.rb
29
+ create app/helpers/pets/dog_helper.rb
30
+ create spec/views/pets/dog/bark_view_spec.rb
31
+ create app/views/pets/dog/bark.rhtml
32
+ create spec/views/pets/dog/fetch_view_spec.rb
33
+ create app/views/pets/dog/fetch.rhtml
@@ -0,0 +1,49 @@
1
+ require 'rails_generator/generators/components/controller/controller_generator'
2
+
3
+ class RspecControllerGenerator < ControllerGenerator
4
+
5
+ def manifest
6
+ record do |m|
7
+ # Check for class naming collisions.
8
+ m.class_collisions class_path, "#{class_name}Controller", "#{class_name}Helper"
9
+
10
+ # Controller, helper, views, and spec directories.
11
+ m.directory File.join('app/controllers', class_path)
12
+ m.directory File.join('app/helpers', class_path)
13
+ m.directory File.join('app/views', class_path, file_name)
14
+ m.directory File.join('spec/controllers', class_path)
15
+ m.directory File.join('spec/helpers', class_path)
16
+ m.directory File.join('spec/views', class_path, file_name)
17
+
18
+ if Rails::VERSION::STRING < "2.0.0"
19
+ @default_file_extension = "rhtml"
20
+ else
21
+ @default_file_extension = "html.erb"
22
+ end
23
+
24
+ # Controller spec, class, and helper.
25
+ m.template 'controller_spec.rb',
26
+ File.join('spec/controllers', class_path, "#{file_name}_controller_spec.rb")
27
+
28
+ m.template 'helper_spec.rb',
29
+ File.join('spec/helpers', class_path, "#{file_name}_helper_spec.rb")
30
+
31
+ m.template 'controller:controller.rb',
32
+ File.join('app/controllers', class_path, "#{file_name}_controller.rb")
33
+
34
+ m.template 'controller:helper.rb',
35
+ File.join('app/helpers', class_path, "#{file_name}_helper.rb")
36
+
37
+ # Spec and view template for each action.
38
+ actions.each do |action|
39
+ m.template 'view_spec.rb',
40
+ File.join('spec/views', class_path, file_name, "#{action}.#{@default_file_extension}_spec.rb"),
41
+ :assigns => { :action => action, :model => file_name }
42
+ path = File.join('app/views', class_path, file_name, "#{action}.#{@default_file_extension}")
43
+ m.template "controller:view.#{@default_file_extension}",
44
+ path,
45
+ :assigns => { :action => action, :path => path }
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper'
2
+
3
+ describe <%= class_name %>Controller do
4
+
5
+ <% if actions.empty? -%>
6
+ #Delete this example and add some real ones
7
+ <% else -%>
8
+ #Delete these examples and add some real ones
9
+ <% end -%>
10
+ it "should use <%= class_name %>Controller" do
11
+ controller.should be_an_instance_of(<%= class_name %>Controller)
12
+ end
13
+
14
+ <% unless actions.empty? -%>
15
+ <% for action in actions -%>
16
+
17
+ describe "GET '<%= action %>'" do
18
+ it "should be successful" do
19
+ get '<%= action %>'
20
+ response.should be_success
21
+ end
22
+ end
23
+ <% end -%>
24
+ <% end -%>
25
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper'
2
+
3
+ describe <%= class_name %>Helper do
4
+
5
+ #Delete this example and add some real ones or delete this file
6
+ it "should include the <%= class_name %>Helper" do
7
+ included_modules = self.metaclass.send :included_modules
8
+ included_modules.should include(<%= class_name %>Helper)
9
+ end
10
+
11
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper'
2
+
3
+ describe "/<%= class_name.underscore %>/<%= action %>" do
4
+ before(:each) do
5
+ render '<%= class_name.underscore %>/<%= action %>'
6
+ end
7
+
8
+ #Delete this example and add some real ones or delete this file
9
+ it "should tell you where to find the file" do
10
+ response.should have_tag('p', /Find me in app\/views\/<%= class_name.underscore %>\/<%= action %>/)
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ Description:
2
+ The rspec_model generator creates stubs for a new model.
3
+
4
+ The generator takes a model name as its argument. The model name may be
5
+ given in CamelCase or under_score and should not be suffixed with 'Model'.
6
+
7
+ The generator creates a model class in app/models, an RSpec spec in
8
+ spec/models, database fixtures in spec/fixtures/plural_name.yml, and a migration
9
+ in db/migrate.
10
+
11
+ Example:
12
+ ./script/generate rspec_model Account
13
+
14
+ This will create an Account model:
15
+ Model: app/models/account.rb
16
+ Spec: spec/models/account_spec.rb
17
+ Fixtures: spec/fixtures/accounts.yml
18
+ Migration: db/migrate/XXX_add_accounts.rb
@@ -0,0 +1,30 @@
1
+ require 'rails_generator/generators/components/model/model_generator'
2
+
3
+ class RspecModelGenerator < ModelGenerator
4
+
5
+ def manifest
6
+
7
+ record do |m|
8
+ # Check for class naming collisions.
9
+ m.class_collisions class_path, class_name
10
+
11
+ # Model, spec, and fixture directories.
12
+ m.directory File.join('app/models', class_path)
13
+ m.directory File.join('spec/models', class_path)
14
+ m.directory File.join('spec/fixtures', class_path)
15
+
16
+ # Model class, spec and fixtures.
17
+ m.template 'model:model.rb', File.join('app/models', class_path, "#{file_name}.rb")
18
+ m.template 'model:fixtures.yml', File.join('spec/fixtures', class_path, "#{table_name}.yml")
19
+ m.template 'model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
20
+
21
+ unless options[:skip_migration]
22
+ m.migration_template 'model:migration.rb', 'db/migrate', :assigns => {
23
+ :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
24
+ }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
25
+ end
26
+
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper'
2
+
3
+ describe <%= class_name %> do
4
+ before(:each) do
5
+ @<%= file_name %> = <%= class_name %>.new
6
+ end
7
+
8
+ it "should be valid" do
9
+ @<%= file_name %>.should be_valid
10
+ end
11
+ end
@@ -0,0 +1,167 @@
1
+ class RspecScaffoldGenerator < Rails::Generator::NamedBase
2
+ default_options :skip_migration => false
3
+
4
+ attr_reader :controller_name,
5
+ :controller_class_path,
6
+ :controller_file_path,
7
+ :controller_class_nesting,
8
+ :controller_class_nesting_depth,
9
+ :controller_class_name,
10
+ :controller_singular_name,
11
+ :controller_plural_name,
12
+ :resource_edit_path,
13
+ :default_file_extension
14
+ alias_method :controller_file_name, :controller_singular_name
15
+ alias_method :controller_table_name, :controller_plural_name
16
+
17
+ def initialize(runtime_args, runtime_options = {})
18
+ super
19
+
20
+ @controller_name = @name.pluralize
21
+
22
+ base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name)
23
+ @controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(base_name)
24
+
25
+ if @controller_class_nesting.empty?
26
+ @controller_class_name = @controller_class_name_without_nesting
27
+ else
28
+ @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
29
+ end
30
+
31
+ if Rails::VERSION::STRING < "2.0.0"
32
+ @resource_generator = "scaffold_resource"
33
+ @default_file_extension = "rhtml"
34
+ else
35
+ @resource_generator = "scaffold"
36
+ @default_file_extension = "html.erb"
37
+ end
38
+
39
+ if ActionController::Base.respond_to?(:resource_action_separator)
40
+ @resource_edit_path = "/edit"
41
+ else
42
+ @resource_edit_path = ";edit"
43
+ end
44
+ end
45
+
46
+ def manifest
47
+ record do |m|
48
+
49
+ # Check for class naming collisions.
50
+ m.class_collisions(controller_class_path, "#{controller_class_name}Controller", "#{controller_class_name}Helper")
51
+ m.class_collisions(class_path, "#{class_name}")
52
+
53
+ # Controller, helper, views, and spec directories.
54
+ m.directory(File.join('app/models', class_path))
55
+ m.directory(File.join('app/controllers', controller_class_path))
56
+ m.directory(File.join('app/helpers', controller_class_path))
57
+ m.directory(File.join('app/views', controller_class_path, controller_file_name))
58
+ m.directory(File.join('spec/controllers', controller_class_path))
59
+ m.directory(File.join('spec/models', class_path))
60
+ m.directory(File.join('spec/helpers', class_path))
61
+ m.directory File.join('spec/fixtures', class_path)
62
+ m.directory File.join('spec/views', controller_class_path, controller_file_name)
63
+
64
+ # Controller spec, class, and helper.
65
+ m.template 'rspec_scaffold:routing_spec.rb',
66
+ File.join('spec/controllers', controller_class_path, "#{controller_file_name}_routing_spec.rb")
67
+
68
+ m.template 'rspec_scaffold:controller_spec.rb',
69
+ File.join('spec/controllers', controller_class_path, "#{controller_file_name}_controller_spec.rb")
70
+
71
+ m.template "#{@resource_generator}:controller.rb",
72
+ File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
73
+
74
+ m.template 'rspec_scaffold:helper_spec.rb',
75
+ File.join('spec/helpers', class_path, "#{controller_file_name}_helper_spec.rb")
76
+
77
+ m.template "#{@resource_generator}:helper.rb",
78
+ File.join('app/helpers', controller_class_path, "#{controller_file_name}_helper.rb")
79
+
80
+ for action in scaffold_views
81
+ m.template(
82
+ "#{@resource_generator}:view_#{action}.#{@default_file_extension}",
83
+ File.join('app/views', controller_class_path, controller_file_name, "#{action}.#{default_file_extension}")
84
+ )
85
+ end
86
+
87
+ # Model class, unit test, and fixtures.
88
+ m.template 'model:model.rb', File.join('app/models', class_path, "#{file_name}.rb")
89
+ m.template 'model:fixtures.yml', File.join('spec/fixtures', class_path, "#{table_name}.yml")
90
+ m.template 'rspec_model:model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
91
+
92
+ # View specs
93
+ m.template "rspec_scaffold:edit_erb_spec.rb",
94
+ File.join('spec/views', controller_class_path, controller_file_name, "edit.#{default_file_extension}_spec.rb")
95
+ m.template "rspec_scaffold:index_erb_spec.rb",
96
+ File.join('spec/views', controller_class_path, controller_file_name, "index.#{default_file_extension}_spec.rb")
97
+ m.template "rspec_scaffold:new_erb_spec.rb",
98
+ File.join('spec/views', controller_class_path, controller_file_name, "new.#{default_file_extension}_spec.rb")
99
+ m.template "rspec_scaffold:show_erb_spec.rb",
100
+ File.join('spec/views', controller_class_path, controller_file_name, "show.#{default_file_extension}_spec.rb")
101
+
102
+ unless options[:skip_migration]
103
+ m.migration_template(
104
+ 'model:migration.rb', 'db/migrate',
105
+ :assigns => {
106
+ :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}",
107
+ :attributes => attributes
108
+ },
109
+ :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
110
+ )
111
+ end
112
+
113
+ m.route_resources controller_file_name
114
+
115
+ end
116
+ end
117
+
118
+ protected
119
+ # Override with your own usage banner.
120
+ def banner
121
+ "Usage: #{$0} rspec_scaffold ModelName [field:type field:type]"
122
+ end
123
+
124
+ def add_options!(opt)
125
+ opt.separator ''
126
+ opt.separator 'Options:'
127
+ opt.on("--skip-migration",
128
+ "Don't generate a migration file for this model") { |v| options[:skip_migration] = v }
129
+ end
130
+
131
+ def scaffold_views
132
+ %w[ index show new edit ]
133
+ end
134
+
135
+ def model_name
136
+ class_name.demodulize
137
+ end
138
+ end
139
+
140
+ module Rails
141
+ module Generator
142
+ class GeneratedAttribute
143
+ def default_value
144
+ @default_value ||= case type
145
+ when :int, :integer then "\"1\""
146
+ when :float then "\"1.5\""
147
+ when :decimal then "\"9.99\""
148
+ when :datetime, :timestamp, :time then "Time.now"
149
+ when :date then "Date.today"
150
+ when :string then "\"MyString\""
151
+ when :text then "\"MyText\""
152
+ when :boolean then "false"
153
+ else
154
+ ""
155
+ end
156
+ end
157
+
158
+ def input_type
159
+ @input_type ||= case type
160
+ when :text then "textarea"
161
+ else
162
+ "input"
163
+ end
164
+ end
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,313 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper'
2
+
3
+ describe <%= controller_class_name %>Controller do
4
+ describe "handling GET /<%= table_name %>" do
5
+
6
+ before(:each) do
7
+ @<%= file_name %> = mock_model(<%= class_name %>)
8
+ <%= class_name %>.stub!(:find).and_return([@<%= file_name %>])
9
+ end
10
+
11
+ def do_get
12
+ get :index
13
+ end
14
+
15
+ it "should be successful" do
16
+ do_get
17
+ response.should be_success
18
+ end
19
+
20
+ it "should render index template" do
21
+ do_get
22
+ response.should render_template('index')
23
+ end
24
+
25
+ it "should find all <%= table_name %>" do
26
+ <%= class_name %>.should_receive(:find).with(:all).and_return([@<%= file_name %>])
27
+ do_get
28
+ end
29
+
30
+ it "should assign the found <%= table_name %> for the view" do
31
+ do_get
32
+ assigns[:<%= table_name %>].should == [@<%= file_name %>]
33
+ end
34
+ end
35
+
36
+ describe "handling GET /<%= table_name %>.xml" do
37
+
38
+ before(:each) do
39
+ @<%= file_name %> = mock_model(<%= class_name %>, :to_xml => "XML")
40
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
41
+ end
42
+
43
+ def do_get
44
+ @request.env["HTTP_ACCEPT"] = "application/xml"
45
+ get :index
46
+ end
47
+
48
+ it "should be successful" do
49
+ do_get
50
+ response.should be_success
51
+ end
52
+
53
+ it "should find all <%= table_name %>" do
54
+ <%= class_name %>.should_receive(:find).with(:all).and_return([@<%= file_name %>])
55
+ do_get
56
+ end
57
+
58
+ it "should render the found <%= table_name %> as xml" do
59
+ @<%= file_name %>.should_receive(:to_xml).and_return("XML")
60
+ do_get
61
+ response.body.should == "XML"
62
+ end
63
+ end
64
+
65
+ describe "handling GET /<%= table_name %>/1" do
66
+
67
+ before(:each) do
68
+ @<%= file_name %> = mock_model(<%= class_name %>)
69
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
70
+ end
71
+
72
+ def do_get
73
+ get :show, :id => "1"
74
+ end
75
+
76
+ it "should be successful" do
77
+ do_get
78
+ response.should be_success
79
+ end
80
+
81
+ it "should render show template" do
82
+ do_get
83
+ response.should render_template('show')
84
+ end
85
+
86
+ it "should find the <%= file_name %> requested" do
87
+ <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
88
+ do_get
89
+ end
90
+
91
+ it "should assign the found <%= file_name %> for the view" do
92
+ do_get
93
+ assigns[:<%= file_name %>].should equal(@<%= file_name %>)
94
+ end
95
+ end
96
+
97
+ describe "handling GET /<%= table_name %>/1.xml" do
98
+
99
+ before(:each) do
100
+ @<%= file_name %> = mock_model(<%= class_name %>, :to_xml => "XML")
101
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
102
+ end
103
+
104
+ def do_get
105
+ @request.env["HTTP_ACCEPT"] = "application/xml"
106
+ get :show, :id => "1"
107
+ end
108
+
109
+ it "should be successful" do
110
+ do_get
111
+ response.should be_success
112
+ end
113
+
114
+ it "should find the <%= file_name %> requested" do
115
+ <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
116
+ do_get
117
+ end
118
+
119
+ it "should render the found <%= file_name %> as xml" do
120
+ @<%= file_name %>.should_receive(:to_xml).and_return("XML")
121
+ do_get
122
+ response.body.should == "XML"
123
+ end
124
+ end
125
+
126
+ describe "handling GET /<%= table_name %>/new" do
127
+
128
+ before(:each) do
129
+ @<%= file_name %> = mock_model(<%= class_name %>)
130
+ <%= class_name %>.stub!(:new).and_return(@<%= file_name %>)
131
+ end
132
+
133
+ def do_get
134
+ get :new
135
+ end
136
+
137
+ it "should be successful" do
138
+ do_get
139
+ response.should be_success
140
+ end
141
+
142
+ it "should render new template" do
143
+ do_get
144
+ response.should render_template('new')
145
+ end
146
+
147
+ it "should create an new <%= file_name %>" do
148
+ <%= class_name %>.should_receive(:new).and_return(@<%= file_name %>)
149
+ do_get
150
+ end
151
+
152
+ it "should not save the new <%= file_name %>" do
153
+ @<%= file_name %>.should_not_receive(:save)
154
+ do_get
155
+ end
156
+
157
+ it "should assign the new <%= file_name %> for the view" do
158
+ do_get
159
+ assigns[:<%= file_name %>].should equal(@<%= file_name %>)
160
+ end
161
+ end
162
+
163
+ describe "handling GET /<%= table_name %>/1/edit" do
164
+
165
+ before(:each) do
166
+ @<%= file_name %> = mock_model(<%= class_name %>)
167
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
168
+ end
169
+
170
+ def do_get
171
+ get :edit, :id => "1"
172
+ end
173
+
174
+ it "should be successful" do
175
+ do_get
176
+ response.should be_success
177
+ end
178
+
179
+ it "should render edit template" do
180
+ do_get
181
+ response.should render_template('edit')
182
+ end
183
+
184
+ it "should find the <%= file_name %> requested" do
185
+ <%= class_name %>.should_receive(:find).and_return(@<%= file_name %>)
186
+ do_get
187
+ end
188
+
189
+ it "should assign the found <%= class_name %> for the view" do
190
+ do_get
191
+ assigns[:<%= file_name %>].should equal(@<%= file_name %>)
192
+ end
193
+ end
194
+
195
+ describe "handling POST /<%= table_name %>" do
196
+
197
+ before(:each) do
198
+ @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1")
199
+ <%= class_name %>.stub!(:new).and_return(@<%= file_name %>)
200
+ end
201
+
202
+ describe "with successful save" do
203
+
204
+ def do_post
205
+ @<%= file_name %>.should_receive(:save).and_return(true)
206
+ post :create, :<%= file_name %> => {}
207
+ end
208
+
209
+ it "should create a new <%= file_name %>" do
210
+ <%= class_name %>.should_receive(:new).with({}).and_return(@<%= file_name %>)
211
+ do_post
212
+ end
213
+
214
+ it "should redirect to the new <%= file_name %>" do
215
+ do_post
216
+ response.should redirect_to(<%= table_name.singularize %>_url("1"))
217
+ end
218
+
219
+ end
220
+
221
+ describe "with failed save" do
222
+
223
+ def do_post
224
+ @<%= file_name %>.should_receive(:save).and_return(false)
225
+ post :create, :<%= file_name %> => {}
226
+ end
227
+
228
+ it "should re-render 'new'" do
229
+ do_post
230
+ response.should render_template('new')
231
+ end
232
+
233
+ end
234
+ end
235
+
236
+ describe "handling PUT /<%= table_name %>/1" do
237
+
238
+ before(:each) do
239
+ @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1")
240
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
241
+ end
242
+
243
+ describe "with successful update" do
244
+
245
+ def do_put
246
+ @<%= file_name %>.should_receive(:update_attributes).and_return(true)
247
+ put :update, :id => "1"
248
+ end
249
+
250
+ it "should find the <%= file_name %> requested" do
251
+ <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
252
+ do_put
253
+ end
254
+
255
+ it "should update the found <%= file_name %>" do
256
+ do_put
257
+ assigns(:<%= file_name %>).should equal(@<%= file_name %>)
258
+ end
259
+
260
+ it "should assign the found <%= file_name %> for the view" do
261
+ do_put
262
+ assigns(:<%= file_name %>).should equal(@<%= file_name %>)
263
+ end
264
+
265
+ it "should redirect to the <%= file_name %>" do
266
+ do_put
267
+ response.should redirect_to(<%= table_name.singularize %>_url("1"))
268
+ end
269
+
270
+ end
271
+
272
+ describe "with failed update" do
273
+
274
+ def do_put
275
+ @<%= file_name %>.should_receive(:update_attributes).and_return(false)
276
+ put :update, :id => "1"
277
+ end
278
+
279
+ it "should re-render 'edit'" do
280
+ do_put
281
+ response.should render_template('edit')
282
+ end
283
+
284
+ end
285
+ end
286
+
287
+ describe "handling DELETE /<%= table_name %>/1" do
288
+
289
+ before(:each) do
290
+ @<%= file_name %> = mock_model(<%= class_name %>, :destroy => true)
291
+ <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
292
+ end
293
+
294
+ def do_delete
295
+ delete :destroy, :id => "1"
296
+ end
297
+
298
+ it "should find the <%= file_name %> requested" do
299
+ <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
300
+ do_delete
301
+ end
302
+
303
+ it "should call destroy on the found <%= file_name %>" do
304
+ @<%= file_name %>.should_receive(:destroy)
305
+ do_delete
306
+ end
307
+
308
+ it "should redirect to the <%= table_name %> list" do
309
+ do_delete
310
+ response.should redirect_to(<%= table_name %>_url)
311
+ end
312
+ end
313
+ end