@@ -15,11 +15,13 @@ function stringify(string) {
15
15
module ( 'integration/inverse_test - inverseFor' , function ( hooks ) {
16
16
setupTest ( hooks ) ;
17
17
let store ;
18
- let user ;
19
- let job ;
20
18
21
19
hooks . beforeEach ( function ( ) {
22
20
let { owner } = this ;
21
+ store = owner . lookup ( 'service:store' ) ;
22
+ } ) ;
23
+
24
+ test ( 'Finds the inverse when there is only one possible available' , function ( assert ) {
23
25
class User extends Model {
24
26
@attr ( )
25
27
name ;
@@ -47,25 +49,12 @@ module('integration/inverse_test - inverseFor', function(hooks) {
47
49
}
48
50
}
49
51
50
- class ReflexiveModel extends Model {
51
- @belongsTo ( 'reflexive-model' , { async : false } )
52
- reflexiveProp ;
53
-
54
- toString ( ) {
55
- return stringify ( 'reflexiveModel' ) ;
56
- }
57
- }
52
+ let { owner } = this ;
58
53
owner . register ( 'model:user' , User ) ;
59
54
owner . register ( 'model:job' , Job ) ;
60
- owner . register ( 'model:reflexive-model' , ReflexiveModel ) ;
61
55
62
- store = owner . lookup ( 'service:store' ) ;
63
-
64
- job = store . modelFor ( 'job' ) ;
65
- user = store . modelFor ( 'user' ) ;
66
- } ) ;
67
-
68
- test ( 'Finds the inverse when there is only one possible available' , function ( assert ) {
56
+ let job = store . modelFor ( 'job' ) ;
57
+ let user = store . modelFor ( 'user' ) ;
69
58
let inverseDefinition = job . inverseFor ( 'user' , store ) ;
70
59
71
60
assert . deepEqual (
@@ -83,13 +72,45 @@ module('integration/inverse_test - inverseFor', function(hooks) {
83
72
} ) ;
84
73
85
74
test ( 'Finds the inverse when only one side has defined it manually' , function ( assert ) {
86
- job . reopen ( {
87
- owner : belongsTo ( 'user' , { inverse : 'previousJob' , async : false } ) ,
88
- } ) ;
75
+ class User extends Model {
76
+ @attr ( )
77
+ name ;
78
+
79
+ @belongsTo ( 'user' , { async : true , inverse : null } )
80
+ bestFriend ;
89
81
90
- user . reopen ( {
91
- previousJob : belongsTo ( 'job' , { async : false } ) ,
92
- } ) ;
82
+ @belongsTo ( 'job' , { async : false } )
83
+ job ;
84
+
85
+ @belongsTo ( 'job' , { async : false } )
86
+ previousJob ;
87
+
88
+ toString ( ) {
89
+ return stringify ( 'user' ) ;
90
+ }
91
+ }
92
+
93
+ class Job extends Model {
94
+ @attr ( )
95
+ isGood ;
96
+
97
+ @belongsTo ( 'user' , { async : false } )
98
+ user ;
99
+
100
+ @belongsTo ( 'user' , { inverse : 'previousJob' , async : false } )
101
+ owner ;
102
+
103
+ toString ( ) {
104
+ return stringify ( 'job' ) ;
105
+ }
106
+ }
107
+
108
+ let { owner } = this ;
109
+ owner . register ( 'model:user' , User ) ;
110
+ owner . register ( 'model:job' , Job ) ;
111
+
112
+ let job = store . modelFor ( 'job' ) ;
113
+ let user = store . modelFor ( 'user' ) ;
93
114
94
115
assert . deepEqual (
95
116
job . inverseFor ( 'owner' , store ) ,
@@ -120,34 +141,114 @@ module('integration/inverse_test - inverseFor', function(hooks) {
120
141
} ) ;
121
142
122
143
test ( 'Returns null if inverse relationship it is manually set with a different relationship key' , function ( assert ) {
123
- job . reopen ( {
124
- user : belongsTo ( 'user' , { inverse : 'previousJob' , async : false } ) ,
125
- } ) ;
144
+ class User extends Model {
145
+ @attr ( )
146
+ name ;
147
+
148
+ @belongsTo ( 'user' , { async : true , inverse : null } )
149
+ bestFriend ;
150
+
151
+ @belongsTo ( 'job' , { async : false } )
152
+ job ;
153
+
154
+ toString ( ) {
155
+ return stringify ( 'user' ) ;
156
+ }
157
+ }
158
+
159
+ class Job extends Model {
160
+ @attr ( )
161
+ isGood ;
162
+
163
+ @belongsTo ( 'user' , { inverse : 'previousJob' , async : false } )
164
+ user ;
165
+
166
+ toString ( ) {
167
+ return stringify ( 'job' ) ;
168
+ }
169
+ }
126
170
127
- user . reopen ( {
128
- job : belongsTo ( 'job ', { async : false } ) ,
129
- } ) ;
171
+ let { owner } = this ;
172
+ owner . register ( 'model:user ', User ) ;
173
+ owner . register ( 'model:job' , Job ) ;
130
174
175
+ let user = store . modelFor ( 'user' ) ;
131
176
assert . equal ( user . inverseFor ( 'job' , store ) , null , 'There is no inverse' ) ;
132
177
} ) ;
133
178
134
179
testInDebug ( 'Errors out if you define 2 inverses to the same model' , function ( assert ) {
135
- job . reopen ( {
136
- user : belongsTo ( 'user' , { inverse : 'job' , async : false } ) ,
137
- owner : belongsTo ( 'user' , { inverse : 'job' , async : false } ) ,
138
- } ) ;
180
+ class User extends Model {
181
+ @attr ( )
182
+ name ;
183
+
184
+ @belongsTo ( 'user' , { async : true , inverse : null } )
185
+ bestFriend ;
186
+
187
+ @belongsTo ( 'job' , { async : false } )
188
+ job ;
189
+
190
+ toString ( ) {
191
+ return stringify ( 'user' ) ;
192
+ }
193
+ }
139
194
140
- user . reopen ( {
141
- job : belongsTo ( 'job' , { async : false } ) ,
142
- } ) ;
195
+ class Job extends Model {
196
+ @attr ( )
197
+ isGood ;
198
+
199
+ @belongsTo ( 'user' , { inverse : 'job' , async : false } )
200
+ user ;
143
201
202
+ @belongsTo ( 'user' , { inverse : 'job' , async : false } )
203
+ owner ;
204
+
205
+ toString ( ) {
206
+ return stringify ( 'job' ) ;
207
+ }
208
+ }
209
+ let { owner } = this ;
210
+ owner . register ( 'model:user' , User ) ;
211
+ owner . register ( 'model:job' , Job ) ;
212
+
213
+ let user = store . modelFor ( 'user' ) ;
144
214
assert . expectAssertion ( ( ) => {
145
215
user . inverseFor ( 'job' , store ) ;
146
216
} , / A s s e r t i o n F a i l e d : Y o u d e f i n e d t h e ' j o b ' r e l a t i o n s h i p o n m o d e l : u s e r , b u t y o u d e f i n e d t h e i n v e r s e r e l a t i o n s h i p s o f t y p e m o d e l : j o b m u l t i p l e t i m e s / i) ;
147
217
} ) ;
148
218
149
219
test ( 'Caches findInverseFor return value' , function ( assert ) {
150
220
assert . expect ( 1 ) ;
221
+ class User extends Model {
222
+ @attr ( )
223
+ name ;
224
+
225
+ @belongsTo ( 'user' , { async : true , inverse : null } )
226
+ bestFriend ;
227
+
228
+ @belongsTo ( 'job' , { async : false } )
229
+ job ;
230
+
231
+ toString ( ) {
232
+ return stringify ( 'user' ) ;
233
+ }
234
+ }
235
+
236
+ class Job extends Model {
237
+ @attr ( )
238
+ isGood ;
239
+
240
+ @belongsTo ( 'user' , { async : false } )
241
+ user ;
242
+
243
+ toString ( ) {
244
+ return stringify ( 'job' ) ;
245
+ }
246
+ }
247
+ let { owner } = this ;
248
+ owner . register ( 'model:user' , User ) ;
249
+ owner . register ( 'model:job' , Job ) ;
250
+
251
+ let job = store . modelFor ( 'job' ) ;
151
252
152
253
let inverseForUser = job . inverseFor ( 'user' , store ) ;
153
254
job . findInverseFor = function ( ) {
@@ -158,6 +259,18 @@ module('integration/inverse_test - inverseFor', function(hooks) {
158
259
} ) ;
159
260
160
261
testInDebug ( 'Errors out if you do not define an inverse for a reflexive relationship' , function ( assert ) {
262
+ class ReflexiveModel extends Model {
263
+ @belongsTo ( 'reflexive-model' , { async : false } )
264
+ reflexiveProp ;
265
+
266
+ toString ( ) {
267
+ return stringify ( 'reflexiveModel' ) ;
268
+ }
269
+ }
270
+
271
+ let { owner } = this ;
272
+ owner . register ( 'model:reflexive-model' , ReflexiveModel ) ;
273
+
161
274
//Maybe store is evaluated lazily, so we need this :(
162
275
assert . expectWarning ( ( ) => {
163
276
var reflexiveModel ;
0 commit comments