aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord')
-rwxr-xr-xactiverecord/test/cases/base_test.rb49
-rwxr-xr-xactiverecord/test/cases/counter_cache_test.rb58
2 files changed, 58 insertions, 49 deletions
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index 0c7723c0e6..1d883f7ea8 100755
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -708,55 +708,6 @@ class BasicsTest < ActiveRecord::TestCase
assert Topic.find(2).approved?
end
- def test_increment_counter
- Topic.increment_counter("replies_count", 1)
- assert_equal 2, Topic.find(1).replies_count
-
- Topic.increment_counter("replies_count", 1)
- assert_equal 3, Topic.find(1).replies_count
- end
-
- def test_decrement_counter
- Topic.decrement_counter("replies_count", 2)
- assert_equal(-1, Topic.find(2).replies_count)
-
- Topic.decrement_counter("replies_count", 2)
- assert_equal(-2, Topic.find(2).replies_count)
- end
-
- def test_reset_counters
- assert_equal 1, Topic.find(1).replies_count
-
- Topic.increment_counter("replies_count", 1)
- assert_equal 2, Topic.find(1).replies_count
-
- Topic.reset_counters(1, :replies)
- assert_equal 1, Topic.find(1).replies_count
- end
-
- def test_update_counter
- category = categories(:general)
- assert_nil category.categorizations_count
- assert_equal 2, category.categorizations.count
-
- Category.update_counters(category.id, "categorizations_count" => category.categorizations.count)
- category.reload
- assert_not_nil category.categorizations_count
- assert_equal 2, category.categorizations_count
-
- Category.update_counters(category.id, "categorizations_count" => category.categorizations.count)
- category.reload
- assert_not_nil category.categorizations_count
- assert_equal 4, category.categorizations_count
-
- category_2 = categories(:technology)
- count_1, count_2 = (category.categorizations_count || 0), (category_2.categorizations_count || 0)
- Category.update_counters([category.id, category_2.id], "categorizations_count" => 2)
- category.reload; category_2.reload
- assert_equal count_1 + 2, category.categorizations_count
- assert_equal count_2 + 2, category_2.categorizations_count
- end
-
def test_update_all
assert_equal Topic.count, Topic.update_all("content = 'bulk updated!'")
assert_equal "bulk updated!", Topic.find(1).content
diff --git a/activerecord/test/cases/counter_cache_test.rb b/activerecord/test/cases/counter_cache_test.rb
new file mode 100755
index 0000000000..b72356cf6f
--- /dev/null
+++ b/activerecord/test/cases/counter_cache_test.rb
@@ -0,0 +1,58 @@
+require 'cases/helper'
+require 'models/topic'
+require 'models/reply'
+require 'models/category'
+require 'models/categorization'
+
+class CounterCacheTest < ActiveRecord::TestCase
+ fixtures :topics, :categories, :categorizations
+
+ setup do
+ @topic = Topic.find(1)
+ end
+
+ test "increment counter" do
+ assert_difference '@topic.reload.replies_count' do
+ Topic.increment_counter(:replies_count, @topic.id)
+ end
+ end
+
+ test "decrement counter" do
+ assert_difference '@topic.reload.replies_count', -1 do
+ Topic.decrement_counter(:replies_count, @topic.id)
+ end
+ end
+
+ test "reset counters" do
+ # throw the count off by 1
+ Topic.increment_counter(:replies_count, @topic.id)
+
+ # check that it gets reset
+ assert_difference '@topic.reload.replies_count', -1 do
+ Topic.reset_counters(@topic.id, :replies)
+ end
+ end
+
+ test "update counter with initial null value" do
+ category = categories(:general)
+ assert_equal 2, category.categorizations.count
+ assert_nil category.categorizations_count
+
+ Category.update_counters(category.id, :categorizations_count => category.categorizations.count)
+ assert_equal 2, category.reload.categorizations_count
+ end
+
+ test "update counter for decrement" do
+ assert_difference '@topic.reload.replies_count', -3 do
+ Topic.update_counters(@topic.id, :replies_count => -3)
+ end
+ end
+
+ test "update counters of multiple records" do
+ t1, t2 = topics(:first, :second)
+
+ assert_difference ['t1.reload.replies_count', 't2.reload.replies_count'], 2 do
+ Topic.update_counters([t1.id, t2.id], :replies_count => 2)
+ end
+ end
+end