composite_primary_keys 12.0.8 → 13.0.1
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.
- checksums.yaml +4 -4
- data/History.rdoc +888 -874
- data/README.rdoc +181 -180
- data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -19
- data/lib/composite_primary_keys/associations/association_scope.rb +66 -68
- data/lib/composite_primary_keys/associations/join_dependency.rb +137 -103
- data/lib/composite_primary_keys/attribute_methods/primary_key.rb +0 -2
- data/lib/composite_primary_keys/attribute_methods/read.rb +30 -30
- data/lib/composite_primary_keys/attribute_methods/write.rb +35 -35
- data/lib/composite_primary_keys/attribute_methods.rb +21 -9
- data/lib/composite_primary_keys/base.rb +141 -141
- data/lib/composite_primary_keys/composite_predicates.rb +2 -1
- data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +37 -22
- data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +44 -44
- data/lib/composite_primary_keys/core.rb +48 -48
- data/lib/composite_primary_keys/nested_attributes.rb +1 -1
- data/lib/composite_primary_keys/persistence.rb +82 -81
- data/lib/composite_primary_keys/reflection.rb +91 -29
- data/lib/composite_primary_keys/relation/batches.rb +15 -7
- data/lib/composite_primary_keys/relation/calculations.rb +104 -81
- data/lib/composite_primary_keys/relation/finder_methods.rb +235 -235
- data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +39 -20
- data/lib/composite_primary_keys/relation/query_methods.rb +42 -42
- data/lib/composite_primary_keys/relation/where_clause.rb +18 -23
- data/lib/composite_primary_keys/relation.rb +197 -193
- data/lib/composite_primary_keys/table_metadata.rb +11 -0
- data/lib/composite_primary_keys/version.rb +8 -8
- data/lib/composite_primary_keys.rb +119 -119
- data/test/abstract_unit.rb +114 -114
- data/test/connections/databases.ci.yml +22 -22
- data/test/fixtures/db_definitions/db2-create-tables.sql +112 -112
- data/test/fixtures/db_definitions/db2-drop-tables.sql +16 -16
- data/test/fixtures/db_definitions/mysql.sql +180 -180
- data/test/fixtures/db_definitions/oracle.drop.sql +41 -41
- data/test/fixtures/db_definitions/oracle.sql +199 -199
- data/test/fixtures/db_definitions/postgresql.sql +182 -182
- data/test/fixtures/db_definitions/sqlite.sql +169 -169
- data/test/fixtures/db_definitions/sqlserver.sql +176 -176
- data/test/fixtures/department.rb +16 -16
- data/test/fixtures/departments.yml +19 -15
- data/test/fixtures/employees.yml +33 -28
- data/test/fixtures/membership.rb +8 -6
- data/test/fixtures/restaurants_suburbs.yml +10 -10
- data/test/fixtures/streets.yml +16 -16
- data/test/fixtures/suburbs.yml +14 -14
- data/test/fixtures/user.rb +11 -11
- data/test/test_associations.rb +372 -358
- data/test/test_attributes.rb +75 -60
- data/test/test_calculations.rb +49 -42
- data/test/test_create.rb +218 -206
- data/test/test_delete.rb +188 -179
- data/test/test_exists.rb +39 -39
- data/test/test_find.rb +170 -164
- data/test/test_ids.rb +112 -112
- data/test/test_nested_attributes.rb +67 -67
- data/test/test_update.rb +102 -96
- metadata +6 -6
- data/lib/composite_primary_keys/connection_adapters/mysql/database_statements.rb +0 -24
data/test/test_find.rb
CHANGED
@@ -1,164 +1,170 @@
|
|
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(
|
133
|
-
end
|
134
|
-
|
135
|
-
def
|
136
|
-
departments = Department.
|
137
|
-
employees = Employee.where(:department => departments)
|
138
|
-
assert_equal(
|
139
|
-
end
|
140
|
-
|
141
|
-
def
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
assert_equal(
|
163
|
-
|
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("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(6, employees.to_a.count)
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_find_by_some_associations
|
136
|
+
departments = Department.where(location_id: 1)
|
137
|
+
employees = Employee.where(:department => departments)
|
138
|
+
assert_equal(4, employees.to_a.count)
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_expand_all
|
142
|
+
departments = Department.all
|
143
|
+
employees = Employee.where(:department => departments)
|
144
|
+
assert_equal(6, employees.count)
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_find_one_with_params_id
|
148
|
+
params_id = ReferenceCode.find([1,3]).to_param
|
149
|
+
assert_equal params_id, "1,3"
|
150
|
+
|
151
|
+
ref_code = ReferenceCode.find(params_id)
|
152
|
+
assert_not_nil(ref_code)
|
153
|
+
assert_equal([1,3], ref_code.id)
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_find_some_with_array_of_params_id
|
157
|
+
params_ids = ReferenceCode.find([1,3], [2,1]).map(&:to_param)
|
158
|
+
assert_equal ["1,3", "2,1"], params_ids
|
159
|
+
|
160
|
+
ref_codes = ReferenceCode.find(params_ids)
|
161
|
+
assert_kind_of(Array, ref_codes)
|
162
|
+
assert_equal(2, ref_codes.length)
|
163
|
+
|
164
|
+
ref_code = ref_codes[0]
|
165
|
+
assert_equal([1,3], ref_code.id)
|
166
|
+
|
167
|
+
ref_code = ref_codes[1]
|
168
|
+
assert_equal([2,1], ref_code.id)
|
169
|
+
end
|
170
|
+
end
|
data/test/test_ids.rb
CHANGED
@@ -1,112 +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
|
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
|
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
|