thoughtbot-shoulda 2.10.2 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTION_GUIDELINES.rdoc +5 -5
- data/README.rdoc +72 -89
- data/Rakefile +31 -33
- data/lib/shoulda.rb +6 -6
- data/lib/shoulda/action_controller.rb +8 -0
- data/lib/shoulda/action_controller/macros.rb +54 -73
- data/lib/shoulda/action_controller/matchers.rb +7 -5
- data/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +10 -7
- data/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +18 -1
- data/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb +62 -0
- data/lib/shoulda/action_controller/matchers/render_template_matcher.rb +54 -0
- data/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +33 -15
- data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +10 -10
- data/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +17 -13
- data/lib/shoulda/action_controller/matchers/route_matcher.rb +3 -3
- data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +13 -2
- data/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +1 -1
- data/lib/shoulda/action_mailer.rb +3 -0
- data/lib/shoulda/action_mailer/assertions.rb +4 -0
- data/lib/shoulda/action_mailer/matchers.rb +22 -0
- data/lib/shoulda/action_mailer/matchers/have_sent_email.rb +110 -0
- data/lib/shoulda/active_record/helpers.rb +8 -3
- data/lib/shoulda/active_record/macros.rb +88 -143
- data/lib/shoulda/active_record/matchers.rb +0 -1
- data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +1 -1
- data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +10 -2
- data/lib/shoulda/active_record/matchers/association_matcher.rb +8 -8
- data/lib/shoulda/active_record/matchers/ensure_inclusion_of_matcher.rb +1 -1
- data/lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb +2 -2
- data/lib/shoulda/active_record/matchers/have_db_column_matcher.rb +11 -11
- data/lib/shoulda/active_record/matchers/have_db_index_matcher.rb +8 -8
- data/lib/shoulda/active_record/matchers/validate_format_of_matcher.rb +2 -4
- data/lib/shoulda/active_record/matchers/validate_uniqueness_of_matcher.rb +3 -3
- data/lib/shoulda/active_record/matchers/validation_matcher.rb +0 -1
- data/lib/shoulda/assertions.rb +10 -2
- data/lib/shoulda/autoload_macros.rb +20 -20
- data/lib/shoulda/context.rb +70 -39
- data/lib/shoulda/{rspec.rb → integrations/rspec.rb} +2 -0
- data/lib/shoulda/integrations/rspec2.rb +22 -0
- data/lib/shoulda/{test_unit.rb → integrations/test_unit.rb} +0 -0
- data/lib/shoulda/macros.rb +46 -18
- data/lib/shoulda/rails.rb +0 -5
- data/lib/shoulda/tasks/yaml_to_shoulda.rake +11 -11
- data/lib/shoulda/version.rb +4 -0
- data/rails/init.rb +3 -2
- data/test/fail_macros.rb +20 -4
- data/test/functional/posts_controller_test.rb +7 -7
- data/test/functional/users_controller_test.rb +1 -1
- data/test/matchers/action_mailer/have_sent_email_test.rb +70 -0
- data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +7 -1
- data/test/matchers/active_record/allow_value_matcher_test.rb +1 -1
- data/test/matchers/active_record/association_matcher_test.rb +16 -16
- data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +3 -2
- data/test/matchers/active_record/ensure_length_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/have_db_column_matcher_test.rb +1 -1
- data/test/matchers/active_record/have_db_index_matcher_test.rb +1 -1
- data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_format_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_presence_of_matcher_test.rb +1 -1
- data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +1 -1
- data/test/matchers/controller/assign_to_matcher_test.rb +11 -1
- data/test/matchers/controller/filter_param_matcher_test.rb +10 -2
- data/test/matchers/controller/redirect_to_matcher_test.rb +37 -0
- data/test/matchers/controller/render_template_matcher_test.rb +37 -0
- data/test/matchers/controller/render_with_layout_matcher_test.rb +15 -1
- data/test/matchers/controller/respond_with_content_type_matcher_test.rb +1 -1
- data/test/matchers/controller/respond_with_matcher_test.rb +1 -11
- data/test/matchers/controller/route_matcher_test.rb +18 -1
- data/test/matchers/controller/set_session_matcher_test.rb +11 -1
- data/test/matchers/controller/set_the_flash_matcher.rb +1 -1
- data/test/other/autoload_macro_test.rb +1 -1
- data/test/other/context_test.rb +210 -27
- data/test/other/convert_to_should_syntax_test.rb +1 -1
- data/test/other/helpers_test.rb +13 -36
- data/test/other/private_helpers_test.rb +2 -2
- data/test/other/should_test.rb +13 -13
- data/test/{model_builder.rb → rails2_model_builder.rb} +32 -8
- data/test/{rails_root → rails2_root}/app/controllers/application_controller.rb +0 -3
- data/test/{rails_root → rails2_root}/app/controllers/posts_controller.rb +0 -0
- data/test/{rails_root → rails2_root}/app/controllers/users_controller.rb +0 -0
- data/test/{rails_root → rails2_root}/app/helpers/application_helper.rb +0 -0
- data/test/{rails_root → rails2_root}/app/helpers/posts_helper.rb +0 -0
- data/test/{rails_root → rails2_root}/app/helpers/users_helper.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/address.rb +0 -0
- data/test/rails2_root/app/models/flea.rb +11 -0
- data/test/{rails_root → rails2_root}/app/models/friendship.rb +0 -0
- data/test/rails2_root/app/models/notifier.rb +8 -0
- data/test/{rails_root → rails2_root}/app/models/pets/cat.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/pets/dog.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/post.rb +1 -1
- data/test/{rails_root → rails2_root}/app/models/product.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/profile.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/registration.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/tag.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/tagging.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/treat.rb +0 -0
- data/test/{rails_root → rails2_root}/app/models/user.rb +0 -0
- data/test/{rails_root → rails2_root}/app/views/layouts/posts.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/layouts/users.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/layouts/wide.html.erb +0 -0
- data/test/rails2_root/app/views/notifier/the_email.html.erb +1 -0
- data/test/{rails_root → rails2_root}/app/views/posts/edit.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/posts/index.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/posts/new.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/posts/show.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/edit.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/index.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/new.rhtml +0 -0
- data/test/{rails_root → rails2_root}/app/views/users/show.rhtml +0 -0
- data/test/{rails_root → rails2_root}/config/boot.rb +0 -0
- data/test/{rails_root → rails2_root}/config/database.yml +1 -1
- data/test/{rails_root → rails2_root}/config/environment.rb +0 -1
- data/test/rails2_root/config/environments/test.rb +23 -0
- data/test/{rails_root → rails2_root}/config/initializers/new_rails_defaults.rb +0 -0
- data/test/{rails_root → rails2_root}/config/initializers/shoulda.rb +0 -0
- data/test/{rails_root → rails2_root}/config/routes.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/001_create_users.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/002_create_posts.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/003_create_taggings.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/004_create_tags.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/005_create_dogs.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/006_create_addresses.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/007_create_fleas.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/008_create_dogs_fleas.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/009_create_products.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/010_create_friendships.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/011_create_treats.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/20090506203502_create_profiles.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/20090506203536_create_registrations.rb +0 -0
- data/test/{rails_root → rails2_root}/db/migrate/20090513104502_create_cats.rb +0 -0
- data/test/{rails_root → rails2_root}/db/schema.rb +0 -0
- data/test/{rails_root → rails2_root}/public/404.html +0 -0
- data/test/{rails_root → rails2_root}/public/422.html +0 -0
- data/test/{rails_root → rails2_root}/public/500.html +0 -0
- data/test/{rails_root → rails2_root}/script/console +0 -0
- data/test/{rails_root → rails2_root}/script/generate +0 -0
- data/test/{rails_root → rails2_root}/test/shoulda_macros/custom_macro.rb +0 -0
- data/test/{rails_root → rails2_root}/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +0 -0
- data/test/{rails_root → rails2_root}/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +0 -0
- data/test/rails2_test_helper.rb +6 -0
- data/test/rails3_model_builder.rb +118 -0
- data/test/rails3_root/Gemfile +28 -0
- data/test/rails3_root/README +244 -0
- data/test/rails3_root/Rakefile +10 -0
- data/test/rails3_root/app/controllers/application_controller.rb +22 -0
- data/test/rails3_root/app/controllers/posts_controller.rb +87 -0
- data/test/rails3_root/app/controllers/users_controller.rb +82 -0
- data/test/rails3_root/app/helpers/application_helper.rb +2 -0
- data/test/rails3_root/app/models/address.rb +7 -0
- data/test/rails3_root/app/models/flea.rb +11 -0
- data/test/rails3_root/app/models/friendship.rb +4 -0
- data/test/rails3_root/app/models/notifier.rb +8 -0
- data/test/rails3_root/app/models/pets/cat.rb +7 -0
- data/test/rails3_root/app/models/pets/dog.rb +10 -0
- data/test/rails3_root/app/models/post.rb +12 -0
- data/test/rails3_root/app/models/product.rb +12 -0
- data/test/rails3_root/app/models/profile.rb +2 -0
- data/test/rails3_root/app/models/registration.rb +2 -0
- data/test/rails3_root/app/models/tag.rb +8 -0
- data/test/rails3_root/app/models/tagging.rb +4 -0
- data/test/rails3_root/app/models/treat.rb +3 -0
- data/test/rails3_root/app/models/user.rb +32 -0
- data/test/rails3_root/app/views/layouts/application.html.erb +14 -0
- data/test/rails3_root/app/views/layouts/posts.rhtml +19 -0
- data/test/rails3_root/app/views/layouts/users.rhtml +17 -0
- data/test/rails3_root/app/views/layouts/wide.html.erb +1 -0
- data/test/rails3_root/app/views/notifier/the_email.html.erb +1 -0
- data/test/rails3_root/app/views/posts/edit.rhtml +27 -0
- data/test/rails3_root/app/views/posts/index.rhtml +25 -0
- data/test/rails3_root/app/views/posts/new.rhtml +24 -0
- data/test/rails3_root/app/views/posts/show.rhtml +18 -0
- data/test/rails3_root/app/views/users/edit.rhtml +22 -0
- data/test/rails3_root/app/views/users/index.rhtml +22 -0
- data/test/rails3_root/app/views/users/new.rhtml +21 -0
- data/test/rails3_root/app/views/users/show.rhtml +13 -0
- data/test/rails3_root/config.ru +4 -0
- data/test/rails3_root/config/application.rb +46 -0
- data/test/rails3_root/config/boot.rb +6 -0
- data/test/rails3_root/config/database.yml +22 -0
- data/test/rails3_root/config/environment.rb +5 -0
- data/test/rails3_root/config/environments/development.rb +19 -0
- data/test/rails3_root/config/environments/production.rb +42 -0
- data/test/rails3_root/config/environments/test.rb +32 -0
- data/test/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails3_root/config/initializers/inflections.rb +10 -0
- data/test/rails3_root/config/initializers/mime_types.rb +5 -0
- data/test/rails3_root/config/initializers/secret_token.rb +7 -0
- data/test/rails3_root/config/initializers/session_store.rb +8 -0
- data/test/rails3_root/config/locales/en.yml +5 -0
- data/test/rails3_root/config/routes.rb +4 -0
- data/test/rails3_root/db/migrate/001_create_users.rb +19 -0
- data/test/rails3_root/db/migrate/002_create_posts.rb +13 -0
- data/test/rails3_root/db/migrate/003_create_taggings.rb +12 -0
- data/test/rails3_root/db/migrate/004_create_tags.rb +11 -0
- data/test/rails3_root/db/migrate/005_create_dogs.rb +12 -0
- data/test/rails3_root/db/migrate/006_create_addresses.rb +14 -0
- data/test/rails3_root/db/migrate/007_create_fleas.rb +11 -0
- data/test/rails3_root/db/migrate/008_create_dogs_fleas.rb +12 -0
- data/test/rails3_root/db/migrate/009_create_products.rb +17 -0
- data/test/rails3_root/db/migrate/010_create_friendships.rb +14 -0
- data/test/rails3_root/db/migrate/011_create_treats.rb +12 -0
- data/test/rails3_root/db/migrate/20090506203502_create_profiles.rb +12 -0
- data/test/rails3_root/db/migrate/20090506203536_create_registrations.rb +14 -0
- data/test/rails3_root/db/migrate/20090513104502_create_cats.rb +12 -0
- data/test/rails3_root/db/seeds.rb +7 -0
- data/test/rails3_root/public/404.html +26 -0
- data/test/rails3_root/public/422.html +26 -0
- data/test/rails3_root/public/500.html +26 -0
- data/test/{rails_root/config/environments/test.rb → rails3_root/public/favicon.ico} +0 -0
- data/test/rails3_root/public/images/rails.png +0 -0
- data/test/rails3_root/public/index.html +279 -0
- data/test/rails3_root/public/javascripts/application.js +2 -0
- data/test/rails3_root/public/javascripts/controls.js +965 -0
- data/test/rails3_root/public/javascripts/dragdrop.js +974 -0
- data/test/rails3_root/public/javascripts/effects.js +1123 -0
- data/test/rails3_root/public/javascripts/prototype.js +4874 -0
- data/test/rails3_root/public/javascripts/rails.js +118 -0
- data/test/rails3_root/public/robots.txt +5 -0
- data/test/rails3_root/script/rails +9 -0
- data/test/rails3_root/test/performance/browsing_test.rb +9 -0
- data/test/rails3_root/test/test_helper.rb +13 -0
- data/test/rails3_test_helper.rb +6 -0
- data/test/test_helper.rb +16 -8
- data/test/unit/address_test.rb +1 -1
- data/test/unit/cat_test.rb +1 -1
- data/test/unit/dog_test.rb +1 -1
- data/test/unit/flea_test.rb +9 -1
- data/test/unit/friendship_test.rb +1 -1
- data/test/unit/post_test.rb +1 -5
- data/test/unit/product_test.rb +1 -1
- data/test/unit/tag_test.rb +1 -5
- data/test/unit/tagging_test.rb +1 -1
- data/test/unit/user_test.rb +3 -37
- metadata +184 -118
- data/lib/shoulda/action_view.rb +0 -10
- data/lib/shoulda/action_view/macros.rb +0 -61
- data/lib/shoulda/active_record/matchers/have_named_scope_matcher.rb +0 -128
- data/test/matchers/active_record/have_named_scope_matcher_test.rb +0 -65
- data/test/rails_root/app/models/flea.rb +0 -3
data/lib/shoulda/action_view.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
module Shoulda # :nodoc:
|
2
|
-
module ActionView # :nodoc:
|
3
|
-
# = Macro test helpers for your view
|
4
|
-
#
|
5
|
-
# By using the macro helpers you can quickly and easily create concise and
|
6
|
-
# easy to read test suites.
|
7
|
-
#
|
8
|
-
# This code segment:
|
9
|
-
# context "on GET to :new" do
|
10
|
-
# setup do
|
11
|
-
# get :new
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
# should_render_page_with_metadata :title => /index/
|
15
|
-
#
|
16
|
-
# should "do something else really cool" do
|
17
|
-
# assert_select '#really_cool'
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# Would produce 3 tests for the +show+ action
|
22
|
-
module Macros
|
23
|
-
|
24
|
-
# Macro that creates a test asserting that the rendered view contains a <form> element.
|
25
|
-
#
|
26
|
-
# Deprecated.
|
27
|
-
def should_render_a_form
|
28
|
-
warn "[DEPRECATION] should_render_a_form is deprecated."
|
29
|
-
should "display a form" do
|
30
|
-
assert_select "form", true, "The template doesn't contain a <form> element"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# Deprecated.
|
35
|
-
#
|
36
|
-
# Macro that creates a test asserting that the rendered view contains the selected metatags.
|
37
|
-
# Values can be string or Regexps.
|
38
|
-
# Example:
|
39
|
-
#
|
40
|
-
# should_render_page_with_metadata :description => "Description of this page", :keywords => /post/
|
41
|
-
#
|
42
|
-
# You can also use this method to test the rendered views title.
|
43
|
-
#
|
44
|
-
# Example:
|
45
|
-
# should_render_page_with_metadata :title => /index/
|
46
|
-
def should_render_page_with_metadata(options)
|
47
|
-
warn "[DEPRECATION] should_render_page_with_metadata is deprecated."
|
48
|
-
options.each do |key, value|
|
49
|
-
should "have metatag #{key}" do
|
50
|
-
if key.to_sym == :title
|
51
|
-
assert_select "title", value
|
52
|
-
else
|
53
|
-
assert_select "meta[name=?][content#{"*" if value.is_a?(Regexp)}=?]", key, value
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
@@ -1,128 +0,0 @@
|
|
1
|
-
module Shoulda # :nodoc:
|
2
|
-
module ActiveRecord # :nodoc:
|
3
|
-
module Matchers
|
4
|
-
|
5
|
-
# Deprecated.
|
6
|
-
#
|
7
|
-
# Ensures that the model has a method named scope_call that returns a
|
8
|
-
# NamedScope object with the proxy options set to the options you supply.
|
9
|
-
# scope_call can be either a symbol, or a Ruby expression in a String
|
10
|
-
# which will be evaled. The eval'd method call has access to all the same
|
11
|
-
# instance variables that an example would.
|
12
|
-
#
|
13
|
-
# Options:
|
14
|
-
#
|
15
|
-
# * <tt>in_context</tt> - Any of the options that the named scope would
|
16
|
-
# pass on to find.
|
17
|
-
#
|
18
|
-
# Example:
|
19
|
-
#
|
20
|
-
# it { should have_named_scope(:visible).
|
21
|
-
# finding(:conditions => {:visible => true}) }
|
22
|
-
#
|
23
|
-
# Passes for
|
24
|
-
#
|
25
|
-
# named_scope :visible, :conditions => {:visible => true}
|
26
|
-
#
|
27
|
-
# Or for
|
28
|
-
#
|
29
|
-
# def self.visible
|
30
|
-
# scoped(:conditions => {:visible => true})
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# You can test lambdas or methods that return ActiveRecord#scoped calls:
|
34
|
-
#
|
35
|
-
# it { should have_named_scope('recent(5)').finding(:limit => 5) }
|
36
|
-
# it { should have_named_scope('recent(1)').finding(:limit => 1) }
|
37
|
-
#
|
38
|
-
# Passes for
|
39
|
-
# named_scope :recent, lambda {|c| {:limit => c}}
|
40
|
-
#
|
41
|
-
# Or for
|
42
|
-
#
|
43
|
-
# def self.recent(c)
|
44
|
-
# scoped(:limit => c)
|
45
|
-
# end
|
46
|
-
#
|
47
|
-
def have_named_scope(scope_call)
|
48
|
-
warn "[DEPRECATION] should_have_named_scope is deprecated."
|
49
|
-
HaveNamedScopeMatcher.new(scope_call).in_context(self)
|
50
|
-
end
|
51
|
-
|
52
|
-
class HaveNamedScopeMatcher # :nodoc:
|
53
|
-
|
54
|
-
def initialize(scope_call)
|
55
|
-
@scope_call = scope_call.to_s
|
56
|
-
end
|
57
|
-
|
58
|
-
def finding(finding)
|
59
|
-
@finding = finding
|
60
|
-
self
|
61
|
-
end
|
62
|
-
|
63
|
-
def in_context(context)
|
64
|
-
@context = context
|
65
|
-
self
|
66
|
-
end
|
67
|
-
|
68
|
-
def matches?(subject)
|
69
|
-
@subject = subject
|
70
|
-
call_succeeds? && returns_scope? && finds_correct_scope?
|
71
|
-
end
|
72
|
-
|
73
|
-
def failure_message
|
74
|
-
"Expected #{@missing_expectation}"
|
75
|
-
end
|
76
|
-
|
77
|
-
def negative_failure_message
|
78
|
-
"Didn't expect a named scope for #{@scope_call}"
|
79
|
-
end
|
80
|
-
|
81
|
-
def description
|
82
|
-
result = "have a named scope for #{@scope_call}"
|
83
|
-
result << " finding #{@finding.inspect}" unless @finding.nil?
|
84
|
-
result
|
85
|
-
end
|
86
|
-
|
87
|
-
private
|
88
|
-
|
89
|
-
def call_succeeds?
|
90
|
-
scope
|
91
|
-
true
|
92
|
-
rescue Exception => exception
|
93
|
-
@missing_expectation = "#{@subject.class.name} " <<
|
94
|
-
"to respond to #{@scope_call} " <<
|
95
|
-
"but raised error: #{exception.inspect}"
|
96
|
-
false
|
97
|
-
end
|
98
|
-
|
99
|
-
def scope
|
100
|
-
@scope ||= @context.instance_eval("#{@subject.class.name}.#{@scope_call}")
|
101
|
-
end
|
102
|
-
|
103
|
-
def returns_scope?
|
104
|
-
if ::ActiveRecord::NamedScope::Scope === scope
|
105
|
-
true
|
106
|
-
else
|
107
|
-
@missing_expectation = "#{@scope_call} to return a scope"
|
108
|
-
false
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def finds_correct_scope?
|
113
|
-
return true if @finding.nil?
|
114
|
-
if @finding == scope.proxy_options
|
115
|
-
true
|
116
|
-
else
|
117
|
-
@missing_expectation = "#{@scope_call} to return results scoped to "
|
118
|
-
@missing_expectation << "#{@finding.inspect} but was scoped to "
|
119
|
-
@missing_expectation << scope.proxy_options.inspect
|
120
|
-
false
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
end
|
125
|
-
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
2
|
-
|
3
|
-
class HaveNamedScopeMatcherTest < ActiveSupport::TestCase # :nodoc:
|
4
|
-
|
5
|
-
context "an attribute with a named scope" do
|
6
|
-
setup do
|
7
|
-
define_model :example, :attr => :string do
|
8
|
-
named_scope :xyz, lambda {|n|
|
9
|
-
{ :order => :attr }
|
10
|
-
}
|
11
|
-
end
|
12
|
-
@model = Example.new
|
13
|
-
end
|
14
|
-
|
15
|
-
should "accept having a scope with the correct signature" do
|
16
|
-
assert_accepts have_named_scope("xyz(1)"), @model
|
17
|
-
end
|
18
|
-
|
19
|
-
should "accept having a scope with the correct signature and find options" do
|
20
|
-
assert_accepts have_named_scope("xyz(1)").finding(:order => :attr), @model
|
21
|
-
end
|
22
|
-
|
23
|
-
should "reject having a scope with incorrect find options" do
|
24
|
-
assert_rejects have_named_scope("xyz(1)").
|
25
|
-
finding(:order => 'attr DESC'),
|
26
|
-
@model
|
27
|
-
end
|
28
|
-
|
29
|
-
should "reject having a scope with another name" do
|
30
|
-
assert_rejects have_named_scope("abc(1)"), @model
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
should "evaluate the scope in the correct context" do
|
36
|
-
define_model :example, :attr => :string do
|
37
|
-
named_scope :xyz, lambda {|n|
|
38
|
-
{ :order => n }
|
39
|
-
}
|
40
|
-
end
|
41
|
-
model = Example.new
|
42
|
-
@order = :attr
|
43
|
-
assert_accepts have_named_scope("xyz(@order)").
|
44
|
-
finding(:order => @order).
|
45
|
-
in_context(self),
|
46
|
-
model
|
47
|
-
end
|
48
|
-
|
49
|
-
context "a method that does not return a scope" do
|
50
|
-
setup do
|
51
|
-
klass = Class.new
|
52
|
-
klass.class_eval do
|
53
|
-
def self.xyz
|
54
|
-
'xyz'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
@model = klass.new
|
58
|
-
end
|
59
|
-
|
60
|
-
should "reject having a named scope with that name" do
|
61
|
-
assert_rejects have_named_scope(:xyz), @model
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|