aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/calculations_test.rb
diff options
context:
space:
mode:
authorMiklos Fazkeas <mfazekas@szemafor.com>2014-12-09 15:20:22 +0100
committerMiklos Fazkeas <mfazekas@szemafor.com>2014-12-11 00:48:06 +0100
commitbd0d47eed6d88184cd9209b12f853f06b15de48a (patch)
tree0fd80aed0dd503a4f81634379756519e24c6ef34 /activerecord/test/cases/calculations_test.rb
parent81e940c313b6924915ca77a0f3af66332c9f0b1f (diff)
downloadrails-bd0d47eed6d88184cd9209b12f853f06b15de48a.tar.gz
rails-bd0d47eed6d88184cd9209b12f853f06b15de48a.tar.bz2
rails-bd0d47eed6d88184cd9209b12f853f06b15de48a.zip
Fix ProtocolViolation/bind message supplies for polymorphic + pluck or group
Diffstat (limited to 'activerecord/test/cases/calculations_test.rb')
-rw-r--r--activerecord/test/cases/calculations_test.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb
index e886268a72..1264251418 100644
--- a/activerecord/test/cases/calculations_test.rb
+++ b/activerecord/test/cases/calculations_test.rb
@@ -10,6 +10,7 @@ require 'models/reply'
require 'models/minivan'
require 'models/speedometer'
require 'models/ship_part'
+require 'models/treasure'
class NumericData < ActiveRecord::Base
self.table_name = 'numeric_data'
@@ -609,4 +610,27 @@ class CalculationsTest < ActiveRecord::TestCase
.pluck('topics.title', 'replies_topics.title')
assert_equal expected, actual
end
+
+ def test_calculation_with_polymorphic_relation
+ sp = ShipPart.create! name: "no trinket"
+ sp_with_trinket = ShipPart.create! name: "has_trinket"
+ sp_with_trinket.trinkets.create!
+ ship_parts = [sp.id,sp_with_trinket.id]
+
+ sp_with_trinket_relation = ShipPart.where(id:ship_parts).joins(:trinkets)
+ sp_with_trinket_relation2 = sp_with_trinket_relation.where(name:"has_trinket")
+ sp_with_trinket_relation3 = sp_with_trinket_relation.where(treasures: {looter_type:"ShipPart"})
+ sp_with_trinket_relation4 = ShipPart.where(id:ship_parts).eager_load(:trinkets).where.not(treasures:{id:nil})
+
+ [sp_with_trinket_relation,sp_with_trinket_relation2,
+ sp_with_trinket_relation3,sp_with_trinket_relation4].each do |with_trinket_rel|
+ assert_equal 1, with_trinket_rel.count
+ assert_equal [sp_with_trinket.id], with_trinket_rel.pluck(:id)
+ assert_equal sp_with_trinket.id, with_trinket_rel.sum(:id)
+ assert_equal ({"has_trinket" => sp_with_trinket.id}), with_trinket_rel.group('ship_parts.name').sum(:id)
+ assert_equal ({"has_trinket" => sp_with_trinket.id}), with_trinket_rel.where(id:sp_with_trinket.id).
+ group('ship_parts.name').sum(:id)
+ end
+ end
+
end