@@ -137,6 +137,28 @@ def test_replace_association
137
137
assert !posts ( :welcome ) . reload . people ( true ) . include? ( people ( :michael ) )
138
138
end
139
139
140
+ def test_replace_order_is_preserved
141
+ posts ( :welcome ) . people . clear
142
+ posts ( :welcome ) . people = [ people ( :david ) , people ( :michael ) ]
143
+ assert_equal [ people ( :david ) . id , people ( :michael ) . id ] , posts ( :welcome ) . readers . all ( :order => 'id' ) . map ( &:person_id )
144
+
145
+ # Test the inverse order in case the first success was a coincidence
146
+ posts ( :welcome ) . people . clear
147
+ posts ( :welcome ) . people = [ people ( :michael ) , people ( :david ) ]
148
+ assert_equal [ people ( :michael ) . id , people ( :david ) . id ] , posts ( :welcome ) . readers . all ( :order => 'id' ) . map ( &:person_id )
149
+ end
150
+
151
+ def test_replace_by_id_order_is_preserved
152
+ posts ( :welcome ) . people . clear
153
+ posts ( :welcome ) . person_ids = [ people ( :david ) . id , people ( :michael ) . id ]
154
+ assert_equal [ people ( :david ) . id , people ( :michael ) . id ] , posts ( :welcome ) . readers . all ( :order => 'id' ) . map ( &:person_id )
155
+
156
+ # Test the inverse order in case the first success was a coincidence
157
+ posts ( :welcome ) . people . clear
158
+ posts ( :welcome ) . person_ids = [ people ( :michael ) . id , people ( :david ) . id ]
159
+ assert_equal [ people ( :michael ) . id , people ( :david ) . id ] , posts ( :welcome ) . readers . all ( :order => 'id' ) . map ( &:person_id )
160
+ end
161
+
140
162
def test_associate_with_create
141
163
assert_queries ( 1 ) { posts ( :thinking ) }
142
164
0 commit comments