@@ -6,9 +6,9 @@ import { module, test } from 'qunit';
6
6
7
7
import DS from 'ember-data' ;
8
8
9
- let env , store , User , Job , ReflexiveModel ;
9
+ let env , store , User , Manager , Job , Company , ReflexiveModel ;
10
10
11
- const { attr, belongsTo } = DS ;
11
+ const { attr, belongsTo, hasMany } = DS ;
12
12
13
13
function stringify ( string ) {
14
14
return function ( ) { return string ; } ;
@@ -19,18 +19,27 @@ module('integration/inverse_test - inverseFor', {
19
19
User = DS . Model . extend ( {
20
20
name : attr ( 'string' ) ,
21
21
bestFriend : belongsTo ( 'user' , { async : true , inverse : null } ) ,
22
- job : belongsTo ( 'job' , { async : false } )
22
+ job : belongsTo ( 'job' , { async : false } ) ,
23
+ employer : belongsTo ( 'company' , { inverse :"employees" } )
23
24
} ) ;
24
25
25
26
User . toString = stringify ( 'user' ) ;
26
27
28
+ Manager = User . extend ( { } ) ;
29
+ Manager . toString = stringify ( 'manager' ) ;
30
+
27
31
Job = DS . Model . extend ( {
28
32
isGood : attr ( ) ,
29
33
user : belongsTo ( 'user' , { async : false } )
30
34
} ) ;
31
35
32
36
Job . toString = stringify ( 'job' ) ;
33
37
38
+ Company = DS . Model . extend ( {
39
+ employees : hasMany ( 'user' , { inverse : "employer" , polymorphic : true } )
40
+ } ) ;
41
+ Company . toString = stringify ( 'company' ) ;
42
+
34
43
ReflexiveModel = DS . Model . extend ( {
35
44
reflexiveProp : belongsTo ( 'reflexive-model' , { async : false } )
36
45
} ) ;
@@ -39,7 +48,9 @@ module('integration/inverse_test - inverseFor', {
39
48
40
49
env = setupStore ( {
41
50
user : User ,
51
+ manager : Manager ,
42
52
job : Job ,
53
+ company : Company ,
43
54
reflexiveModel : ReflexiveModel
44
55
} ) ;
45
56
@@ -124,6 +135,74 @@ test("Caches findInverseFor return value", function(assert) {
124
135
assert . equal ( inverseForUser , Job . inverseFor ( 'user' , store ) , 'Inverse cached succesfully' ) ;
125
136
} ) ;
126
137
138
+ test ( "polymorphic hasMany inverse is populated after push of base model" , function ( assert ) {
139
+ const done = assert . async ( ) ;
140
+
141
+ run ( ( ) => {
142
+ store . push ( {
143
+ data : {
144
+ id : 'c1' ,
145
+ type : 'company' ,
146
+ relationships : {
147
+ employees : {
148
+ data : [
149
+ { id : 'u1' , type : 'user' }
150
+ ]
151
+ }
152
+ }
153
+ } ,
154
+ included : [
155
+ {
156
+ id : 'u1' ,
157
+ type : 'user' ,
158
+ relationships : { }
159
+ }
160
+ ]
161
+ } ) ;
162
+ } ) ;
163
+
164
+ const user = store . peekRecord ( 'user' , 'u1' ) ;
165
+
166
+ user . get ( 'employer' ) . then ( employer => {
167
+ assert . ok ( employer ) ;
168
+ done ( ) ;
169
+ } ) ;
170
+ } ) ;
171
+
172
+ test ( "polymorphic hasMany inverse is populated after push of descendant model" , function ( assert ) {
173
+ const done = assert . async ( ) ;
174
+
175
+ run ( ( ) => {
176
+ store . push ( {
177
+ data : {
178
+ id : 'c1' ,
179
+ type : 'company' ,
180
+ relationships : {
181
+ employees : {
182
+ data : [
183
+ { id : 'u1' , type : 'manager' }
184
+ ]
185
+ }
186
+ }
187
+ } ,
188
+ included : [
189
+ {
190
+ id : 'u1' ,
191
+ type : 'manager' ,
192
+ relationships : { }
193
+ }
194
+ ]
195
+ } ) ;
196
+ } ) ;
197
+
198
+ const user = store . peekRecord ( 'manager' , 'u1' ) ;
199
+
200
+ user . get ( 'employer' ) . then ( employer => {
201
+ assert . ok ( employer ) ;
202
+ done ( ) ;
203
+ } ) ;
204
+ } ) ;
205
+
127
206
testInDebug ( "Errors out if you do not define an inverse for a reflexive relationship" , function ( assert ) {
128
207
129
208
//Maybe store is evaluated lazily, so we need this :(
0 commit comments