composite_primary_keys 6.0.1 → 6.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/History.rdoc +9 -0
- data/README.rdoc +1 -1
- data/lib/composite_primary_keys.rb +3 -1
- data/lib/composite_primary_keys/active_record_overides.rb +37 -0
- data/lib/composite_primary_keys/base.rb +6 -3
- data/lib/composite_primary_keys/connection_adapters/postgresql_adapter.rb +11 -1
- data/lib/composite_primary_keys/relation/batches.rb +1 -1
- data/lib/composite_primary_keys/version.rb +1 -1
- data/scripts/console.rb +0 -0
- data/test/abstract_unit.rb +3 -1
- data/test/fixtures/reference_code_using_composite_key_alias.rb +8 -0
- data/test/fixtures/reference_code_using_simple_key_alias.rb +8 -0
- data/test/fixtures/room.rb +1 -1
- data/test/fixtures/user.rb +1 -1
- data/test/test_aliases.rb +18 -0
- data/test/test_associations.rb +26 -32
- data/test/test_calculations.rb +7 -8
- data/test/test_create.rb +14 -14
- data/test/test_find.rb +4 -4
- data/test/test_habtm.rb +1 -1
- data/test/test_ids.rb +1 -1
- data/test/test_update.rb +2 -3
- metadata +24 -22
- data/test/connections/databases.yml +0 -18
- data/test/debug.log +0 -589
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NWNiZWUyNjQ5MTQ5Y2UzYTI4Nzg1NjcyOGMxOTBhYzJmZTAzMmZmNQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OWM0NTg5MmYyMzI5OTViODJmYTJlYmZhOGEyOWNjMjY2MWQzMzNjYQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MzE2Y2ViOTJiMDVkZGU4ZTQwMTJjODBjZjViN2ZmOGViMGI5MDJmOGQ1YTMw
|
10
|
+
OGMxYzg1YjhjNDVkMTYzZjIyNzU3Njg5YWI5YzY4NjY5NTJmYWY0NDllZGI1
|
11
|
+
ZmIxZmY0MjMxYzkyN2IzNmU0ZTgyZjk3MGUyYWZkMzkyNmMwMjU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTBlNGNhNjBiMTEwMWM5YjcyZmY5OGNjMmQzNTQ4YjhkN2IxZWQ5OGE0MjYw
|
14
|
+
ZGNhOTE5NzY2M2MxZWNjMmNkYjU3NWIyYTQ0OWYyYzYwYzM1YWJjYTkyOTI0
|
15
|
+
MDExYTkyYzIwNTgzNzI2OTY4ZTBmOGIwYmQ5Njc1Mjc5ZmI5ODg=
|
data/History.rdoc
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 6.0.3 (2014-04-28)
|
2
|
+
|
3
|
+
* Fixes setting of primary key when CPK is not used for a given model (see #191)
|
4
|
+
|
5
|
+
== 6.0.2 (2014-04-28)
|
6
|
+
|
7
|
+
* Fixes relating to ActiveRecord 4.0.x compatibility (Dan Draper)
|
8
|
+
* Ensure that primary key is set on instance when creating new records (Dan Draper)
|
9
|
+
|
1
10
|
== 6.0.1 (2013-11-29)
|
2
11
|
|
3
12
|
* Handle records == :all in HasManyAssociation#delete_records. Without this calling
|
data/README.rdoc
CHANGED
@@ -48,6 +48,7 @@ require 'active_record/associations/preloader/association'
|
|
48
48
|
require 'active_record/associations/preloader/belongs_to'
|
49
49
|
require 'active_record/associations/preloader/has_and_belongs_to_many'
|
50
50
|
|
51
|
+
|
51
52
|
require 'active_model/dirty'
|
52
53
|
|
53
54
|
require 'active_record/attribute_methods/dirty'
|
@@ -67,6 +68,7 @@ require 'active_record/validations/uniqueness'
|
|
67
68
|
|
68
69
|
# CPK files
|
69
70
|
require 'composite_primary_keys/persistence'
|
71
|
+
require 'composite_primary_keys/active_record_overides'
|
70
72
|
require 'composite_primary_keys/base'
|
71
73
|
require 'composite_primary_keys/core'
|
72
74
|
require 'composite_primary_keys/composite_arrays'
|
@@ -102,4 +104,4 @@ require 'composite_primary_keys/relation/calculations'
|
|
102
104
|
require 'composite_primary_keys/relation/finder_methods'
|
103
105
|
require 'composite_primary_keys/relation/query_methods'
|
104
106
|
|
105
|
-
require 'composite_primary_keys/validations/uniqueness'
|
107
|
+
require 'composite_primary_keys/validations/uniqueness'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module CompositePrimaryKeys
|
2
|
+
module ActiveRecord
|
3
|
+
module Overides
|
4
|
+
|
5
|
+
# This override ensures that pkeys are set on the instance when records are created.
|
6
|
+
# However, while ActiveRecord::Persistence defines a create_record method
|
7
|
+
# the call in create_or_update is actually calling the method create_record in the Dirty concern
|
8
|
+
# which removes the pkey attrs and also sets updated/created at timestamps
|
9
|
+
# For some reason when we overide here we lose dirty!
|
10
|
+
# So, for now, timestamps are recorded explicitly
|
11
|
+
def create_record(attribute_names = nil)
|
12
|
+
record_timestamps!
|
13
|
+
attribute_names ||= keys_for_partial_write
|
14
|
+
attributes_values = arel_attributes_with_values_for_create(attribute_names)
|
15
|
+
|
16
|
+
new_id = self.class.unscoped.insert attributes_values
|
17
|
+
self.id = new_id if self.class.primary_key
|
18
|
+
|
19
|
+
@new_record = false
|
20
|
+
id
|
21
|
+
end
|
22
|
+
|
23
|
+
def record_timestamps!
|
24
|
+
if self.record_timestamps
|
25
|
+
current_time = current_time_from_proper_timezone
|
26
|
+
|
27
|
+
all_timestamp_attributes.each do |column|
|
28
|
+
if respond_to?(column) && respond_to?("#{column}=") && self.send(column).nil?
|
29
|
+
write_attribute(column.to_s, current_time)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
@@ -23,9 +23,9 @@ module ActiveRecord
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def primary_key_with_composite_key_support=(keys)
|
27
27
|
unless keys.kind_of?(Array)
|
28
|
-
self.
|
28
|
+
self.primary_key_without_composite_key_support = keys
|
29
29
|
return
|
30
30
|
end
|
31
31
|
|
@@ -34,8 +34,11 @@ module ActiveRecord
|
|
34
34
|
class_eval <<-EOV
|
35
35
|
extend CompositeClassMethods
|
36
36
|
include CompositeInstanceMethods
|
37
|
+
include CompositePrimaryKeys::ActiveRecord::Overides
|
37
38
|
EOV
|
38
39
|
end
|
40
|
+
alias_method_chain :primary_key=, :composite_key_support
|
41
|
+
alias_method :primary_keys=, :primary_key=
|
39
42
|
|
40
43
|
def set_primary_keys(*keys)
|
41
44
|
ActiveSupport::Deprecation.warn(
|
@@ -113,7 +116,7 @@ module ActiveRecord
|
|
113
116
|
|
114
117
|
def ==(comparison_object)
|
115
118
|
return true if equal? comparison_object
|
116
|
-
ids.is_a?(Array) ? super(comparison_object) && ids.all? {|id| id.
|
119
|
+
ids.is_a?(Array) ? super(comparison_object) && ids.all? {|id| !id.nil?} : super(comparison_object)
|
117
120
|
end
|
118
121
|
|
119
122
|
def can_change_primary_key_values?
|
@@ -31,6 +31,16 @@ module ActiveRecord
|
|
31
31
|
|
32
32
|
[sql, binds]
|
33
33
|
end
|
34
|
+
|
35
|
+
# Returns a single value if query returns a single element
|
36
|
+
# otherwise returns an array coresponding to the composite keys
|
37
|
+
#
|
38
|
+
def last_inserted_id(result)
|
39
|
+
row = result.rows.first
|
40
|
+
if Array === row
|
41
|
+
row.size == 1 ? row[0] : row
|
42
|
+
end
|
43
|
+
end
|
34
44
|
end
|
35
45
|
end
|
36
|
-
end
|
46
|
+
end
|
@@ -24,7 +24,7 @@ module CompositePrimaryKeys
|
|
24
24
|
# records = relation.where(table[primary_key].gteq(start)).all
|
25
25
|
records = self.primary_key.reduce(relation) do |rel, key|
|
26
26
|
rel.where(table[key].gteq(start))
|
27
|
-
end
|
27
|
+
end
|
28
28
|
|
29
29
|
while records.any?
|
30
30
|
records_size = records.size
|
data/scripts/console.rb
CHANGED
File without changes
|
data/test/abstract_unit.rb
CHANGED
@@ -25,6 +25,8 @@ ActiveRecord::Base.configurations[:test] = spec
|
|
25
25
|
# Tell ActiveRecord where to find models
|
26
26
|
ActiveSupport::Dependencies.autoload_paths << File.join(PROJECT_ROOT, 'test', 'fixtures')
|
27
27
|
|
28
|
+
I18n.config.enforce_available_locales = true
|
29
|
+
|
28
30
|
class ActiveSupport::TestCase
|
29
31
|
include ActiveRecord::TestFixtures
|
30
32
|
|
@@ -71,7 +73,7 @@ class ActiveSupport::TestCase
|
|
71
73
|
@klass_info = classes[@key_test]
|
72
74
|
@klass, @primary_keys = @klass_info[:class], @klass_info[:primary_keys]
|
73
75
|
order = @klass.primary_key.is_a?(String) ? @klass.primary_key : @klass.primary_key.join(',')
|
74
|
-
@first = @klass.
|
76
|
+
@first = @klass.order(order).first
|
75
77
|
yield
|
76
78
|
end
|
77
79
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class ReferenceCodeUsingCompositeKeyAlias < ActiveRecord::Base
|
2
|
+
self.table_name = 'reference_codes'
|
3
|
+
self.primary_key = [:reference_type_id, :reference_code]
|
4
|
+
|
5
|
+
belongs_to :reference_type, :foreign_key => "reference_type_id"
|
6
|
+
|
7
|
+
validates_presence_of :reference_code, :code_label, :abbreviation
|
8
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class ReferenceCodeUsingSimpleKeyAlias < ActiveRecord::Base
|
2
|
+
self.table_name = 'reference_codes'
|
3
|
+
self.primary_key = :code_label
|
4
|
+
|
5
|
+
belongs_to :reference_type, :foreign_key => "reference_type_id"
|
6
|
+
|
7
|
+
validates_presence_of :reference_code, :code_label, :abbreviation
|
8
|
+
end
|
data/test/fixtures/room.rb
CHANGED
@@ -6,6 +6,6 @@ class Room < ActiveRecord::Base
|
|
6
6
|
has_many :room_attributes, :through => :room_attribute_assignments
|
7
7
|
|
8
8
|
def find_custom_room_attributes
|
9
|
-
room_attributes.
|
9
|
+
room_attributes.where("room_attributes.name != ?", "type")
|
10
10
|
end
|
11
11
|
end
|
data/test/fixtures/user.rb
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.expand_path('../abstract_unit', __FILE__)
|
2
|
+
|
3
|
+
class TestAliases < ActiveSupport::TestCase
|
4
|
+
fixtures :reference_codes
|
5
|
+
|
6
|
+
def test_primary_key_setter_alias_composite_key
|
7
|
+
reference_code = ReferenceCodeUsingCompositeKeyAlias.find([1, 2])
|
8
|
+
assert_equal 'MRS', reference_code.code_label
|
9
|
+
assert_equal 'Mrs', reference_code.abbreviation
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_primary_key_setter_alias_simple_key
|
13
|
+
reference_code = ReferenceCodeUsingSimpleKeyAlias.find('MRS')
|
14
|
+
assert_equal 1, reference_code.reference_type_id
|
15
|
+
assert_equal 2, reference_code.reference_code
|
16
|
+
assert_equal 'Mrs', reference_code.abbreviation
|
17
|
+
end
|
18
|
+
end
|
data/test/test_associations.rb
CHANGED
@@ -29,7 +29,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
29
29
|
# Its not generating the instances of associated classes from the rows
|
30
30
|
def test_find_includes
|
31
31
|
# Old style
|
32
|
-
products = Product.
|
32
|
+
products = Product.includes(:product_tariffs).all
|
33
33
|
assert_equal(3, products.length)
|
34
34
|
assert_equal(3, products.inject(0) {|sum, product| sum + product.product_tariffs.length})
|
35
35
|
|
@@ -44,8 +44,9 @@ class TestAssociations < ActiveSupport::TestCase
|
|
44
44
|
product_tarrif = product_tariffs(:second_free)
|
45
45
|
|
46
46
|
# Old style, include a where clause to force eager loading
|
47
|
-
products = Product.find(:all, :include => :product_tariffs,
|
48
|
-
|
47
|
+
#products = Product.find(:all, :include => :product_tariffs,
|
48
|
+
# :conditions => ["product_tariffs.product_id = ?", product.id])
|
49
|
+
products = Product.includes(:product_tariffs).where("product_tariffs.product_id = ?", product.id).references(:product_tariffs)
|
49
50
|
|
50
51
|
assert_equal(1, products.length)
|
51
52
|
assert_equal(product, products.first)
|
@@ -60,7 +61,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
60
61
|
|
61
62
|
def test_find_includes_tariffs
|
62
63
|
# Old style
|
63
|
-
tariffs = Tariff.
|
64
|
+
tariffs = Tariff.includes(:product_tariffs)
|
64
65
|
assert_equal(3, tariffs.length)
|
65
66
|
assert_equal(3, tariffs.inject(0) {|sum, tariff| sum + tariff.product_tariffs.length})
|
66
67
|
|
@@ -72,7 +73,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
72
73
|
|
73
74
|
def test_find_includes_product_tariffs_product
|
74
75
|
# Old style
|
75
|
-
product_tariffs = ProductTariff.
|
76
|
+
product_tariffs = ProductTariff.includes(:product)
|
76
77
|
assert_not_nil(product_tariffs)
|
77
78
|
assert_equal(3, product_tariffs.length)
|
78
79
|
|
@@ -84,7 +85,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
84
85
|
|
85
86
|
def test_find_includes_product_tariffs_tariff
|
86
87
|
# Old style
|
87
|
-
product_tariffs = ProductTariff.
|
88
|
+
product_tariffs = ProductTariff.includes(:tariff)
|
88
89
|
assert_equal(3, product_tariffs.length)
|
89
90
|
|
90
91
|
# New style
|
@@ -93,7 +94,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
93
94
|
end
|
94
95
|
|
95
96
|
def test_has_many_through
|
96
|
-
products = Product.
|
97
|
+
products = Product.includes(:tariffs)
|
97
98
|
assert_equal(3, products.length)
|
98
99
|
|
99
100
|
tarrifs_length = products.inject(0) {|sum, product| sum + product.tariffs.length}
|
@@ -101,12 +102,12 @@ class TestAssociations < ActiveSupport::TestCase
|
|
101
102
|
end
|
102
103
|
|
103
104
|
def test_new_style_includes_with_conditions
|
104
|
-
product_tariff = ProductTariff.includes(:tariff).where('tariffs.amount < 5').first
|
105
|
+
product_tariff = ProductTariff.includes(:tariff).where('tariffs.amount < 5').references(:tariffs).first
|
105
106
|
assert_equal(0, product_tariff.tariff.amount)
|
106
107
|
end
|
107
108
|
|
108
109
|
def test_find_product_includes
|
109
|
-
products = Product.
|
110
|
+
products = Product.includes(:product_tariffs => :tariff)
|
110
111
|
assert_equal(3, products.length)
|
111
112
|
|
112
113
|
product_tariffs_length = products.inject(0) {|sum, product| sum + product.product_tariffs.length}
|
@@ -114,7 +115,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
114
115
|
end
|
115
116
|
|
116
117
|
def test_find_tariffs_includes
|
117
|
-
tariffs = Tariff.
|
118
|
+
tariffs = Tariff.includes(:product_tariffs => :product)
|
118
119
|
assert_equal(3, tariffs.length)
|
119
120
|
|
120
121
|
product_tariffs_length = tariffs.inject(0) {|sum, tariff| sum + tariff.product_tariffs.length}
|
@@ -122,7 +123,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
122
123
|
end
|
123
124
|
|
124
125
|
def test_has_many_through_when_not_pre_loaded
|
125
|
-
student = Student.
|
126
|
+
student = Student.first
|
126
127
|
rooms = student.rooms
|
127
128
|
assert_equal(1, rooms.size)
|
128
129
|
assert_equal(1, rooms.first.dorm_id)
|
@@ -130,7 +131,7 @@ class TestAssociations < ActiveSupport::TestCase
|
|
130
131
|
end
|
131
132
|
|
132
133
|
def test_has_many_through_when_through_association_is_composite
|
133
|
-
dorm = Dorm.
|
134
|
+
dorm = Dorm.first
|
134
135
|
assert_equal(3, dorm.rooms.length)
|
135
136
|
assert_equal(1, dorm.rooms.first.room_attributes.length)
|
136
137
|
assert_equal('type', dorm.rooms.first.room_attributes.first.name)
|
@@ -143,10 +144,10 @@ class TestAssociations < ActiveSupport::TestCase
|
|
143
144
|
suburb = Suburb.find([2, 1])
|
144
145
|
assert_equal 1, suburb.first_streets.size
|
145
146
|
|
146
|
-
suburb = Suburb.find([2, 1]
|
147
|
+
suburb = Suburb.includes(:streets).find([2, 1])
|
147
148
|
assert_equal 2, suburb.streets.size
|
148
149
|
|
149
|
-
suburb = Suburb.find([2, 1]
|
150
|
+
suburb = Suburb.includes(:first_streets).find([2, 1])
|
150
151
|
assert_equal 1, suburb.first_streets.size
|
151
152
|
end
|
152
153
|
|
@@ -220,53 +221,46 @@ class TestAssociations < ActiveSupport::TestCase
|
|
220
221
|
end
|
221
222
|
|
222
223
|
def test_joins_has_many_with_primary_key
|
223
|
-
|
224
|
+
#@membership = Membership.find(:first, :joins => :readings, :conditions => { :readings => { :id => 1 } })
|
225
|
+
@membership = Membership.joins(:readings).where(readings: { id: 1 }).first
|
224
226
|
|
225
227
|
assert_equal [1, 1], @membership.id
|
226
228
|
end
|
227
229
|
|
228
230
|
def test_joins_has_one_with_primary_key
|
229
|
-
@membership = Membership.
|
230
|
-
:conditions => { :readings => { :id => 2 } })
|
231
|
+
@membership = Membership.joins(:readings).where(readings: { id: 2 }).first
|
231
232
|
|
232
233
|
assert_equal [1, 1], @membership.id
|
233
234
|
end
|
234
235
|
|
235
236
|
def test_has_many_through_with_conditions_when_through_association_is_not_composite
|
236
|
-
user = User.
|
237
|
-
assert_equal 1, user.articles.
|
237
|
+
user = User.first
|
238
|
+
assert_equal 1, user.articles.where("articles.name = ?", "Article One").size
|
238
239
|
end
|
239
240
|
|
240
241
|
def test_has_many_through_with_conditions_when_through_association_is_composite
|
241
|
-
room = Room.
|
242
|
-
assert_equal 0, room.room_attributes.
|
242
|
+
room = Room.first
|
243
|
+
assert_equal 0, room.room_attributes.where("room_attributes.name != ?", "type").size
|
243
244
|
end
|
244
245
|
|
245
246
|
def test_has_many_through_on_custom_finder_when_through_association_is_composite_finder_when_through_association_is_not_composite
|
246
|
-
user = User.
|
247
|
+
user = User.first
|
247
248
|
assert_equal(1, user.find_custom_articles.size)
|
248
249
|
end
|
249
250
|
|
250
251
|
def test_has_many_through_on_custom_finder_when_through_association_is_composite
|
251
|
-
room = Room.
|
252
|
+
room = Room.first
|
252
253
|
assert_equal(0, room.find_custom_room_attributes.size)
|
253
254
|
end
|
254
255
|
|
255
256
|
def test_has_many_with_primary_key_with_associations
|
256
|
-
|
257
|
-
memberships = Membership.find(:all, :include => :statuses,
|
258
|
-
:conditions => ["membership_statuses.status = ?",
|
259
|
-
'Active'])
|
260
|
-
|
257
|
+
memberships = Membership.includes(:statuses).where("membership_statuses.status = ?", 'Active').references(:membership_statuses)
|
261
258
|
assert_equal(1, memberships.length)
|
262
259
|
assert_equal([1,1], memberships[0].id)
|
263
260
|
end
|
264
261
|
|
265
262
|
def test_limitable_reflections
|
266
|
-
memberships = Membership.
|
267
|
-
:conditions => ["membership_statuses.status = ?",
|
268
|
-
'Active'],
|
269
|
-
:limit => 1)
|
263
|
+
memberships = Membership.includes(:statuses).where("membership_statuses.status = ?", 'Active').limit(1)
|
270
264
|
assert_equal(1, memberships.length)
|
271
265
|
assert_equal([1,1], memberships[0].id)
|
272
266
|
end
|
data/test/test_calculations.rb
CHANGED
@@ -6,28 +6,27 @@ class TestCalculations < ActiveSupport::TestCase
|
|
6
6
|
:departments, :employees, :memberships, :membership_statuses
|
7
7
|
|
8
8
|
def test_count
|
9
|
-
assert_equal(3, Product.
|
10
|
-
assert_equal(3, Tariff.
|
9
|
+
assert_equal(3, Product.includes(:product_tariffs).count)
|
10
|
+
assert_equal(3, Tariff.includes(:product_tariffs).count)
|
11
11
|
|
12
12
|
expected = {Date.today => 2,
|
13
13
|
Date.today.next => 1}
|
14
14
|
|
15
|
-
assert_equal(expected, Tariff.
|
15
|
+
assert_equal(expected, Tariff.group(:start_date).count)
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_count_distinct
|
19
19
|
product = products(:first_product)
|
20
|
-
assert_equal(1, product.product_tariffs.select('tariff_start_date').count
|
20
|
+
assert_equal(1, product.product_tariffs.select('tariff_start_date').distinct.count)
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_count_not_distinct
|
24
24
|
product = products(:first_product)
|
25
|
-
assert_equal(2, product.product_tariffs.select('tariff_start_date').count
|
25
|
+
assert_equal(2, product.product_tariffs.select('tariff_start_date').count)
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_count_includes
|
29
|
-
count = Dorm.
|
30
|
-
:conditions => ["rooms.room_id = ?", 2])
|
29
|
+
count = Dorm.where("rooms.room_id = ?", 2).includes(:rooms).references(:rooms).count
|
31
30
|
assert_equal(1, count)
|
32
31
|
end
|
33
32
|
|
@@ -35,4 +34,4 @@ class TestCalculations < ActiveSupport::TestCase
|
|
35
34
|
count = Tariff.includes(:product_tariffs).references(:product_tariffs).where("product_tariffs.tariff_id = ?", 2).count
|
36
35
|
assert_equal(1, count)
|
37
36
|
end
|
38
|
-
end
|
37
|
+
end
|