aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/autosave_association_test.rb12
-rwxr-xr-xactiverecord/test/cases/base_test.rb4
-rw-r--r--activerecord/test/cases/method_scoping_test.rb14
-rw-r--r--activerecord/test/cases/named_scope_test.rb43
-rw-r--r--activerecord/test/cases/relations_test.rb17
-rw-r--r--activerecord/test/cases/validations_test.rb29
-rw-r--r--activerecord/test/models/comment.rb6
-rw-r--r--activerecord/test/models/company.rb8
-rw-r--r--activerecord/test/models/developer.rb4
-rw-r--r--activerecord/test/models/organization.rb2
-rw-r--r--activerecord/test/models/person.rb4
-rw-r--r--activerecord/test/models/post.rb18
-rw-r--r--activerecord/test/models/reply.rb2
-rw-r--r--activerecord/test/models/topic.rb22
14 files changed, 109 insertions, 76 deletions
diff --git a/activerecord/test/cases/autosave_association_test.rb b/activerecord/test/cases/autosave_association_test.rb
index cc36a6dc5b..cc5460ddb7 100644
--- a/activerecord/test/cases/autosave_association_test.rb
+++ b/activerecord/test/cases/autosave_association_test.rb
@@ -805,7 +805,7 @@ class TestAutosaveAssociationOnAHasOneAssociation < ActiveRecord::TestCase
def test_should_still_allow_to_bypass_validations_on_the_associated_model
@pirate.catchphrase = ''
@pirate.ship.name = ''
- @pirate.save(false)
+ @pirate.save(:validate => false)
# Oracle saves empty string as NULL
if current_adapter?(:OracleAdapter)
assert_equal [nil, nil], [@pirate.reload.catchphrase, @pirate.ship.name]
@@ -820,7 +820,7 @@ class TestAutosaveAssociationOnAHasOneAssociation < ActiveRecord::TestCase
@pirate.catchphrase = ''
@pirate.ship.name = ''
@pirate.ship.parts.each { |part| part.name = '' }
- @pirate.save(false)
+ @pirate.save(:validate => false)
values = [@pirate.reload.catchphrase, @pirate.ship.name, *@pirate.ship.parts.map(&:name)]
# Oracle saves empty string as NULL
@@ -917,7 +917,7 @@ class TestAutosaveAssociationOnABelongsToAssociation < ActiveRecord::TestCase
def test_should_still_allow_to_bypass_validations_on_the_associated_model
@ship.pirate.catchphrase = ''
@ship.name = ''
- @ship.save(false)
+ @ship.save(:validate => false)
# Oracle saves empty string as NULL
if current_adapter?(:OracleAdapter)
assert_equal [nil, nil], [@ship.reload.name, @ship.pirate.catchphrase]
@@ -1029,7 +1029,7 @@ module AutosaveAssociationOnACollectionAssociationTests
@pirate.catchphrase = ''
@pirate.send(@association_name).each { |child| child.name = '' }
- assert @pirate.save(false)
+ assert @pirate.save(:validate => false)
# Oracle saves empty string as NULL
if current_adapter?(:OracleAdapter)
assert_equal [nil, nil, nil], [
@@ -1049,14 +1049,14 @@ module AutosaveAssociationOnACollectionAssociationTests
def test_should_validation_the_associated_models_on_create
assert_no_difference("#{ @association_name == :birds ? 'Bird' : 'Parrot' }.count") do
2.times { @pirate.send(@association_name).build }
- @pirate.save(true)
+ @pirate.save
end
end
def test_should_allow_to_bypass_validations_on_the_associated_models_on_create
assert_difference("#{ @association_name == :birds ? 'Bird' : 'Parrot' }.count", +2) do
2.times { @pirate.send(@association_name).build }
- @pirate.save(false)
+ @pirate.save(:validate => false)
end
end
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index aea6aed8d9..1441b4278d 100755
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -1865,7 +1865,9 @@ class BasicsTest < ActiveRecord::TestCase
end
assert scoped_developers.include?(developers(:poor_jamis))
assert scoped_developers.include?(developers(:david))
- assert scoped_developers.include?(developers(:dev_10))
+ assert ! scoped_developers.include?(developers(:jamis))
+ assert_equal 3, scoped_developers.size
+
# Test without scoped find conditions to ensure we get the right thing
developers = Developer.find(:all, :order => 'id', :limit => 1)
assert scoped_developers.include?(developers(:david))
diff --git a/activerecord/test/cases/method_scoping_test.rb b/activerecord/test/cases/method_scoping_test.rb
index 26aa3ed8d5..7ca5b5a988 100644
--- a/activerecord/test/cases/method_scoping_test.rb
+++ b/activerecord/test/cases/method_scoping_test.rb
@@ -608,7 +608,7 @@ class DefaultScopingTest < ActiveRecord::TestCase
def test_default_scoping_with_threads
2.times do
- Thread.new { assert_equal 'salary DESC', DeveloperOrderedBySalary.scoped.send(:order_clause) }.join
+ Thread.new { assert_equal ['salary DESC'], DeveloperOrderedBySalary.scoped.order_values }.join
end
end
@@ -618,28 +618,28 @@ class DefaultScopingTest < ActiveRecord::TestCase
klass.send :default_scope, {}
# Scopes added on children should append to parent scope
- assert klass.scoped.send(:order_clause).blank?
+ assert klass.scoped.order_values.blank?
# Parent should still have the original scope
- assert_equal 'salary DESC', DeveloperOrderedBySalary.scoped.send(:order_clause)
+ assert_equal ['salary DESC'], DeveloperOrderedBySalary.scoped.order_values
end
def test_method_scope
- expected = Developer.find(:all, :order => 'name DESC, salary DESC').collect { |dev| dev.salary }
+ expected = Developer.find(:all, :order => 'name DESC').collect { |dev| dev.salary }
received = DeveloperOrderedBySalary.all_ordered_by_name.collect { |dev| dev.salary }
assert_equal expected, received
end
def test_nested_scope
- expected = Developer.find(:all, :order => 'name DESC, salary DESC').collect { |dev| dev.salary }
+ expected = Developer.find(:all, :order => 'name DESC').collect { |dev| dev.salary }
received = DeveloperOrderedBySalary.send(:with_scope, :find => { :order => 'name DESC'}) do
DeveloperOrderedBySalary.find(:all).collect { |dev| dev.salary }
end
assert_equal expected, received
end
- def test_named_scope_order_appended_to_default_scope_order
- expected = Developer.find(:all, :order => 'name DESC, salary DESC').collect { |dev| dev.name }
+ def test_named_scope_overwrites_default
+ expected = Developer.find(:all, :order => 'name DESC').collect { |dev| dev.name }
received = DeveloperOrderedBySalary.by_name.find(:all).collect { |dev| dev.name }
assert_equal expected, received
end
diff --git a/activerecord/test/cases/named_scope_test.rb b/activerecord/test/cases/named_scope_test.rb
index 5d9232bc52..3e2bd58f9a 100644
--- a/activerecord/test/cases/named_scope_test.rb
+++ b/activerecord/test/cases/named_scope_test.rb
@@ -31,7 +31,7 @@ class NamedScopeTest < ActiveRecord::TestCase
def test_reload_expires_cache_of_found_items
all_posts = Topic.base
- all_posts.inspect
+ all_posts.all
new_post = Topic.create!
assert !all_posts.include?(new_post)
@@ -48,14 +48,14 @@ class NamedScopeTest < ActiveRecord::TestCase
end
def test_scope_should_respond_to_own_methods_and_methods_of_the_proxy
- assert Topic.approved.respond_to?(:proxy_found)
+ assert Topic.approved.respond_to?(:limit)
assert Topic.approved.respond_to?(:count)
assert Topic.approved.respond_to?(:length)
end
def test_respond_to_respects_include_private_parameter
- assert !Topic.approved.respond_to?(:load_found)
- assert Topic.approved.respond_to?(:load_found, true)
+ assert !Topic.approved.respond_to?(:with_create_scope)
+ assert Topic.approved.respond_to?(:with_create_scope, true)
end
def test_subclasses_inherit_scopes
@@ -150,13 +150,13 @@ class NamedScopeTest < ActiveRecord::TestCase
end
def test_named_scopes_honor_current_scopes_from_when_defined
- assert !Post.ranked_by_comments.limit(5).empty?
- assert !authors(:david).posts.ranked_by_comments.limit(5).empty?
- assert_not_equal Post.ranked_by_comments.limit(5), authors(:david).posts.ranked_by_comments.limit(5)
+ assert !Post.ranked_by_comments.limit_by(5).empty?
+ assert !authors(:david).posts.ranked_by_comments.limit_by(5).empty?
+ assert_not_equal Post.ranked_by_comments.limit_by(5), authors(:david).posts.ranked_by_comments.limit_by(5)
assert_not_equal Post.top(5), authors(:david).posts.top(5)
# Oracle sometimes sorts differently if WHERE condition is changed
- assert_equal authors(:david).posts.ranked_by_comments.limit(5).sort_by(&:id), authors(:david).posts.top(5).sort_by(&:id)
- assert_equal Post.ranked_by_comments.limit(5), Post.top(5)
+ assert_equal authors(:david).posts.ranked_by_comments.limit_by(5).to_a.sort_by(&:id), authors(:david).posts.top(5).to_a.sort_by(&:id)
+ assert_equal Post.ranked_by_comments.limit_by(5), Post.top(5)
end
def test_active_records_have_scope_named__all__
@@ -171,11 +171,6 @@ class NamedScopeTest < ActiveRecord::TestCase
assert_equal Topic.find(:all, scope), Topic.scoped(scope)
end
- def test_proxy_options
- expected_proxy_options = { :conditions => { :approved => true } }
- assert_equal expected_proxy_options, Topic.approved.proxy_options
- end
-
def test_first_and_last_should_support_find_options
assert_equal Topic.base.first(:order => 'title'), Topic.base.find(:first, :order => 'title')
assert_equal Topic.base.last(:order => 'title'), Topic.base.find(:last, :order => 'title')
@@ -297,7 +292,7 @@ class NamedScopeTest < ActiveRecord::TestCase
end
def test_find_all_should_behave_like_select
- assert_equal Topic.base.select(&:approved), Topic.base.find_all(&:approved)
+ assert_equal Topic.base.to_a.select(&:approved), Topic.base.to_a.find_all(&:approved)
end
def test_rand_should_select_a_random_object_from_proxy
@@ -345,14 +340,14 @@ class NamedScopeTest < ActiveRecord::TestCase
def test_chaining_should_use_latest_conditions_when_searching
# Normal hash conditions
- assert_equal Topic.where(:approved => true).to_a, Topic.rejected.approved.all.to_a
- assert_equal Topic.where(:approved => false).to_a, Topic.approved.rejected.all.to_a
+ assert_equal Topic.where(:approved => true).to_a, Topic.rejected.approved.all
+ assert_equal Topic.where(:approved => false).to_a, Topic.approved.rejected.all
# Nested hash conditions with same keys
- assert_equal [posts(:sti_comments)], Post.with_special_comments.with_very_special_comments.all.to_a
+ assert_equal [posts(:sti_comments)], Post.with_special_comments.with_very_special_comments.all
# Nested hash conditions with different keys
- assert_equal [posts(:sti_comments)], Post.with_special_comments.with_post(4).all.to_a.uniq
+ assert_equal [posts(:sti_comments)], Post.with_special_comments.with_post(4).all.uniq
end
def test_named_scopes_batch_finders
@@ -374,6 +369,16 @@ class NamedScopeTest < ActiveRecord::TestCase
Comment.for_first_post.for_first_author.all
end
end
+
+ def test_named_scopes_with_reserved_names
+ [:where, :with_scope].each do |protected_method|
+ assert_raises(ArgumentError) { Topic.scope protected_method }
+ end
+ end
+
+ def test_deprecated_named_scope_method
+ assert_deprecated('named_scope has been deprecated') { Topic.named_scope :deprecated_named_scope }
+ end
end
class DynamicScopeMatchTest < ActiveRecord::TestCase
diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb
index 195889f1df..d34c9b4895 100644
--- a/activerecord/test/cases/relations_test.rb
+++ b/activerecord/test/cases/relations_test.rb
@@ -68,10 +68,12 @@ class RelationTest < ActiveRecord::TestCase
assert topics.loaded?
- topics.reload
- assert ! topics.loaded?
+ original_size = topics.to_a.size
+ Topic.create! :title => 'fake'
- assert_queries(1) { topics.to_a }
+ assert_queries(1) { topics.reload }
+ assert_equal original_size + 1, topics.size
+ assert topics.loaded?
end
def test_finding_with_conditions
@@ -337,6 +339,11 @@ class RelationTest < ActiveRecord::TestCase
assert_raises(ActiveRecord::RecordNotFound) { authors.find(['42', 43]) }
end
+ def test_find_in_empty_array
+ authors = Author.scoped.where(:id => [])
+ assert authors.all.blank?
+ end
+
def test_exists
davids = Author.where(:name => 'David')
assert davids.exists?
@@ -418,10 +425,6 @@ class RelationTest < ActiveRecord::TestCase
end
end
- def test_invalid_merge
- assert_raises(ArgumentError) { Post.scoped & Developer.scoped }
- end
-
def test_count
posts = Post.scoped
diff --git a/activerecord/test/cases/validations_test.rb b/activerecord/test/cases/validations_test.rb
index 3a1d5ae212..5aac0229cd 100644
--- a/activerecord/test/cases/validations_test.rb
+++ b/activerecord/test/cases/validations_test.rb
@@ -19,7 +19,7 @@ end
class DeprecatedPerson < ActiveRecord::Base
set_table_name 'people'
- protected
+ private
def validate
errors[:name] << "always invalid"
@@ -124,7 +124,15 @@ class ValidationsTest < ActiveRecord::TestCase
def test_create_without_validation
reply = WrongReply.new
assert !reply.save
- assert reply.save(false)
+ assert reply.save(:validate => false)
+ end
+
+ def test_deprecated_create_without_validation
+ reply = WrongReply.new
+ assert !reply.save
+ assert_deprecated do
+ assert reply.save(false)
+ end
end
def test_create_without_validation_bang
@@ -153,4 +161,21 @@ class ValidationsTest < ActiveRecord::TestCase
topic = Topic.create("author_name" => "Dan Brown")
assert_equal "Dan Brown", topic["author_name"]
end
+
+ def test_validate_is_deprecated_on_create
+ p = DeprecatedPerson.new
+ assert_deprecated do
+ assert !p.valid?
+ end
+ assert_equal ["always invalid", "invalid on create"], p.errors[:name]
+ end
+
+ def test_validate_is_deprecated_on_update
+ p = DeprecatedPerson.new(:first_name => "David")
+ assert p.save(:validate => false)
+ assert_deprecated do
+ assert !p.valid?
+ end
+ assert_equal ["always invalid", "invalid on update"], p.errors[:name]
+ end
end
diff --git a/activerecord/test/models/comment.rb b/activerecord/test/models/comment.rb
index 399dea9f12..a8a99f6dce 100644
--- a/activerecord/test/models/comment.rb
+++ b/activerecord/test/models/comment.rb
@@ -1,7 +1,7 @@
class Comment < ActiveRecord::Base
- named_scope :containing_the_letter_e, :conditions => "comments.body LIKE '%e%'"
- named_scope :for_first_post, :conditions => { :post_id => 1 }
- named_scope :for_first_author,
+ scope :containing_the_letter_e, :conditions => "comments.body LIKE '%e%'"
+ scope :for_first_post, :conditions => { :post_id => 1 }
+ scope :for_first_author,
:joins => :post,
:conditions => { "posts.author_id" => 1 }
diff --git a/activerecord/test/models/company.rb b/activerecord/test/models/company.rb
index 7e93fda1eb..df5fd10b6b 100644
--- a/activerecord/test/models/company.rb
+++ b/activerecord/test/models/company.rb
@@ -45,7 +45,7 @@ class Firm < Company
has_many :unvalidated_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :validate => false
has_many :dependent_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :destroy
has_many :exclusively_dependent_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id", :dependent => :delete_all
- has_many :limited_clients, :class_name => "Client", :order => "id", :limit => 1
+ has_many :limited_clients, :class_name => "Client", :limit => 1
has_many :clients_like_ms, :conditions => "name = 'Microsoft'", :class_name => "Client", :order => "id"
has_many :clients_with_interpolated_conditions, :class_name => "Client", :conditions => 'rating > #{rating}'
has_many :clients_like_ms_with_hash_conditions, :conditions => { :name => 'Microsoft' }, :class_name => "Client", :order => "id"
@@ -91,10 +91,8 @@ class Firm < Company
end
class DependentFirm < Company
- # added order by id as in fixtures there are two accounts for Rails Core
- # Oracle tests were failing because of that as the second fixture was selected
- has_one :account, :foreign_key => "firm_id", :dependent => :nullify, :order => "id"
- has_many :companies, :foreign_key => 'client_of', :order => "id", :dependent => :nullify
+ has_one :account, :foreign_key => "firm_id", :dependent => :nullify
+ has_many :companies, :foreign_key => 'client_of', :dependent => :nullify
end
class Client < Company
diff --git a/activerecord/test/models/developer.rb b/activerecord/test/models/developer.rb
index 058970336b..e7a1e110d7 100644
--- a/activerecord/test/models/developer.rb
+++ b/activerecord/test/models/developer.rb
@@ -43,7 +43,7 @@ class Developer < ActiveRecord::Base
has_many :audit_logs
- named_scope :jamises, :conditions => {:name => 'Jamis'}
+ scope :jamises, :conditions => {:name => 'Jamis'}
validates_inclusion_of :salary, :in => 50000..200000
validates_length_of :name, :within => 3..20
@@ -81,7 +81,7 @@ end
class DeveloperOrderedBySalary < ActiveRecord::Base
self.table_name = 'developers'
default_scope :order => 'salary DESC'
- named_scope :by_name, :order => 'name DESC'
+ scope :by_name, :order => 'name DESC'
def self.all_ordered_by_name
with_scope(:find => { :order => 'name DESC' }) do
diff --git a/activerecord/test/models/organization.rb b/activerecord/test/models/organization.rb
index c85726169e..1da342a0bd 100644
--- a/activerecord/test/models/organization.rb
+++ b/activerecord/test/models/organization.rb
@@ -2,5 +2,5 @@ class Organization < ActiveRecord::Base
has_many :member_details
has_many :members, :through => :member_details
- named_scope :clubs, { :from => 'clubs' }
+ scope :clubs, { :from => 'clubs' }
end \ No newline at end of file
diff --git a/activerecord/test/models/person.rb b/activerecord/test/models/person.rb
index 57fa6418f1..2a73b1ee01 100644
--- a/activerecord/test/models/person.rb
+++ b/activerecord/test/models/person.rb
@@ -12,6 +12,6 @@ class Person < ActiveRecord::Base
has_many :agents, :class_name => 'Person', :foreign_key => 'primary_contact_id'
belongs_to :number1_fan, :class_name => 'Person'
- named_scope :males, :conditions => { :gender => 'M' }
- named_scope :females, :conditions => { :gender => 'F' }
+ scope :males, :conditions => { :gender => 'M' }
+ scope :females, :conditions => { :gender => 'F' }
end
diff --git a/activerecord/test/models/post.rb b/activerecord/test/models/post.rb
index 7392515ec7..f48b35486c 100644
--- a/activerecord/test/models/post.rb
+++ b/activerecord/test/models/post.rb
@@ -1,8 +1,8 @@
class Post < ActiveRecord::Base
- named_scope :containing_the_letter_a, :conditions => "body LIKE '%a%'"
- named_scope :ranked_by_comments, :order => "comments_count DESC"
- named_scope :limit, lambda {|limit| {:limit => limit} }
- named_scope :with_authors_at_address, lambda { |address| {
+ scope :containing_the_letter_a, where("body LIKE '%a%'")
+ scope :ranked_by_comments, order("comments_count DESC")
+ scope :limit_by, lambda {|l| limit(l) }
+ scope :with_authors_at_address, lambda { |address| {
:conditions => [ 'authors.author_address_id = ?', address.id ],
:joins => 'JOIN authors ON authors.id = posts.author_id'
}
@@ -19,13 +19,13 @@ class Post < ActiveRecord::Base
has_one :last_comment, :class_name => 'Comment', :order => 'id desc'
- named_scope :with_special_comments, :joins => :comments, :conditions => {:comments => {:type => 'SpecialComment'} }
- named_scope :with_very_special_comments, :joins => :comments, :conditions => {:comments => {:type => 'VerySpecialComment'} }
- named_scope :with_post, lambda {|post_id|
+ scope :with_special_comments, :joins => :comments, :conditions => {:comments => {:type => 'SpecialComment'} }
+ scope :with_very_special_comments, joins(:comments).where(:comments => {:type => 'VerySpecialComment'})
+ scope :with_post, lambda {|post_id|
{ :joins => :comments, :conditions => {:comments => {:post_id => post_id} } }
}
- has_many :comments, :order => "body" do
+ has_many :comments do
def find_most_recent
find(:first, :order => "id DESC")
end
@@ -73,7 +73,7 @@ class Post < ActiveRecord::Base
has_many :impatient_people, :through => :skimmers, :source => :person
def self.top(limit)
- ranked_by_comments.limit(limit)
+ ranked_by_comments.limit_by(limit)
end
def self.reset_log
diff --git a/activerecord/test/models/reply.rb b/activerecord/test/models/reply.rb
index f1ba45b528..264a49b465 100644
--- a/activerecord/test/models/reply.rb
+++ b/activerecord/test/models/reply.rb
@@ -1,7 +1,7 @@
require 'models/topic'
class Reply < Topic
- named_scope :base
+ scope :base
belongs_to :topic, :foreign_key => "parent_id", :counter_cache => true
belongs_to :topic_with_primary_key, :class_name => "Topic", :primary_key => "title", :foreign_key => "parent_title", :counter_cache => "replies_count"
diff --git a/activerecord/test/models/topic.rb b/activerecord/test/models/topic.rb
index baca4972cb..91fc7c9416 100644
--- a/activerecord/test/models/topic.rb
+++ b/activerecord/test/models/topic.rb
@@ -1,19 +1,19 @@
class Topic < ActiveRecord::Base
- named_scope :base
- named_scope :written_before, lambda { |time|
+ scope :base
+ scope :written_before, lambda { |time|
if time
{ :conditions => ['written_on < ?', time] }
end
}
- named_scope :approved, :conditions => {:approved => true}
- named_scope :rejected, :conditions => {:approved => false}
+ scope :approved, :conditions => {:approved => true}
+ scope :rejected, :conditions => {:approved => false}
- named_scope :by_lifo, :conditions => {:author_name => 'lifo'}
+ scope :by_lifo, :conditions => {:author_name => 'lifo'}
- named_scope :approved_as_hash_condition, :conditions => {:topics => {:approved => true}}
- named_scope 'approved_as_string', :conditions => {:approved => true}
- named_scope :replied, :conditions => ['replies_count > 0']
- named_scope :anonymous_extension do
+ scope :approved_as_hash_condition, :conditions => {:topics => {:approved => true}}
+ scope 'approved_as_string', :conditions => {:approved => true}
+ scope :replied, :conditions => ['replies_count > 0']
+ scope :anonymous_extension do
def one
1
end
@@ -33,8 +33,8 @@ class Topic < ActiveRecord::Base
2
end
end
- named_scope :named_extension, :extend => NamedExtension
- named_scope :multiple_extensions, :extend => [MultipleExtensionTwo, MultipleExtensionOne]
+ scope :named_extension, :extend => NamedExtension
+ scope :multiple_extensions, :extend => [MultipleExtensionTwo, MultipleExtensionOne]
has_many :replies, :dependent => :destroy, :foreign_key => "parent_id"
has_many :replies_with_primary_key, :class_name => "Reply", :dependent => :destroy, :primary_key => "title", :foreign_key => "parent_title"