aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorNeeraj Singh <neerajdotname@gmail.com>2010-06-27 11:17:44 -0400
committerJosé Valim <jose.valim@gmail.com>2010-07-08 23:24:12 +0200
commit1e53404fe9c39ad0849894d73e431315be8c0bf0 (patch)
tree57f1bc98e37e8f5ed17ed8126d1b43d3c6578288 /activerecord/test
parent87f64ef05e48ad8b374022ca944e34a7ad68551d (diff)
downloadrails-1e53404fe9c39ad0849894d73e431315be8c0bf0.tar.gz
rails-1e53404fe9c39ad0849894d73e431315be8c0bf0.tar.bz2
rails-1e53404fe9c39ad0849894d73e431315be8c0bf0.zip
reset_counter should work with non-traditional belongs_to and polymorphic belongs_to
[#4984 state:resolved] Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/counter_cache_test.rb19
-rw-r--r--activerecord/test/fixtures/cars.yml4
-rw-r--r--activerecord/test/models/car.rb4
-rw-r--r--activerecord/test/models/engine.rb3
-rw-r--r--activerecord/test/models/wheel.rb3
-rw-r--r--activerecord/test/schema/schema.rb13
6 files changed, 43 insertions, 3 deletions
diff --git a/activerecord/test/cases/counter_cache_test.rb b/activerecord/test/cases/counter_cache_test.rb
index 377de168b9..137236255d 100644
--- a/activerecord/test/cases/counter_cache_test.rb
+++ b/activerecord/test/cases/counter_cache_test.rb
@@ -1,17 +1,20 @@
require 'cases/helper'
require 'models/topic'
+require 'models/car'
+require 'models/wheel'
+require 'models/engine'
require 'models/reply'
require 'models/category'
require 'models/categorization'
class CounterCacheTest < ActiveRecord::TestCase
- fixtures :topics, :categories, :categorizations
+ fixtures :topics, :categories, :categorizations, :cars
- class SpecialTopic < ::Topic
+ class ::SpecialTopic < ::Topic
has_many :special_replies, :foreign_key => 'parent_id'
end
- class SpecialReply < ::Reply
+ class ::SpecialReply < ::Reply
belongs_to :special_topic, :foreign_key => 'parent_id', :counter_cache => 'replies_count'
end
@@ -58,6 +61,16 @@ class CounterCacheTest < ActiveRecord::TestCase
end
end
+ test "reset counter should with belongs_to which has class_name" do
+ car = cars(:honda)
+ assert_nothing_raised do
+ Car.reset_counters(car.id, :engines)
+ end
+ assert_nothing_raised do
+ Car.reset_counters(car.id, :wheels)
+ end
+ end
+
test "update counter with initial null value" do
category = categories(:general)
assert_equal 2, category.categorizations.count
diff --git a/activerecord/test/fixtures/cars.yml b/activerecord/test/fixtures/cars.yml
new file mode 100644
index 0000000000..23c98e8144
--- /dev/null
+++ b/activerecord/test/fixtures/cars.yml
@@ -0,0 +1,4 @@
+honda:
+ id: 1
+ name: honda
+ engines_count: 0
diff --git a/activerecord/test/models/car.rb b/activerecord/test/models/car.rb
new file mode 100644
index 0000000000..1101180a67
--- /dev/null
+++ b/activerecord/test/models/car.rb
@@ -0,0 +1,4 @@
+class Car < ActiveRecord::Base
+ has_many :engines
+ has_many :wheels, :as => :wheelable
+end
diff --git a/activerecord/test/models/engine.rb b/activerecord/test/models/engine.rb
new file mode 100644
index 0000000000..751c3f02d1
--- /dev/null
+++ b/activerecord/test/models/engine.rb
@@ -0,0 +1,3 @@
+class Engine < ActiveRecord::Base
+ belongs_to :my_car, :class_name => 'Car', :foreign_key => 'car_id', :counter_cache => :engines_count
+end
diff --git a/activerecord/test/models/wheel.rb b/activerecord/test/models/wheel.rb
new file mode 100644
index 0000000000..26868bce5e
--- /dev/null
+++ b/activerecord/test/models/wheel.rb
@@ -0,0 +1,3 @@
+class Wheel < ActiveRecord::Base
+ belongs_to :wheelable, :polymorphic => true, :counter_cache => true
+end
diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb
index b212e7cff2..bea351b95a 100644
--- a/activerecord/test/schema/schema.rb
+++ b/activerecord/test/schema/schema.rb
@@ -82,6 +82,12 @@ ActiveRecord::Schema.define do
t.string :name
end
+ create_table :cars, :force => true do |t|
+ t.string :name
+ t.integer :engines_count
+ t.integer :wheels_count
+ end
+
create_table :categories, :force => true do |t|
t.string :name, :null => false
t.string :type
@@ -179,6 +185,9 @@ ActiveRecord::Schema.define do
end
add_index :edges, [:source_id, :sink_id], :unique => true, :name => 'unique_edge_index'
+ create_table :engines, :force => true do |t|
+ t.integer :car_id
+ end
create_table :entrants, :force => true do |t|
t.string :name, :null => false
@@ -566,6 +575,10 @@ ActiveRecord::Schema.define do
t.integer :zine_id
end
+ create_table :wheels, :force => true do |t|
+ t.references :wheelable, :polymorphic => true
+ end
+
create_table :zines, :force => true do |t|
t.string :title
end