spree 0.0.7 → 0.0.8

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 (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,12 @@
1
+ require 'spec'
2
+
3
+ require 'spec/rails/extensions/object'
4
+
5
+ require 'spec/rails/extensions/spec/example/configuration'
6
+ require 'spec/rails/extensions/spec/matchers/have'
7
+
8
+ require 'spec/rails/extensions/active_record/base'
9
+ require 'spec/rails/extensions/action_controller/base'
10
+ require 'spec/rails/extensions/action_controller/rescue'
11
+ require 'spec/rails/extensions/action_controller/test_response'
12
+ require 'spec/rails/extensions/action_view/base'
@@ -0,0 +1,14 @@
1
+ module ActionController
2
+ class Base
3
+ class << self
4
+ def set_view_path(path)
5
+ [:append_view_path, :view_paths=, :template_root=].each do |method|
6
+ if respond_to?(method)
7
+ return send(method, path)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,21 @@
1
+ module ActionController
2
+ module Rescue
3
+ def use_rails_error_handling!
4
+ @use_rails_error_handling = true
5
+ end
6
+
7
+ def use_rails_error_handling?
8
+ @use_rails_error_handling ||= false
9
+ end
10
+
11
+ protected
12
+ def rescue_action_with_fast_errors(exception)
13
+ if use_rails_error_handling?
14
+ rescue_action_without_fast_errors exception
15
+ else
16
+ raise exception
17
+ end
18
+ end
19
+ alias_method_chain :rescue_action, :fast_errors
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module ActionController #:nodoc:
2
+ class TestResponse #:nodoc:
3
+ attr_writer :controller_path
4
+
5
+ def capture(name)
6
+ template.instance_variable_get "@content_for_#{name.to_s}"
7
+ end
8
+ alias [] capture
9
+
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ module ActionView #:nodoc:
2
+ class Base #:nodoc:
3
+ include Spec::Rails::Example::RenderObserver
4
+ cattr_accessor :base_view_path
5
+ def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc:
6
+ if partial_path.is_a?(String)
7
+ unless partial_path.include?("/")
8
+ unless self.class.base_view_path.nil?
9
+ partial_path = "#{self.class.base_view_path}/#{partial_path}"
10
+ end
11
+ end
12
+ end
13
+ super(partial_path, local_assigns, deprecated_local_assigns)
14
+ end
15
+
16
+ alias_method :orig_render, :render
17
+ def render(options = {}, old_local_assigns = {}, &block)
18
+ if expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
19
+ expect_render_mock_proxy.render(options)
20
+ else
21
+ unless expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options)
22
+ orig_render(options, old_local_assigns, &block)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ if defined?(ActiveRecord::Base)
2
+ module ActiveRecord #:nodoc:
3
+ class Base
4
+
5
+ (class << self; self; end).class_eval do
6
+ # Extension for <tt>should have</tt> on AR Model classes
7
+ #
8
+ # ModelClass.should have(:no).records
9
+ # ModelClass.should have(1).record
10
+ # ModelClass.should have(n).records
11
+ def records
12
+ find(:all)
13
+ end
14
+ alias :record :records
15
+ end
16
+
17
+ # Extension for <tt>should have</tt> on AR Model instances
18
+ #
19
+ # model.should have(:no).errors_on(:attribute)
20
+ # model.should have(1).error_on(:attribute)
21
+ # model.should have(n).errors_on(:attribute)
22
+ def errors_on(attribute)
23
+ self.valid?
24
+ [self.errors.on(attribute)].flatten.compact
25
+ end
26
+ alias :error_on :errors_on
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,5 @@
1
+ class Object # :nodoc:
2
+ def self.path2class(klassname)
3
+ klassname.split('::').inject(Object) { |k,n| k.const_get n }
4
+ end
5
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec/example/configuration'
2
+
3
+ module Spec
4
+ module Example
5
+ class Configuration
6
+ # Rails 1.2.3 does a copy of the @inheritable_attributes to the subclass when the subclass is
7
+ # created. This causes an ordering issue when setting state on Configuration because the data is
8
+ # already copied.
9
+ # Iterating over EXAMPLE_GROUP_CLASSES causes the base ExampleGroup classes to have their
10
+ # @inheritable_attributes updated.
11
+ # TODO: BT - When we no longer support Rails 1.2.3, we can remove this functionality
12
+ EXAMPLE_GROUP_CLASSES = [
13
+ ::Test::Unit::TestCase,
14
+ ::Spec::Rails::Example::RailsExampleGroup,
15
+ ::Spec::Rails::Example::FunctionalExampleGroup,
16
+ ::Spec::Rails::Example::ControllerExampleGroup,
17
+ ::Spec::Rails::Example::ViewExampleGroup,
18
+ ::Spec::Rails::Example::HelperExampleGroup,
19
+ ::Spec::Rails::Example::ModelExampleGroup
20
+ ]
21
+ # All of this is ActiveRecord related and makes no sense if it's not used by the app
22
+ if defined?(ActiveRecord::Base)
23
+ def initialize
24
+ super
25
+ self.fixture_path = RAILS_ROOT + '/spec/fixtures'
26
+ end
27
+
28
+ def use_transactional_fixtures
29
+ Test::Unit::TestCase.use_transactional_fixtures
30
+ end
31
+ def use_transactional_fixtures=(value)
32
+ EXAMPLE_GROUP_CLASSES.each do |example_group|
33
+ example_group.use_transactional_fixtures = value
34
+ end
35
+ end
36
+
37
+ def use_instantiated_fixtures
38
+ Test::Unit::TestCase.use_instantiated_fixtures
39
+ end
40
+ def use_instantiated_fixtures=(value)
41
+ EXAMPLE_GROUP_CLASSES.each do |example_group|
42
+ example_group.use_instantiated_fixtures = value
43
+ end
44
+ end
45
+
46
+ def fixture_path
47
+ Test::Unit::TestCase.fixture_path
48
+ end
49
+ def fixture_path=(path)
50
+ EXAMPLE_GROUP_CLASSES.each do |example_group|
51
+ example_group.fixture_path = path
52
+ end
53
+ end
54
+
55
+ def global_fixtures
56
+ ::Test::Unit::TestCase.fixture_table_names
57
+ end
58
+ def global_fixtures=(fixtures)
59
+ EXAMPLE_GROUP_CLASSES.each do |example_group|
60
+ example_group.fixtures(*fixtures)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec/matchers/have'
2
+
3
+ module Spec #:nodoc:
4
+ module Matchers #:nodoc:
5
+ class Have #:nodoc:
6
+ alias_method :__original_failure_message, :failure_message
7
+ def failure_message
8
+ return "expected #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}, got #{@actual}" if @collection_name == :errors_on
9
+ return "expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@actual}" if @collection_name == :error_on
10
+ return __original_failure_message
11
+ end
12
+
13
+ alias_method :__original_description, :description
14
+ def description
15
+ return "should have #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}" if @collection_name == :errors_on
16
+ return "should have #{relativities[@relativity]}#{@expected} error on :#{@args[0]}" if @collection_name == :error_on
17
+ return __original_description
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ dir = File.dirname(__FILE__)
2
+ require 'spec/rails/matchers/assert_select'
3
+ require 'spec/rails/matchers/have_text'
4
+ require 'spec/rails/matchers/redirect_to'
5
+ require 'spec/rails/matchers/render_template'
6
+
7
+ module Spec
8
+ module Rails
9
+ # Spec::Rails::Expectations::Matchers provides several expectation matchers
10
+ # intended to work with Rails components like models and responses. For example:
11
+ #
12
+ # response.should redirect_to("some/url") #redirect_to(url) is the matcher.
13
+ #
14
+ # In addition to those you see below, the arbitrary predicate feature of RSpec
15
+ # makes the following available as well:
16
+ #
17
+ # response.should be_success #passes if response.success?
18
+ # response.should be_redirect #passes if response.redirect?
19
+ #
20
+ # Note that many of these matchers are part of a wrapper of <tt>assert_select</tt>, so
21
+ # the documentation comes straight from that with some slight modifications.
22
+ # <tt>assert_select</tt> is a Test::Unit extension originally contributed to the
23
+ # Rails community as a plugin by Assaf Arkin and eventually shipped as part of Rails.
24
+ #
25
+ # For more info on <tt>assert_select</tt>, see the relevant Rails documentation.
26
+ module Matchers
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,130 @@
1
+ # This is a wrapper of assert_select for rspec.
2
+
3
+ module Spec # :nodoc:
4
+ module Rails
5
+ module Matchers
6
+
7
+ class AssertSelect #:nodoc:
8
+
9
+ def initialize(assertion, spec_scope, *args, &block)
10
+ @assertion = assertion
11
+ @spec_scope = spec_scope
12
+ @args = args
13
+ @block = block
14
+ end
15
+
16
+ def matches?(response_or_text, &block)
17
+ if ActionController::TestResponse === response_or_text and
18
+ response_or_text.headers.key?('Content-Type') and
19
+ response_or_text.headers['Content-Type'].to_sym == :xml
20
+ @args.unshift(HTML::Document.new(response_or_text.body, false, true).root)
21
+ elsif String === response_or_text
22
+ @args.unshift(HTML::Document.new(response_or_text).root)
23
+ end
24
+ @block = block if block
25
+ begin
26
+ @spec_scope.send(@assertion, *@args, &@block)
27
+ rescue ::Test::Unit::AssertionFailedError => @error
28
+ end
29
+
30
+ @error.nil?
31
+ end
32
+
33
+ def failure_message; @error.message; end
34
+ def negative_failure_message; "should not #{description}, but did"; end
35
+
36
+ def description
37
+ {
38
+ :assert_select => "have tag#{format_args(*@args)}",
39
+ :assert_select_email => "send email#{format_args(*@args)}",
40
+ }[@assertion]
41
+ end
42
+
43
+ private
44
+
45
+ def format_args(*args)
46
+ return "" if args.empty?
47
+ return "(#{arg_list(*args)})"
48
+ end
49
+
50
+ def arg_list(*args)
51
+ args.collect do |arg|
52
+ arg.respond_to?(:description) ? arg.description : arg.inspect
53
+ end.join(", ")
54
+ end
55
+
56
+ end
57
+
58
+ # :call-seq:
59
+ # response.should have_tag(*args, &block)
60
+ # string.should have_tag(*args, &block)
61
+ #
62
+ # wrapper for assert_select with additional support for using
63
+ # css selectors to set expectation on Strings. Use this in
64
+ # helper specs, for example, to set expectations on the results
65
+ # of helper methods.
66
+ #
67
+ # == Examples
68
+ #
69
+ # # in a controller spec
70
+ # response.should have_tag("div", "some text")
71
+ #
72
+ # # in a helper spec (person_address_tag is a method in the helper)
73
+ # person_address_tag.should have_tag("input#person_address")
74
+ #
75
+ # see documentation for assert_select at http://api.rubyonrails.org/
76
+ def have_tag(*args, &block)
77
+ AssertSelect.new(:assert_select, self, *args, &block)
78
+ end
79
+
80
+ # wrapper for a nested assert_select
81
+ #
82
+ # response.should have_tag("div#form") do
83
+ # with_tag("input#person_name[name=?]", "person[name]")
84
+ # end
85
+ #
86
+ # see documentation for assert_select at http://api.rubyonrails.org/
87
+ def with_tag(*args, &block)
88
+ should have_tag(*args, &block)
89
+ end
90
+
91
+ # wrapper for a nested assert_select with false
92
+ #
93
+ # response.should have_tag("div#1") do
94
+ # without_tag("span", "some text that shouldn't be there")
95
+ # end
96
+ #
97
+ # see documentation for assert_select at http://api.rubyonrails.org/
98
+ def without_tag(*args, &block)
99
+ should_not have_tag(*args, &block)
100
+ end
101
+
102
+ # :call-seq:
103
+ # response.should have_rjs(*args, &block)
104
+ #
105
+ # wrapper for assert_select_rjs
106
+ #
107
+ # see documentation for assert_select_rjs at http://api.rubyonrails.org/
108
+ def have_rjs(*args, &block)
109
+ AssertSelect.new(:assert_select_rjs, self, *args, &block)
110
+ end
111
+
112
+ # :call-seq:
113
+ # response.should send_email(*args, &block)
114
+ #
115
+ # wrapper for assert_select_email
116
+ #
117
+ # see documentation for assert_select_email at http://api.rubyonrails.org/
118
+ def send_email(*args, &block)
119
+ AssertSelect.new(:assert_select_email, self, *args, &block)
120
+ end
121
+
122
+ # wrapper for assert_select_encoded
123
+ #
124
+ # see documentation for assert_select_encoded at http://api.rubyonrails.org/
125
+ def with_encoded(*args, &block)
126
+ should AssertSelect.new(:assert_select_encoded, self, *args, &block)
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,55 @@
1
+ module Spec
2
+ module Rails
3
+ module Matchers
4
+
5
+ class HaveText #:nodoc:
6
+
7
+ def initialize(expected)
8
+ @expected = expected
9
+ end
10
+
11
+ def matches?(response_or_text)
12
+ @actual = response_or_text.respond_to?(:body) ? response_or_text.body : response_or_text
13
+ return actual =~ expected if Regexp === expected
14
+ return actual == expected unless Regexp === expected
15
+ end
16
+
17
+ def failure_message
18
+ "expected #{expected.inspect}, got #{actual.inspect}"
19
+ end
20
+
21
+ def negative_failure_message
22
+ "expected not to have text #{expected.inspect}"
23
+ end
24
+
25
+ def to_s
26
+ "have text #{expected.inspect}"
27
+ end
28
+
29
+ private
30
+ attr_reader :expected
31
+ attr_reader :actual
32
+
33
+ end
34
+
35
+ # :call-seq:
36
+ # response.should have_text(expected)
37
+ # response.should_not have_text(expected)
38
+ #
39
+ # Accepts a String or a Regexp, matching a String using ==
40
+ # and a Regexp using =~.
41
+ #
42
+ # Use this instead of <tt>response.should have_tag()</tt>
43
+ # when you either don't know or don't care where on the page
44
+ # this text appears.
45
+ #
46
+ # == Examples
47
+ #
48
+ # response.should have_text("This is the expected text")
49
+ def have_text(text)
50
+ HaveText.new(text)
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,113 @@
1
+ module Spec
2
+ module Rails
3
+ module Matchers
4
+
5
+ class RedirectTo #:nodoc:
6
+
7
+ def initialize(request, expected)
8
+ @expected = expected
9
+ @request = request
10
+ end
11
+
12
+ def matches?(response)
13
+ @redirected = response.redirect?
14
+ @actual = response.redirect_url
15
+ return false unless @redirected
16
+ if @expected.instance_of? Hash
17
+ return false unless @actual =~ %r{^\w+://#{@request.host}}
18
+ return false unless actual_redirect_to_valid_route
19
+ return actual_hash == expected_hash
20
+ else
21
+ return @actual == expected_url
22
+ end
23
+ end
24
+
25
+ def actual_hash
26
+ hash_from_url @actual
27
+ end
28
+
29
+ def expected_hash
30
+ hash_from_url expected_url
31
+ end
32
+
33
+ def actual_redirect_to_valid_route
34
+ actual_hash
35
+ end
36
+
37
+ def hash_from_url(url)
38
+ query_hash(url).merge(path_hash(url)).with_indifferent_access
39
+ end
40
+
41
+ def path_hash(url)
42
+ path = url.sub(%r{^\w+://#{@request.host}}, "").split("?", 2)[0]
43
+ ActionController::Routing::Routes.recognize_path path
44
+ end
45
+
46
+ def query_hash(url)
47
+ query = url.split("?", 2)[1] || ""
48
+ QueryParameterParser.parse_query_parameters(query, @request)
49
+ end
50
+
51
+ def expected_url
52
+ case @expected
53
+ when Hash
54
+ return ActionController::UrlRewriter.new(@request, {}).rewrite(@expected)
55
+ when :back
56
+ return @request.env['HTTP_REFERER']
57
+ when %r{^\w+://.*}
58
+ return @expected
59
+ else
60
+ return "http://#{@request.host}" + (@expected.split('')[0] == '/' ? '' : '/') + @expected
61
+ end
62
+ end
63
+
64
+ def failure_message
65
+ if @redirected
66
+ return %Q{expected redirect to #{@expected.inspect}, got redirect to #{@actual.inspect}}
67
+ else
68
+ return %Q{expected redirect to #{@expected.inspect}, got no redirect}
69
+ end
70
+ end
71
+
72
+ def negative_failure_message
73
+ return %Q{expected not to be redirected to #{@expected.inspect}, but was} if @redirected
74
+ end
75
+
76
+ def description
77
+ "redirect to #{@actual.inspect}"
78
+ end
79
+
80
+ class QueryParameterParser
81
+ def self.parse_query_parameters(query, request)
82
+ if defined?(CGIMethods)
83
+ CGIMethods.parse_query_parameters(query)
84
+ else
85
+ request.class.parse_query_parameters(query)
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ # :call-seq:
92
+ # response.should redirect_to(url)
93
+ # response.should redirect_to(:action => action_name)
94
+ # response.should redirect_to(:controller => controller_name, :action => action_name)
95
+ # response.should_not redirect_to(url)
96
+ # response.should_not redirect_to(:action => action_name)
97
+ # response.should_not redirect_to(:controller => controller_name, :action => action_name)
98
+ #
99
+ # Passes if the response is a redirect to the url, action or controller/action.
100
+ # Useful in controller specs (integration or isolation mode).
101
+ #
102
+ # == Examples
103
+ #
104
+ # response.should redirect_to("path/to/action")
105
+ # response.should redirect_to("http://test.host/path/to/action")
106
+ # response.should redirect_to(:action => 'list')
107
+ def redirect_to(opts)
108
+ RedirectTo.new(request, opts)
109
+ end
110
+ end
111
+
112
+ end
113
+ end