Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

test that ActiveRecord `destroy` and `destroy_all` return destroyed r…

…ecords

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
  • Loading branch information...
commit 2d3bc99b0d4d75209445b8f352e0b51b0d18a4c0 1 parent ba9c469
@mislav mislav authored jeremy committed
View
5 activerecord/lib/active_record/associations/association_collection.rb
@@ -234,8 +234,9 @@ def clear
# See destroy for more info.
def destroy_all
load_target
- destroy(@target)
- reset_target!
+ destroy(@target).tap do
+ reset_target!
+ end
end
def create(attrs = {})
View
7 activerecord/test/cases/associations/has_many_associations_test.rb
@@ -834,8 +834,11 @@ def test_destroying_a_collection
def test_destroy_all
force_signal37_to_load_all_clients_of_firm
- assert !companies(:first_firm).clients_of_firm.empty?, "37signals has clients after load"
- companies(:first_firm).clients_of_firm.destroy_all
+ clients = companies(:first_firm).clients_of_firm.to_a
+ assert !clients.empty?, "37signals has clients after load"
+ destroyed = companies(:first_firm).clients_of_firm.destroy_all
+ assert_equal clients.sort_by(&:id), destroyed.sort_by(&:id)
+ assert destroyed.all? { |client| client.frozen? }, "destroyed clients should be frozen"
assert companies(:first_firm).clients_of_firm.empty?, "37signals has no clients after destroy all"
assert companies(:first_firm).clients_of_firm(true).empty?, "37signals has no clients after destroy all and refresh"
end
View
24 activerecord/test/cases/base_test.rb
@@ -587,17 +587,25 @@ def test_table_name_guesses
end
def test_destroy_all
- original_count = Topic.count
- topics_by_mary = Topic.count(:conditions => mary = "author_name = 'Mary'")
-
- Topic.destroy_all mary
- assert_equal original_count - topics_by_mary, Topic.count
+ conditions = "author_name = 'Mary'"
+ topics_by_mary = Topic.all(:conditions => conditions, :order => 'id')
+ assert ! topics_by_mary.empty?
+
+ assert_difference('Topic.count', -topics_by_mary.size) do
+ destroyed = Topic.destroy_all(conditions).sort_by(&:id)
+ assert_equal topics_by_mary, destroyed
+ assert destroyed.all? { |topic| topic.frozen? }
+ end
end
def test_destroy_many
- assert_equal 3, Client.count
- Client.destroy([2, 3])
- assert_equal 1, Client.count
+ clients = Client.find([2, 3], :order => 'id')
+
+ assert_difference('Client.count', -2) do
+ destroyed = Client.destroy([2, 3]).sort_by(&:id)
+ assert_equal clients, destroyed
+ assert destroyed.all? { |client| client.frozen? }
+ end
end
def test_delete_many
Please sign in to comment.
Something went wrong with that request. Please try again.