rails--rails/activerecord/test/cases/counter_cache_test.rb

59 lines
1.6 KiB
Ruby
Raw Normal View History

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