composite_primary_keys 12.0.2 → 12.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +880 -841
  3. data/README.rdoc +180 -179
  4. data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -0
  5. data/lib/composite_primary_keys/arel/sqlserver.rb +1 -3
  6. data/lib/composite_primary_keys/associations/association_scope.rb +68 -68
  7. data/lib/composite_primary_keys/associations/join_dependency.rb +103 -103
  8. data/lib/composite_primary_keys/associations/through_association.rb +2 -1
  9. data/lib/composite_primary_keys/attribute_methods/primary_key.rb +13 -0
  10. data/lib/composite_primary_keys/attribute_methods/read.rb +30 -30
  11. data/lib/composite_primary_keys/attribute_methods/write.rb +35 -35
  12. data/lib/composite_primary_keys/attribute_methods.rb +9 -9
  13. data/lib/composite_primary_keys/base.rb +141 -130
  14. data/lib/composite_primary_keys/composite_arrays.rb +0 -8
  15. data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +37 -17
  16. data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +44 -23
  17. data/lib/composite_primary_keys/core.rb +48 -48
  18. data/lib/composite_primary_keys/persistence.rb +82 -81
  19. data/lib/composite_primary_keys/reflection.rb +29 -29
  20. data/lib/composite_primary_keys/relation/batches.rb +1 -1
  21. data/lib/composite_primary_keys/relation/calculations.rb +81 -81
  22. data/lib/composite_primary_keys/relation/finder_methods.rb +235 -235
  23. data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +20 -20
  24. data/lib/composite_primary_keys/relation/query_methods.rb +42 -42
  25. data/lib/composite_primary_keys/relation/where_clause.rb +23 -23
  26. data/lib/composite_primary_keys/relation.rb +193 -118
  27. data/lib/composite_primary_keys/version.rb +8 -8
  28. data/lib/composite_primary_keys.rb +117 -118
  29. data/test/abstract_unit.rb +114 -113
  30. data/test/connections/databases.ci.yml +22 -19
  31. data/test/fixtures/article.rb +4 -0
  32. data/test/fixtures/articles.yml +4 -3
  33. data/test/fixtures/comment.rb +1 -3
  34. data/test/fixtures/comments.yml +10 -9
  35. data/test/fixtures/db_definitions/db2-create-tables.sql +112 -126
  36. data/test/fixtures/db_definitions/db2-drop-tables.sql +17 -19
  37. data/test/fixtures/db_definitions/mysql.sql +180 -217
  38. data/test/fixtures/db_definitions/oracle.drop.sql +42 -48
  39. data/test/fixtures/db_definitions/oracle.sql +200 -236
  40. data/test/fixtures/db_definitions/postgresql.sql +183 -220
  41. data/test/fixtures/db_definitions/sqlite.sql +170 -206
  42. data/test/fixtures/db_definitions/sqlserver.sql +176 -212
  43. data/test/fixtures/department.rb +16 -11
  44. data/test/fixtures/departments.yml +15 -15
  45. data/test/fixtures/employees.yml +27 -27
  46. data/test/fixtures/readings.yml +2 -2
  47. data/test/fixtures/restaurants_suburbs.yml +11 -11
  48. data/test/fixtures/streets.yml +16 -16
  49. data/test/fixtures/suburbs.yml +14 -14
  50. data/test/fixtures/user.rb +11 -10
  51. data/test/test_associations.rb +358 -351
  52. data/test/test_attributes.rb +60 -60
  53. data/test/test_calculations.rb +42 -42
  54. data/test/test_create.rb +218 -183
  55. data/test/test_delete.rb +182 -179
  56. data/test/test_exists.rb +39 -39
  57. data/test/test_find.rb +164 -145
  58. data/test/test_habtm.rb +2 -2
  59. data/test/test_ids.rb +112 -116
  60. data/test/test_nested_attributes.rb +67 -124
  61. data/test/test_polymorphic.rb +29 -13
  62. data/test/test_preload.rb +4 -3
  63. data/test/test_serialize.rb +2 -2
  64. data/test/test_update.rb +96 -78
  65. metadata +4 -19
  66. data/test/fixtures/hack.rb +0 -5
  67. data/test/fixtures/hacks.yml +0 -3
  68. data/test/fixtures/pk_called_id.rb +0 -5
  69. data/test/fixtures/pk_called_ids.yml +0 -11
  70. data/test/fixtures/reference_code_using_composite_key_alias.rb +0 -8
  71. data/test/fixtures/reference_code_using_simple_key_alias.rb +0 -8
  72. data/test/fixtures/seat.rb +0 -5
  73. data/test/fixtures/seats.yml +0 -9
  74. data/test/fixtures/topic.rb +0 -6
  75. data/test/fixtures/topic_source.rb +0 -7
  76. data/test/test_aliases.rb +0 -18
  77. data/test/test_enum.rb +0 -21
  78. data/test/test_suite.rb +0 -35
data/test/test_find.rb CHANGED
@@ -1,145 +1,164 @@
1
- require File.expand_path('../abstract_unit', __FILE__)
2
-
3
- # Testing the find action on composite ActiveRecords with two primary keys
4
- class TestFind < ActiveSupport::TestCase
5
- fixtures :capitols, :departments, :reference_types, :reference_codes,
6
- :suburbs, :employees
7
-
8
- def test_find_first
9
- ref_code = ReferenceCode.order('reference_type_id, reference_code').first
10
- assert_kind_of(ReferenceCode, ref_code)
11
- assert_equal([1,1], ref_code.id)
12
- end
13
-
14
- def test_find_last
15
- ref_code = ReferenceCode.order('reference_type_id, reference_code').last
16
- assert_kind_of(ReferenceCode, ref_code)
17
- assert_equal([2,2], ref_code.id)
18
- end
19
-
20
- def test_find_one
21
- ref_code = ReferenceCode.find([1,3])
22
- assert_not_nil(ref_code)
23
- assert_equal([1,3], ref_code.id)
24
- end
25
-
26
- def test_find_some
27
- ref_codes = ReferenceCode.find([1,3], [2,1])
28
- assert_kind_of(Array, ref_codes)
29
- assert_equal(2, ref_codes.length)
30
-
31
- ref_code = ref_codes[0]
32
- assert_equal([1,3], ref_code.id)
33
-
34
- ref_code = ref_codes[1]
35
- assert_equal([2,1], ref_code.id)
36
- end
37
-
38
- def test_find_with_strings_as_composite_keys
39
- capitol = Capitol.find(['The Netherlands', 'Amsterdam'])
40
- assert_kind_of(Capitol, capitol)
41
- assert_equal(['The Netherlands', 'Amsterdam'], capitol.id)
42
- end
43
-
44
- def test_find_with_strings_with_comma_as_composite_keys
45
- capitol = Capitol.create!(country: 'The USA', city: 'Washington, D.C.')
46
- assert_equal ['The USA', 'Washington, D.C.'], capitol.id
47
-
48
- assert_equal capitol, Capitol.find(['The USA', 'Washington, D.C.'])
49
- assert_equal capitol, Capitol.find(capitol.to_param)
50
- end
51
-
52
- def test_find_each
53
- room_assignments = []
54
- RoomAssignment.find_each(:batch_size => 2) do |assignment|
55
- room_assignments << assignment
56
- end
57
-
58
- assert_equal(RoomAssignment.count, room_assignments.uniq.length)
59
- end
60
-
61
- def test_find_each_with_scope
62
- scoped_departments = Department.where("department_id <> 3")
63
- scoped_departments.find_each(:batch_size => 2) do |department|
64
- assert department.id != 3
65
- end
66
- end
67
-
68
- def test_not_found
69
- error = assert_raise(::ActiveRecord::RecordNotFound) do
70
- ReferenceCode.find(['999', '999'])
71
- end
72
-
73
- expected = "Couldn't find all ReferenceCodes with 'reference_type_id,reference_code': (999, 999) (found 0 results, but was looking for 1)."
74
- assert_equal(with_quoted_identifiers(expected), error.message)
75
- end
76
-
77
- def test_find_last_suburb
78
- suburb = Suburb.last
79
- assert_equal([2,1], suburb.id)
80
- end
81
-
82
- def test_find_last_suburb_with_order
83
- # Rails actually changes city_id DESC to city_id ASC
84
- suburb = Suburb.order('suburbs.city_id DESC').last
85
- assert_equal([1,1], suburb.id)
86
- end
87
-
88
- def test_find_in_batches
89
- Department.find_in_batches do |batch|
90
- assert_equal(Department.count, batch.size)
91
- end
92
- end
93
-
94
- def test_in_batches_of_1
95
- num_found = 0
96
- Department.in_batches(of: 1) do |batch|
97
- batch.each do |dept|
98
- num_found += 1
99
- end
100
- end
101
- assert_equal(Department.count, num_found)
102
- end
103
-
104
- def test_find_by_one_association
105
- department = departments(:engineering)
106
- employees = Employee.where(:department => department)
107
- assert_equal(2, employees.to_a.count)
108
- end
109
-
110
- def test_find_by_all_associations
111
- departments = Department.all
112
- employees = Employee.where(:department => departments)
113
- assert_equal(5, employees.to_a.count)
114
- end
115
-
116
- def test_expand_all
117
- departments = Department.all
118
- employees = Employee.where(:department => departments)
119
- assert_equal(5, employees.count)
120
- end
121
-
122
- def test_find_one_with_params_id
123
- params_id = ReferenceCode.find([1,3]).to_param
124
- assert_equal params_id, "1,3"
125
-
126
- ref_code = ReferenceCode.find(params_id)
127
- assert_not_nil(ref_code)
128
- assert_equal([1,3], ref_code.id)
129
- end
130
-
131
- def test_find_some_with_array_of_params_id
132
- params_ids = ReferenceCode.find([1,3], [2,1]).map(&:to_param)
133
- assert_equal ["1,3", "2,1"], params_ids
134
-
135
- ref_codes = ReferenceCode.find(params_ids)
136
- assert_kind_of(Array, ref_codes)
137
- assert_equal(2, ref_codes.length)
138
-
139
- ref_code = ref_codes[0]
140
- assert_equal([1,3], ref_code.id)
141
-
142
- ref_code = ref_codes[1]
143
- assert_equal([2,1], ref_code.id)
144
- end
145
- end
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ # Testing the find action on composite ActiveRecords with two primary keys
4
+ class TestFind < ActiveSupport::TestCase
5
+ fixtures :capitols, :departments, :reference_types, :reference_codes,
6
+ :suburbs, :employees
7
+
8
+ def test_find_first
9
+ ref_code = ReferenceCode.order('reference_type_id, reference_code').first
10
+ assert_kind_of(ReferenceCode, ref_code)
11
+ assert_equal([1,1], ref_code.id)
12
+ end
13
+
14
+ def test_find_last
15
+ ref_code = ReferenceCode.order('reference_type_id, reference_code').last
16
+ assert_kind_of(ReferenceCode, ref_code)
17
+ assert_equal([2,2], ref_code.id)
18
+ end
19
+
20
+ def test_find_one
21
+ ref_code = ReferenceCode.find([1,3])
22
+ assert_not_nil(ref_code)
23
+ assert_equal([1,3], ref_code.id)
24
+ end
25
+
26
+ def test_find_some
27
+ ref_codes = ReferenceCode.find([1,3], [2,1])
28
+ assert_kind_of(Array, ref_codes)
29
+ assert_equal(2, ref_codes.length)
30
+
31
+ ref_code = ref_codes[0]
32
+ assert_equal([1,3], ref_code.id)
33
+
34
+ ref_code = ref_codes[1]
35
+ assert_equal([2,1], ref_code.id)
36
+ end
37
+
38
+ def test_find_with_strings_as_composite_keys
39
+ capitol = Capitol.find(['The Netherlands', 'Amsterdam'])
40
+ assert_kind_of(Capitol, capitol)
41
+ assert_equal(['The Netherlands', 'Amsterdam'], capitol.id)
42
+ end
43
+
44
+ def test_find_with_strings_with_comma_as_composite_keys
45
+ capitol = Capitol.create!(country: 'The USA', city: 'Washington, D.C.')
46
+ assert_equal ['The USA', 'Washington, D.C.'], capitol.id
47
+
48
+ assert_equal capitol, Capitol.find(['The USA', 'Washington, D.C.'])
49
+ assert_equal capitol, Capitol.find(capitol.to_param)
50
+ end
51
+
52
+ def test_find_each
53
+ room_assignments = []
54
+ RoomAssignment.find_each(:batch_size => 2) do |assignment|
55
+ room_assignments << assignment
56
+ end
57
+
58
+ assert_equal(RoomAssignment.count, room_assignments.uniq.length)
59
+ end
60
+
61
+ def test_find_each_with_scope
62
+ scoped_departments = Department.where("id <> 3")
63
+ scoped_departments.find_each(:batch_size => 2) do |department|
64
+ assert department.id != 3
65
+ end
66
+ end
67
+
68
+ def test_not_found
69
+ error = assert_raise(::ActiveRecord::RecordNotFound) do
70
+ ReferenceCode.find(['999', '999'])
71
+ end
72
+
73
+ expected = "Couldn't find all ReferenceCodes with 'reference_type_id,reference_code': (999, 999) (found 0 results, but was looking for 1)."
74
+ assert_equal(with_quoted_identifiers(expected), error.message)
75
+ end
76
+
77
+ def test_find_with_invalid_ids
78
+ assert_raise(::ActiveRecord::RecordNotFound) do
79
+ Suburb.find([-1, -1])
80
+ end
81
+ end
82
+
83
+ def test_find_with_no_ids
84
+ assert_raise(::ActiveRecord::RecordNotFound) do
85
+ Suburb.find
86
+ end
87
+ end
88
+
89
+ def test_find_last_suburb
90
+ suburb = Suburb.last
91
+ assert_equal([2,2], suburb.id)
92
+ end
93
+
94
+ def test_find_last_suburb_with_order
95
+ # Rails actually changes city_id DESC to city_id ASC
96
+ suburb = Suburb.order('suburbs.city_id DESC').last
97
+ assert_equal([1,1], suburb.id)
98
+ end
99
+
100
+ def test_find_in_batches
101
+ Department.find_in_batches do |batch|
102
+ assert_equal(Department.count, batch.size)
103
+ end
104
+ end
105
+
106
+ def test_in_batches_enumerator
107
+ enumerator = Department.in_batches
108
+ enumerator.each do |batch|
109
+ assert_equal(Department.count, batch.size)
110
+ end
111
+ end
112
+
113
+ def test_in_batches_of_1
114
+ num_found = 0
115
+ Department.in_batches(of: 1) do |batch|
116
+ batch.each do |dept|
117
+ num_found += 1
118
+ end
119
+ end
120
+ assert_equal(Department.count, num_found)
121
+ end
122
+
123
+ def test_find_by_one_association
124
+ department = departments(:engineering)
125
+ employees = Employee.where(:department => department)
126
+ assert_equal(2, employees.to_a.count)
127
+ end
128
+
129
+ def test_find_by_all_associations
130
+ departments = Department.all
131
+ employees = Employee.where(:department => departments)
132
+ assert_equal(5, employees.to_a.count)
133
+ end
134
+
135
+ def test_expand_all
136
+ departments = Department.all
137
+ employees = Employee.where(:department => departments)
138
+ assert_equal(5, employees.count)
139
+ end
140
+
141
+ def test_find_one_with_params_id
142
+ params_id = ReferenceCode.find([1,3]).to_param
143
+ assert_equal params_id, "1,3"
144
+
145
+ ref_code = ReferenceCode.find(params_id)
146
+ assert_not_nil(ref_code)
147
+ assert_equal([1,3], ref_code.id)
148
+ end
149
+
150
+ def test_find_some_with_array_of_params_id
151
+ params_ids = ReferenceCode.find([1,3], [2,1]).map(&:to_param)
152
+ assert_equal ["1,3", "2,1"], params_ids
153
+
154
+ ref_codes = ReferenceCode.find(params_ids)
155
+ assert_kind_of(Array, ref_codes)
156
+ assert_equal(2, ref_codes.length)
157
+
158
+ ref_code = ref_codes[0]
159
+ assert_equal([1,3], ref_code.id)
160
+
161
+ ref_code = ref_codes[1]
162
+ assert_equal([2,1], ref_code.id)
163
+ end
164
+ end
data/test/test_habtm.rb CHANGED
@@ -133,9 +133,9 @@ class TestHabtm < ActiveSupport::TestCase
133
133
 
134
134
  # reload to force reload of associations
135
135
  product_one = Product.find(1)
136
- assert_equal 2, product_one.restaurants.size
136
+ assert_equal(2, product_one.restaurants.size)
137
137
 
138
138
  product_three = Product.find(3)
139
- assert_equal 0, product_three.restaurants.size
139
+ assert_equal(0, product_three.restaurants.size)
140
140
  end
141
141
  end
data/test/test_ids.rb CHANGED
@@ -1,116 +1,112 @@
1
- require File.expand_path('../abstract_unit', __FILE__)
2
-
3
- class ChildCpkTest < ReferenceCode
4
- end
5
-
6
- class TestIds < ActiveSupport::TestCase
7
- fixtures :reference_types, :reference_codes, :pk_called_ids
8
-
9
- CLASSES = {
10
- :single => {
11
- :class => ReferenceType,
12
- :primary_keys => [:reference_type_id],
13
- },
14
- :dual => {
15
- :class => ReferenceCode,
16
- :primary_keys => [:reference_type_id, :reference_code],
17
- },
18
- :dual_strs => {
19
- :class => ReferenceCode,
20
- :primary_keys => ['reference_type_id', 'reference_code'],
21
- },
22
- :pk_called_id => {
23
- :class => PkCalledId,
24
- :primary_keys => ['id', 'reference_code'],
25
- },
26
- }
27
-
28
- def setup
29
- self.class.classes = CLASSES
30
- end
31
-
32
- def test_id
33
- testing_with do
34
- assert_equal @first.id, @first.ids if composite?
35
- assert_kind_of(CompositePrimaryKeys::CompositeKeys, @first.id) if composite?
36
- end
37
- end
38
-
39
- def test_to_param
40
- testing_with do
41
- assert_equal '1,1', @first.to_param if composite?
42
- end
43
-
44
- capitol = Capitol.create!(country: 'The USA', city: 'Washington, D.C.')
45
- assert_equal 'The USA,Washington^2C D.C.', capitol.to_param
46
- end
47
-
48
- def test_ids_to_s
49
- testing_with do
50
- order = @klass.primary_key.is_a?(String) ? @klass.primary_key : @klass.primary_key.join(',')
51
- to_test = @klass.order(order)[0..1].map(&:id)
52
- assert_equal '(1,1),(1,2)', @klass.ids_to_s(to_test) if @key_test == :dual
53
- assert_equal '1,1;1,2', @klass.ids_to_s(to_test, ',', ';', '', '') if @key_test == :dual
54
- end
55
- end
56
-
57
- def test_set_ids_string
58
- testing_with do
59
- array = @primary_keys.collect {|key| 5}
60
- expected = composite? ? array.to_composite_keys : array.first
61
- @first.id = expected.to_s
62
- assert_equal expected, @first.id
63
- end
64
- end
65
-
66
- def test_set_ids_array
67
- testing_with do
68
- array = @primary_keys.collect {|key| 5}
69
- expected = composite? ? array.to_composite_keys : array.first
70
- @first.id = expected
71
- assert_equal expected, @first.id
72
- end
73
- end
74
-
75
- def test_set_ids_comp
76
- testing_with do
77
- array = @primary_keys.collect {|key| 5}
78
- expected = composite? ? array.to_composite_keys : array.first
79
- @first.id = expected
80
- assert_equal expected, @first.id
81
- end
82
- end
83
-
84
- def test_primary_keys
85
- testing_with do
86
- if composite?
87
- assert_not_nil @klass.primary_keys
88
- assert_equal @primary_keys.map {|key| key.to_s}, @klass.primary_keys
89
- assert_equal @klass.primary_keys, @klass.primary_key
90
- assert_kind_of(CompositePrimaryKeys::CompositeKeys, @klass.primary_keys)
91
- assert_equal @primary_keys.map {|key| key.to_sym}.join(','), @klass.primary_key.to_s
92
- else
93
- assert_not_nil @klass.primary_key
94
- assert_equal @primary_keys.first, @klass.primary_key.to_sym
95
- assert_equal @primary_keys.first.to_s, @klass.primary_key.to_s
96
- end
97
- end
98
- end
99
-
100
- def test_inherited_primary_keys
101
- assert_equal(["reference_type_id", "reference_code"], ChildCpkTest.primary_keys)
102
- end
103
-
104
- def test_inherited_ids
105
- cpk_test = ChildCpkTest.new
106
- assert_equal([nil, nil], cpk_test.id)
107
- end
108
-
109
- def test_assign_ids
110
- ref_code = ReferenceCode.new
111
- assert_equal([nil, nil], ref_code.id)
112
-
113
- ref_code.id = [2,1]
114
- assert_equal([2,1], ref_code.id)
115
- end
116
- end
1
+ require File.expand_path('../abstract_unit', __FILE__)
2
+
3
+ class ChildCpkTest < ReferenceCode
4
+ end
5
+
6
+ class TestIds < ActiveSupport::TestCase
7
+ fixtures :reference_types, :reference_codes
8
+
9
+ CLASSES = {
10
+ :single => {
11
+ :class => ReferenceType,
12
+ :primary_keys => [:reference_type_id],
13
+ },
14
+ :dual => {
15
+ :class => ReferenceCode,
16
+ :primary_keys => [:reference_type_id, :reference_code],
17
+ },
18
+ :dual_strs => {
19
+ :class => ReferenceCode,
20
+ :primary_keys => ['reference_type_id', 'reference_code'],
21
+ }
22
+ }
23
+
24
+ def setup
25
+ self.class.classes = CLASSES
26
+ end
27
+
28
+ def test_id
29
+ testing_with do
30
+ assert_equal @first.id, @first.ids if composite?
31
+ assert_kind_of(CompositePrimaryKeys::CompositeKeys, @first.id) if composite?
32
+ end
33
+ end
34
+
35
+ def test_to_param
36
+ testing_with do
37
+ assert_equal '1,1', @first.to_param if composite?
38
+ end
39
+
40
+ capitol = Capitol.create!(country: 'The USA', city: 'Washington, D.C.')
41
+ assert_equal 'The USA,Washington^2C D.C.', capitol.to_param
42
+ end
43
+
44
+ def test_ids_to_s
45
+ testing_with do
46
+ order = @klass.primary_key.is_a?(String) ? @klass.primary_key : @klass.primary_key.join(',')
47
+ to_test = @klass.order(order)[0..1].map(&:id)
48
+ assert_equal '(1,1),(1,2)', @klass.ids_to_s(to_test) if @key_test == :dual
49
+ assert_equal '1,1;1,2', @klass.ids_to_s(to_test, ',', ';', '', '') if @key_test == :dual
50
+ end
51
+ end
52
+
53
+ def test_set_ids_string
54
+ testing_with do
55
+ array = @primary_keys.collect {|key| 5}
56
+ expected = composite? ? array.to_composite_keys : array.first
57
+ @first.id = expected.to_s
58
+ assert_equal expected, @first.id
59
+ end
60
+ end
61
+
62
+ def test_set_ids_array
63
+ testing_with do
64
+ array = @primary_keys.collect {|key| 5}
65
+ expected = composite? ? array.to_composite_keys : array.first
66
+ @first.id = expected
67
+ assert_equal expected, @first.id
68
+ end
69
+ end
70
+
71
+ def test_set_ids_comp
72
+ testing_with do
73
+ array = @primary_keys.collect {|key| 5}
74
+ expected = composite? ? array.to_composite_keys : array.first
75
+ @first.id = expected
76
+ assert_equal expected, @first.id
77
+ end
78
+ end
79
+
80
+ def test_primary_keys
81
+ testing_with do
82
+ if composite?
83
+ assert_not_nil @klass.primary_keys
84
+ assert_equal @primary_keys.map {|key| key.to_s}, @klass.primary_keys
85
+ assert_equal @klass.primary_keys, @klass.primary_key
86
+ assert_kind_of(CompositePrimaryKeys::CompositeKeys, @klass.primary_keys)
87
+ assert_equal @primary_keys.map {|key| key.to_sym}.join(','), @klass.primary_key.to_s
88
+ else
89
+ assert_not_nil @klass.primary_key
90
+ assert_equal @primary_keys.first, @klass.primary_key.to_sym
91
+ assert_equal @primary_keys.first.to_s, @klass.primary_key.to_s
92
+ end
93
+ end
94
+ end
95
+
96
+ def test_inherited_primary_keys
97
+ assert_equal(["reference_type_id", "reference_code"], ChildCpkTest.primary_keys)
98
+ end
99
+
100
+ def test_inherited_ids
101
+ cpk_test = ChildCpkTest.new
102
+ assert_equal([nil, nil], cpk_test.id)
103
+ end
104
+
105
+ def test_assign_ids
106
+ ref_code = ReferenceCode.new
107
+ assert_equal([nil, nil], ref_code.id)
108
+
109
+ ref_code.id = [2,1]
110
+ assert_equal([2,1], ref_code.id)
111
+ end
112
+ end