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.
- data/History.txt +5 -0
- data/Manifest.txt +158 -21
- data/config/hoe.rb +2 -1
- data/lib/spree/version.rb +1 -1
- data/starter-app/app/views/layouts/application.rhtml +6 -4
- data/starter-app/db/sample/line_items.yml +6 -4
- data/starter-app/db/sample/{variations.yml → variants.yml} +16 -0
- data/starter-app/log/README +1 -0
- data/starter-app/public/images/spree.jpg +0 -0
- data/starter-app/public/stylesheets/application.css +2 -2
- data/starter-app/script/spec +4 -0
- data/starter-app/script/spec_server +102 -0
- data/starter-app/spec/models/cart_item_spec.rb +50 -0
- data/starter-app/spec/models/cart_spec.rb +51 -0
- data/starter-app/spec/models/line_item_spec.rb +33 -0
- data/starter-app/spec/models/product_spec.rb +29 -0
- data/starter-app/spec/rcov.opts +2 -0
- data/starter-app/spec/spec.opts +6 -0
- data/starter-app/spec/spec_helper.rb +39 -0
- data/starter-app/stories/all.rb +4 -0
- data/starter-app/stories/helper.rb +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/MIT-LICENSE +31 -0
- data/starter-app/vendor/plugins/rspec_on_rails/README +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/Rakefile +9 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/CHANGES +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb +35 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb +4 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec +4 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server +102 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts +6 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb +39 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE +33 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb +49 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb +25 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb +12 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/USAGE +18 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb +30 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb +167 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb +313 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb +25 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb +22 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb +26 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb +61 -0
- data/starter-app/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb +22 -0
- data/starter-app/vendor/plugins/rspec_on_rails/init.rb +9 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/discover.rb +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb +81 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails.rb +51 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb +47 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb +42 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb +255 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb +66 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb +82 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb +62 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb +14 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb +68 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb +90 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb +171 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb +12 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb +14 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb +21 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb +27 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb +30 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb +66 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb +21 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb +29 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb +130 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb +55 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb +113 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb +70 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb +71 -0
- data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb +23 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb +36 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb +8 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb +55 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb +83 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb +43 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb +187 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb +112 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb +118 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb +64 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb +18 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb +16 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb +263 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb +54 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb +48 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb +14 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb +783 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb +37 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb +13 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb +62 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb +203 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb +169 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb +65 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb +7 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb +89 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb +11 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/rails_suite.rb +7 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec/spec_helper.rb +46 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb +56 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb +59 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb +26 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb +58 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb +10 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb +6 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb +13 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml +0 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml +2 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml +3 -0
- data/starter-app/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml +1 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/all.rb +10 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/helper.rb +5 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/steps/people.rb +8 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback +15 -0
- data/starter-app/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb +25 -0
- data/starter-app/vendor/plugins/rspec_on_rails/tasks/rspec.rake +137 -0
- data/starter-app/vendor/plugins/spree/LICENSE +1 -1
- data/starter-app/vendor/plugins/spree/app/controllers/admin/categories_controller.rb +0 -24
- data/starter-app/vendor/plugins/spree/app/controllers/admin/products_controller.rb +16 -16
- data/starter-app/vendor/plugins/spree/app/controllers/cart_controller.rb +2 -8
- data/starter-app/vendor/plugins/spree/app/helpers/admin/products_helper.rb +1 -1
- data/starter-app/vendor/plugins/spree/app/helpers/spree/base_helper.rb +2 -2
- data/starter-app/vendor/plugins/spree/app/models/cart.rb +7 -20
- data/starter-app/vendor/plugins/spree/app/models/cart_item.rb +3 -6
- data/starter-app/vendor/plugins/spree/app/models/category.rb +6 -22
- data/starter-app/vendor/plugins/spree/app/models/line_item.rb +3 -5
- data/starter-app/vendor/plugins/spree/app/models/option_value.rb +1 -1
- data/starter-app/vendor/plugins/spree/app/models/product.rb +18 -2
- data/starter-app/vendor/plugins/spree/app/models/variant.rb +5 -0
- data/starter-app/vendor/plugins/spree/app/views/admin/categories/_form.rhtml +1 -5
- data/starter-app/vendor/plugins/spree/app/views/admin/overview/index.rhtml +3 -0
- data/starter-app/vendor/plugins/spree/app/views/admin/products/_form.rhtml +2 -2
- data/starter-app/vendor/plugins/spree/app/views/admin/products/{_new_variation.rhtml → _new_variant.rhtml} +1 -1
- data/starter-app/vendor/plugins/spree/app/views/admin/products/_variants.rhtml +43 -0
- data/starter-app/vendor/plugins/spree/app/views/cart/index.rhtml +4 -4
- data/starter-app/vendor/plugins/spree/app/views/layouts/admin.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/order_mailer/cancel.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/order_mailer/confirm.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/shared/_order_details.rhtml +1 -1
- data/starter-app/vendor/plugins/spree/app/views/store/show.rhtml +30 -29
- data/starter-app/vendor/plugins/spree/assets/images/spree/spree.jpg +0 -0
- data/starter-app/vendor/plugins/spree/assets/stylesheets/spree-admin.css +1 -1
- data/starter-app/vendor/plugins/spree/assets/stylesheets/store/_controller.css +1 -1
- data/starter-app/vendor/plugins/spree/db/migrate/002_create_cart_items.rb +1 -2
- data/starter-app/vendor/plugins/spree/db/migrate/006_create_line_items.rb +5 -7
- data/starter-app/vendor/plugins/spree/db/migrate/011_create_variants.rb +11 -0
- data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variants.rb +12 -0
- data/starter-app/vendor/plugins/spree/test/unit/product_test.rb +0 -33
- metadata +170 -23
- data/starter-app/vendor/plugins/spree/app/controllers/admin/variations_controller.rb +0 -73
- data/starter-app/vendor/plugins/spree/app/helpers/admin/variations_helper.rb +0 -2
- data/starter-app/vendor/plugins/spree/app/models/variation.rb +0 -8
- data/starter-app/vendor/plugins/spree/app/views/admin/option_types/test.rhtml +0 -8
- data/starter-app/vendor/plugins/spree/app/views/admin/products/_variations.rhtml +0 -41
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/_form.rhtml +0 -33
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/_option_values.rhtml +0 -5
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/list.rhtml +0 -23
- data/starter-app/vendor/plugins/spree/app/views/admin/variations/new.rhtml +0 -14
- data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo142x65.gif +0 -0
- data/starter-app/vendor/plugins/spree/assets/images/spree/spree_logo245x112.gif +0 -0
- data/starter-app/vendor/plugins/spree/db/migrate/011_create_variations.rb +0 -11
- data/starter-app/vendor/plugins/spree/db/migrate/018_create_option_values_variations.rb +0 -12
- data/starter-app/vendor/plugins/spree/test/functional/admin/variations_controller_test.rb +0 -18
- data/starter-app/vendor/plugins/spree/test/integration/variations_test.rb +0 -24
- data/starter-app/vendor/plugins/spree/test/unit/cart_item_test.rb +0 -55
- data/starter-app/vendor/plugins/spree/test/unit/cart_test.rb +0 -35
- data/starter-app/vendor/plugins/spree/test/unit/line_item_test.rb +0 -61
- data/starter-app/vendor/plugins/spree/test/unit/variation_test.rb +0 -9
data/starter-app/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
module Spec
|
2
|
+
module Rails
|
3
|
+
module Example
|
4
|
+
class FunctionalExampleGroup < RailsExampleGroup
|
5
|
+
include ActionController::TestProcess
|
6
|
+
include ActionController::Assertions
|
7
|
+
|
8
|
+
attr_reader :request, :response
|
9
|
+
before(:each) do
|
10
|
+
@controller_class = Object.path2class @controller_class_name
|
11
|
+
raise "Can't determine controller class for #{@controller_class_name}" if @controller_class.nil?
|
12
|
+
|
13
|
+
@controller = @controller_class.new
|
14
|
+
|
15
|
+
@request = ActionController::TestRequest.new
|
16
|
+
@response = ActionController::TestResponse.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def params
|
20
|
+
request.parameters
|
21
|
+
end
|
22
|
+
|
23
|
+
def flash
|
24
|
+
response.flash
|
25
|
+
end
|
26
|
+
|
27
|
+
def session
|
28
|
+
request.session
|
29
|
+
end
|
30
|
+
|
31
|
+
# :call-seq:
|
32
|
+
# assigns()
|
33
|
+
#
|
34
|
+
# Hash of instance variables to values that are made available to
|
35
|
+
# views. == Examples
|
36
|
+
#
|
37
|
+
# #in thing_controller.rb
|
38
|
+
# def new
|
39
|
+
# @thing = Thing.new
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# #in thing_controller_spec
|
43
|
+
# get 'new'
|
44
|
+
# assigns[:registration].should == Thing.new
|
45
|
+
#--
|
46
|
+
# NOTE - Even though docs only use assigns[:key] format, this supports
|
47
|
+
# assigns(:key) in order to avoid breaking old specs.
|
48
|
+
#++
|
49
|
+
def assigns(key = nil)
|
50
|
+
if key.nil?
|
51
|
+
@controller.assigns
|
52
|
+
_controller_ivar_proxy
|
53
|
+
else
|
54
|
+
@controller.assigns[key]
|
55
|
+
_controller_ivar_proxy[key]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
protected
|
60
|
+
def _controller_ivar_proxy
|
61
|
+
@controller_ivar_proxy ||= IvarProxy.new @controller
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Spec
|
2
|
+
module Rails
|
3
|
+
module Example
|
4
|
+
# Helper Specs live in $RAILS_ROOT/spec/helpers/.
|
5
|
+
#
|
6
|
+
# Helper Specs use Spec::Rails::Example::HelperExampleGroup, which allows you to
|
7
|
+
# include your Helper directly in the context and write specs directly
|
8
|
+
# against its methods.
|
9
|
+
#
|
10
|
+
# HelperExampleGroup also includes the standard lot of ActionView::Helpers in case your
|
11
|
+
# helpers rely on any of those.
|
12
|
+
#
|
13
|
+
# == Example
|
14
|
+
#
|
15
|
+
# class ThingHelper
|
16
|
+
# def number_of_things
|
17
|
+
# Thing.count
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# describe "ThingHelper example_group" do
|
22
|
+
# include ThingHelper
|
23
|
+
# it "should tell you the number of things" do
|
24
|
+
# Thing.should_receive(:count).and_return(37)
|
25
|
+
# number_of_things.should == 37
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
class HelperExampleGroup < FunctionalExampleGroup
|
29
|
+
class << self
|
30
|
+
# The helper name....
|
31
|
+
def helper_name(name=nil)
|
32
|
+
send :include, "#{name}_helper".camelize.constantize
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Reverse the load order so that custom helpers which
|
37
|
+
# are defined last are also loaded last.
|
38
|
+
ActionView::Base.included_modules.reverse.each do |mod|
|
39
|
+
include mod if mod.parents.include?(ActionView::Helpers)
|
40
|
+
end
|
41
|
+
|
42
|
+
before(:all) do
|
43
|
+
@controller_class_name = 'Spec::Rails::Example::HelperBehaviourController'
|
44
|
+
end
|
45
|
+
|
46
|
+
before(:each) do
|
47
|
+
@controller.request = @request
|
48
|
+
@controller.url = ActionController::UrlRewriter.new @request, {} # url_for
|
49
|
+
|
50
|
+
@flash = ActionController::Flash::FlashHash.new
|
51
|
+
session['flash'] = @flash
|
52
|
+
|
53
|
+
ActionView::Helpers::AssetTagHelper::reset_javascript_include_default
|
54
|
+
end
|
55
|
+
|
56
|
+
def flash
|
57
|
+
@flash
|
58
|
+
end
|
59
|
+
|
60
|
+
def eval_erb(text)
|
61
|
+
ERB.new(text).result(binding)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# TODO: BT - Helper Examples should proxy method_missing to a Rails View instance.
|
66
|
+
# When that is done, remove this method
|
67
|
+
def protect_against_forgery?
|
68
|
+
false
|
69
|
+
end
|
70
|
+
|
71
|
+
Spec::Example::ExampleGroupFactory.register(:helper, self)
|
72
|
+
end
|
73
|
+
|
74
|
+
class HelperBehaviourController < ApplicationController #:nodoc:
|
75
|
+
attr_accessor :request, :url
|
76
|
+
|
77
|
+
# Re-raise errors
|
78
|
+
def rescue_action(e); raise e; end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
##
|
2
|
+
# A wrapper that allows instance variables to be manipulated using +[]+ and
|
3
|
+
# +[]=+
|
4
|
+
|
5
|
+
module Spec
|
6
|
+
module Rails
|
7
|
+
module Example
|
8
|
+
class IvarProxy #:nodoc:
|
9
|
+
|
10
|
+
##
|
11
|
+
# Wraps +object+ allowing its instance variables to be manipulated.
|
12
|
+
|
13
|
+
def initialize(object)
|
14
|
+
@object = object
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Retrieves +ivar+ from the wrapped object.
|
19
|
+
|
20
|
+
def [](ivar)
|
21
|
+
get_variable "@#{ivar}"
|
22
|
+
end
|
23
|
+
|
24
|
+
##
|
25
|
+
# Sets +ivar+ to +val+ on the wrapped object.
|
26
|
+
|
27
|
+
def []=(ivar, val)
|
28
|
+
set_variable "@#{ivar}", val
|
29
|
+
end
|
30
|
+
|
31
|
+
def each
|
32
|
+
@object.instance_variables.each do |variable_full_name|
|
33
|
+
variable_name = variable_full_name[1...variable_full_name.length]
|
34
|
+
yield variable_name, get_variable(variable_full_name)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete(key)
|
39
|
+
var_name = "@#{key}"
|
40
|
+
if @object.instance_variables.include?(var_name)
|
41
|
+
@object.send(:remove_instance_variable, var_name)
|
42
|
+
else
|
43
|
+
return nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def has_key?(key)
|
48
|
+
@object.instance_variables.include?("@#{key}")
|
49
|
+
end
|
50
|
+
|
51
|
+
protected
|
52
|
+
def get_variable(name)
|
53
|
+
@object.instance_variable_get name
|
54
|
+
end
|
55
|
+
|
56
|
+
def set_variable(name, value)
|
57
|
+
@object.instance_variable_set name, value
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Spec
|
2
|
+
module Rails
|
3
|
+
module Example
|
4
|
+
# Model examples live in $RAILS_ROOT/spec/models/.
|
5
|
+
#
|
6
|
+
# Model examples use Spec::Rails::Example::ModelExampleGroup, which
|
7
|
+
# provides support for fixtures and some custom expectations via extensions
|
8
|
+
# to ActiveRecord::Base.
|
9
|
+
class ModelExampleGroup < RailsExampleGroup
|
10
|
+
Spec::Example::ExampleGroupFactory.register(:model, self)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec/interop/test'
|
2
|
+
|
3
|
+
ActionView::Base.cache_template_extensions = false
|
4
|
+
|
5
|
+
module Spec
|
6
|
+
module Rails
|
7
|
+
module Example
|
8
|
+
class RailsExampleGroup < Test::Unit::TestCase
|
9
|
+
# Rails >= r8570 uses setup/teardown_fixtures explicitly
|
10
|
+
before(:each) do
|
11
|
+
setup_fixtures if self.respond_to?(:setup_fixtures)
|
12
|
+
end
|
13
|
+
after(:each) do
|
14
|
+
teardown_fixtures if self.respond_to?(:teardown_fixtures)
|
15
|
+
end
|
16
|
+
|
17
|
+
include Spec::Rails::Matchers
|
18
|
+
|
19
|
+
@@model_id = 1000
|
20
|
+
# Creates a mock object instance for a +model_class+ with common
|
21
|
+
# methods stubbed out.
|
22
|
+
# Additional methods may be easily stubbed (via add_stubs) if +stubs+ is passed.
|
23
|
+
def mock_model(model_class, options_and_stubs = {})
|
24
|
+
# null = options_and_stubs.delete(:null_object)
|
25
|
+
# stubs = options_and_stubs
|
26
|
+
id = @@model_id
|
27
|
+
@@model_id += 1
|
28
|
+
options_and_stubs = {
|
29
|
+
:id => id,
|
30
|
+
:to_param => id.to_s,
|
31
|
+
:new_record? => false,
|
32
|
+
:errors => stub("errors", :count => 0)
|
33
|
+
}.merge(options_and_stubs)
|
34
|
+
m = mock("#{model_class.name}_#{id}", options_and_stubs)
|
35
|
+
m.send(:__mock_proxy).instance_eval <<-CODE
|
36
|
+
def @target.is_a?(other)
|
37
|
+
#{model_class}.ancestors.include?(other)
|
38
|
+
end
|
39
|
+
def @target.kind_of?(other)
|
40
|
+
#{model_class}.ancestors.include?(other)
|
41
|
+
end
|
42
|
+
def @target.instance_of?(other)
|
43
|
+
other == #{model_class}
|
44
|
+
end
|
45
|
+
def @target.class
|
46
|
+
#{model_class}
|
47
|
+
end
|
48
|
+
CODE
|
49
|
+
yield m if block_given?
|
50
|
+
m
|
51
|
+
end
|
52
|
+
|
53
|
+
#--
|
54
|
+
# TODO - Shouldn't this just be an extension of stub! ??
|
55
|
+
# - object.stub!(:method => return_value, :method2 => return_value2, :etc => etc)
|
56
|
+
#++
|
57
|
+
# Stubs methods on +object+ (if +object+ is a symbol or string a new mock
|
58
|
+
# with that name will be created). +stubs+ is a Hash of <tt>method=>value</tt>
|
59
|
+
def add_stubs(object, stubs = {}) #:nodoc:
|
60
|
+
m = [String, Symbol].index(object.class) ? mock(object.to_s) : object
|
61
|
+
stubs.each {|k,v| m.stub!(k).and_return(v)}
|
62
|
+
m
|
63
|
+
end
|
64
|
+
Spec::Example::ExampleGroupFactory.default(self)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'spec/mocks'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Rails
|
5
|
+
module Example
|
6
|
+
# Provides specialized mock-like behaviour for controller and view examples,
|
7
|
+
# allowing you to mock or stub calls to render with specific arguments while
|
8
|
+
# ignoring all other calls.
|
9
|
+
module RenderObserver
|
10
|
+
|
11
|
+
# Similar to mocking +render+ with the exception that calls to +render+ with
|
12
|
+
# any other options are passed on to the receiver (i.e. controller in
|
13
|
+
# controller examples, template in view examples).
|
14
|
+
#
|
15
|
+
# This is necessary because Rails uses the +render+ method on both
|
16
|
+
# controllers and templates as a dispatcher to render different kinds of
|
17
|
+
# things, sometimes resulting in many calls to the render method within one
|
18
|
+
# request. This approach makes it impossible to use a normal mock object, which
|
19
|
+
# is designed to observe all incoming messages with a given name.
|
20
|
+
#
|
21
|
+
# +expect_render+ is auto-verifying, so failures will be reported without
|
22
|
+
# requiring you to explicitly request verification.
|
23
|
+
#
|
24
|
+
# Also, +expect_render+ uses parts of RSpec's mock expectation framework. Because
|
25
|
+
# it wraps only a subset of the framework, using this will create no conflict with
|
26
|
+
# other mock frameworks if you choose to use them. Additionally, the object returned
|
27
|
+
# by expect_render is an RSpec mock object, which means that you can call any of the
|
28
|
+
# chained methods available in RSpec's mocks.
|
29
|
+
#
|
30
|
+
# == Controller Examples
|
31
|
+
#
|
32
|
+
# controller.expect_render(:partial => 'thing', :object => thing)
|
33
|
+
# controller.expect_render(:partial => 'thing', :collection => things).once
|
34
|
+
#
|
35
|
+
# controller.stub_render(:partial => 'thing', :object => thing)
|
36
|
+
# controller.stub_render(:partial => 'thing', :collection => things).twice
|
37
|
+
#
|
38
|
+
# == View Examples
|
39
|
+
#
|
40
|
+
# template.expect_render(:partial => 'thing', :object => thing)
|
41
|
+
# template.expect_render(:partial => 'thing', :collection => things)
|
42
|
+
#
|
43
|
+
# template.stub_render(:partial => 'thing', :object => thing)
|
44
|
+
# template.stub_render(:partial => 'thing', :collection => things)
|
45
|
+
#
|
46
|
+
def expect_render(opts={})
|
47
|
+
register_verify_after_each
|
48
|
+
expect_render_mock_proxy.should_receive(:render, :expected_from => caller(1)[0]).with(opts)
|
49
|
+
end
|
50
|
+
|
51
|
+
# This is exactly like expect_render, with the exception that the call to render will not
|
52
|
+
# be verified. Use this if you are trying to isolate your example from a complicated render
|
53
|
+
# operation but don't care whether it is called or not.
|
54
|
+
def stub_render(opts={})
|
55
|
+
register_verify_after_each
|
56
|
+
expect_render_mock_proxy.stub!(:render, :expected_from => caller(1)[0]).with(opts)
|
57
|
+
end
|
58
|
+
|
59
|
+
def verify_rendered # :nodoc:
|
60
|
+
expect_render_mock_proxy.rspec_verify
|
61
|
+
end
|
62
|
+
|
63
|
+
def unregister_verify_after_each #:nodoc:
|
64
|
+
proc = verify_rendered_proc
|
65
|
+
Spec::Example::ExampleGroup.remove_after(:each, &proc)
|
66
|
+
end
|
67
|
+
|
68
|
+
protected
|
69
|
+
|
70
|
+
def verify_rendered_proc #:nodoc:
|
71
|
+
template = self
|
72
|
+
@verify_rendered_proc ||= Proc.new do
|
73
|
+
template.verify_rendered
|
74
|
+
template.unregister_verify_after_each
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def register_verify_after_each #:nodoc:
|
79
|
+
proc = verify_rendered_proc
|
80
|
+
Spec::Example::ExampleGroup.after(:each, &proc)
|
81
|
+
end
|
82
|
+
|
83
|
+
def expect_render_mock_proxy #:nodoc:
|
84
|
+
@expect_render_mock_proxy ||= Spec::Mocks::Mock.new("expect_render_mock_proxy")
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
module Spec
|
2
|
+
module Rails
|
3
|
+
module Example
|
4
|
+
# View Examples live in $RAILS_ROOT/spec/views/.
|
5
|
+
#
|
6
|
+
# View Specs use Spec::Rails::Example::ViewExampleGroup,
|
7
|
+
# which provides access to views without invoking any of your controllers.
|
8
|
+
# See Spec::Rails::Expectations::Matchers for information about specific
|
9
|
+
# expectations that you can set on views.
|
10
|
+
#
|
11
|
+
# == Example
|
12
|
+
#
|
13
|
+
# describe "login/login" do
|
14
|
+
# before do
|
15
|
+
# render 'login/login'
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# it "should display login form" do
|
19
|
+
# response.should have_tag("form[action=/login]") do
|
20
|
+
# with_tag("input[type=text][name=email]")
|
21
|
+
# with_tag("input[type=password][name=password]")
|
22
|
+
# with_tag("input[type=submit][value=Login]")
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
class ViewExampleGroup < FunctionalExampleGroup
|
27
|
+
before(:each) do
|
28
|
+
ensure_that_flash_and_session_work_properly
|
29
|
+
end
|
30
|
+
|
31
|
+
after(:each) do
|
32
|
+
ensure_that_base_view_path_is_not_set_across_example_groups
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(defined_description, &implementation) #:nodoc:
|
36
|
+
super
|
37
|
+
@controller_class_name = "Spec::Rails::Example::ViewExampleGroupController"
|
38
|
+
end
|
39
|
+
|
40
|
+
def ensure_that_flash_and_session_work_properly #:nodoc:
|
41
|
+
@controller.send :initialize_template_class, @response
|
42
|
+
@controller.send :assign_shortcuts, @request, @response
|
43
|
+
@session = @controller.session
|
44
|
+
@controller.class.send :public, :flash
|
45
|
+
end
|
46
|
+
|
47
|
+
def ensure_that_base_view_path_is_not_set_across_example_groups #:nodoc:
|
48
|
+
ActionView::Base.base_view_path = nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def set_base_view_path(options) #:nodoc:
|
52
|
+
ActionView::Base.base_view_path = base_view_path(options)
|
53
|
+
end
|
54
|
+
|
55
|
+
def base_view_path(options) #:nodoc:
|
56
|
+
"/#{derived_controller_name(options)}/"
|
57
|
+
end
|
58
|
+
|
59
|
+
def derived_controller_name(options) #:nodoc:
|
60
|
+
parts = subject_of_render(options).split('/').reject { |part| part.empty? }
|
61
|
+
"#{parts[0..-2].join('/')}"
|
62
|
+
end
|
63
|
+
|
64
|
+
def derived_action_name(options) #:nodoc:
|
65
|
+
parts = subject_of_render(options).split('/').reject { |part| part.empty? }
|
66
|
+
"#{parts.last}"
|
67
|
+
end
|
68
|
+
|
69
|
+
def subject_of_render(options) #:nodoc:
|
70
|
+
[:template, :partial, :file].each do |render_type|
|
71
|
+
if options.has_key?(render_type)
|
72
|
+
return options[render_type]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
raise Exception.new("Unhandled render type in view spec.")
|
76
|
+
end
|
77
|
+
|
78
|
+
def add_helpers(options) #:nodoc:
|
79
|
+
@controller.add_helper("application")
|
80
|
+
@controller.add_helper(derived_controller_name(options))
|
81
|
+
@controller.add_helper(options[:helper]) if options[:helper]
|
82
|
+
options[:helpers].each { |helper| @controller.add_helper(helper) } if options[:helpers]
|
83
|
+
end
|
84
|
+
|
85
|
+
# Renders a template for a View Spec, which then provides access to the result
|
86
|
+
# through the +response+.
|
87
|
+
#
|
88
|
+
# == Examples
|
89
|
+
#
|
90
|
+
# render('/people/list')
|
91
|
+
# render('/people/list', :helper => MyHelper)
|
92
|
+
# render('/people/list', :helpers => [MyHelper, MyOtherHelper])
|
93
|
+
# render(:partial => '/people/_address')
|
94
|
+
#
|
95
|
+
# See Spec::Rails::Example::ViewExampleGroup for more information.
|
96
|
+
def render(*args)
|
97
|
+
options = Hash === args.last ? args.pop : {}
|
98
|
+
options[:template] = args.first.to_s unless args.empty?
|
99
|
+
|
100
|
+
set_base_view_path(options)
|
101
|
+
add_helpers(options)
|
102
|
+
|
103
|
+
assigns[:action_name] = @action_name
|
104
|
+
|
105
|
+
@request.path_parameters = {
|
106
|
+
:controller => derived_controller_name(options),
|
107
|
+
:action => derived_action_name(options)
|
108
|
+
}
|
109
|
+
|
110
|
+
defaults = { :layout => false }
|
111
|
+
options = defaults.merge options
|
112
|
+
|
113
|
+
@controller.instance_variable_set :@params, @request.parameters
|
114
|
+
|
115
|
+
@controller.send :initialize_current_url
|
116
|
+
|
117
|
+
@controller.class.instance_eval %{
|
118
|
+
def controller_path
|
119
|
+
"#{derived_controller_name(options)}"
|
120
|
+
end
|
121
|
+
|
122
|
+
def controller_name
|
123
|
+
"#{derived_controller_name(options).split('/').last}"
|
124
|
+
end
|
125
|
+
}
|
126
|
+
|
127
|
+
@controller.send :forget_variables_added_to_assigns
|
128
|
+
@controller.send :render, options
|
129
|
+
@controller.send :process_cleanup
|
130
|
+
end
|
131
|
+
|
132
|
+
# This provides the template. Use this to set mock
|
133
|
+
# expectations for dealing with partials
|
134
|
+
#
|
135
|
+
# == Example
|
136
|
+
#
|
137
|
+
# describe "/person/new" do
|
138
|
+
# it "should use the form partial" do
|
139
|
+
# template.should_receive(:render).with(:partial => 'form')
|
140
|
+
# render "/person/new"
|
141
|
+
# end
|
142
|
+
# end
|
143
|
+
def template
|
144
|
+
@controller.template
|
145
|
+
end
|
146
|
+
|
147
|
+
Spec::Example::ExampleGroupFactory.register(:view, self)
|
148
|
+
end
|
149
|
+
|
150
|
+
class ViewExampleGroupController < ApplicationController #:nodoc:
|
151
|
+
include Spec::Rails::Example::RenderObserver
|
152
|
+
attr_reader :template
|
153
|
+
|
154
|
+
def add_helper_for(template_path)
|
155
|
+
add_helper(template_path.split('/')[0])
|
156
|
+
end
|
157
|
+
|
158
|
+
def add_helper(name)
|
159
|
+
begin
|
160
|
+
helper_module = "#{name}_helper".camelize.constantize
|
161
|
+
rescue
|
162
|
+
return
|
163
|
+
end
|
164
|
+
template.metaclass.class_eval do
|
165
|
+
include helper_module
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|