1
- import { run } from '@ember/runloop' ;
2
- import setupStore from 'dummy/tests/helpers/store' ;
3
-
1
+ import { setupTest } from 'ember-qunit' ;
4
2
import testInDebug from 'dummy/tests/helpers/test-in-debug' ;
5
3
import { module , test } from 'qunit' ;
6
4
7
- import DS from 'ember-data' ;
8
-
9
- let env , store , User , Job , ReflexiveModel ;
10
-
11
- const { attr, belongsTo } = DS ;
5
+ import Model from '@ember-data/model' ;
6
+ import { attr , belongsTo } from '@ember-data/model' ;
12
7
13
8
function stringify ( string ) {
14
9
return function ( ) {
15
10
return string ;
16
11
} ;
17
12
}
18
13
14
+ // @pete_the_pete refer to https://github.com/emberjs/data/commit/e34cb5a37391ce2e5d25401ca189a9bd19a29340
19
15
module ( 'integration/inverse_test - inverseFor' , function ( hooks ) {
20
- hooks . beforeEach ( function ( ) {
21
- User = DS . Model . extend ( {
22
- name : attr ( 'string' ) ,
23
- bestFriend : belongsTo ( 'user' , { async : true , inverse : null } ) ,
24
- job : belongsTo ( 'job' , { async : false } ) ,
25
- } ) ;
26
-
27
- User . toString = stringify ( 'user' ) ;
28
-
29
- Job = DS . Model . extend ( {
30
- isGood : attr ( ) ,
31
- user : belongsTo ( 'user' , { async : false } ) ,
32
- } ) ;
33
-
34
- Job . toString = stringify ( 'job' ) ;
16
+ setupTest ( hooks ) ;
17
+ let store ;
18
+ let user ;
19
+ let job ;
35
20
36
- ReflexiveModel = DS . Model . extend ( {
37
- reflexiveProp : belongsTo ( 'reflexive-model' , { async : false } ) ,
38
- } ) ;
39
-
40
- ReflexiveModel . toString = stringify ( 'reflexiveModel' ) ;
41
-
42
- env = setupStore ( {
43
- user : User ,
44
- job : Job ,
45
- reflexiveModel : ReflexiveModel ,
46
- } ) ;
47
-
48
- store = env . store ;
49
-
50
- Job = store . modelFor ( 'job' ) ;
51
- User = store . modelFor ( 'user' ) ;
52
- ReflexiveModel = store . modelFor ( 'reflexive-model' ) ;
53
- } ) ;
54
-
55
- hooks . afterEach ( function ( ) {
56
- run ( env . container , 'destroy' ) ;
21
+ hooks . beforeEach ( function ( ) {
22
+ let { owner } = this ;
23
+ class User extends Model {
24
+ @attr ( )
25
+ name ;
26
+
27
+ @belongsTo ( 'user' , { async : true , inverse : null } )
28
+ bestFriend ;
29
+
30
+ @belongsTo ( 'job' , { async : false } )
31
+ job ;
32
+
33
+ toString ( ) {
34
+ return stringify ( 'user' ) ;
35
+ }
36
+ }
37
+
38
+ class Job extends Model {
39
+ @attr ( )
40
+ isGood ;
41
+
42
+ @belongsTo ( 'user' , { async : false } )
43
+ user ;
44
+
45
+ toString ( ) {
46
+ return stringify ( 'job' ) ;
47
+ }
48
+ }
49
+
50
+ class ReflexiveModel extends Model {
51
+ @belongsTo ( 'reflexive-model' , { async : false } )
52
+ reflexiveProp ;
53
+
54
+ toString ( ) {
55
+ return stringify ( 'reflexiveModel' ) ;
56
+ }
57
+ }
58
+ owner . register ( 'model:user' , User ) ;
59
+ owner . register ( 'model:job' , Job ) ;
60
+ owner . register ( 'model:reflexive-model' , ReflexiveModel ) ;
61
+
62
+ store = owner . lookup ( 'service:store' ) ;
63
+
64
+ job = store . modelFor ( 'job' ) ;
65
+ user = store . modelFor ( 'user' ) ;
57
66
} ) ;
58
67
59
68
test ( 'Finds the inverse when there is only one possible available' , function ( assert ) {
60
- let inverseDefinition = Job . inverseFor ( 'user' , store ) ;
69
+ let inverseDefinition = job . inverseFor ( 'user' , store ) ;
61
70
62
71
assert . deepEqual (
63
72
inverseDefinition ,
64
73
{
65
- type : User ,
74
+ type : user ,
66
75
name : 'job' ,
67
76
kind : 'belongsTo' ,
68
77
options : {
@@ -74,18 +83,18 @@ module('integration/inverse_test - inverseFor', function(hooks) {
74
83
} ) ;
75
84
76
85
test ( 'Finds the inverse when only one side has defined it manually' , function ( assert ) {
77
- Job . reopen ( {
86
+ job . reopen ( {
78
87
owner : belongsTo ( 'user' , { inverse : 'previousJob' , async : false } ) ,
79
88
} ) ;
80
89
81
- User . reopen ( {
90
+ user . reopen ( {
82
91
previousJob : belongsTo ( 'job' , { async : false } ) ,
83
92
} ) ;
84
93
85
94
assert . deepEqual (
86
- Job . inverseFor ( 'owner' , store ) ,
95
+ job . inverseFor ( 'owner' , store ) ,
87
96
{
88
- type : User , //the model's type
97
+ type : user , //the model's type
89
98
name : 'previousJob' , //the models relationship key
90
99
kind : 'belongsTo' ,
91
100
options : {
@@ -96,9 +105,9 @@ module('integration/inverse_test - inverseFor', function(hooks) {
96
105
) ;
97
106
98
107
assert . deepEqual (
99
- User . inverseFor ( 'previousJob' , store ) ,
108
+ user . inverseFor ( 'previousJob' , store ) ,
100
109
{
101
- type : Job , //the model's type
110
+ type : job , //the model's type
102
111
name : 'owner' , //the models relationship key
103
112
kind : 'belongsTo' ,
104
113
options : {
@@ -111,41 +120,41 @@ module('integration/inverse_test - inverseFor', function(hooks) {
111
120
} ) ;
112
121
113
122
test ( 'Returns null if inverse relationship it is manually set with a different relationship key' , function ( assert ) {
114
- Job . reopen ( {
123
+ job . reopen ( {
115
124
user : belongsTo ( 'user' , { inverse : 'previousJob' , async : false } ) ,
116
125
} ) ;
117
126
118
- User . reopen ( {
127
+ user . reopen ( {
119
128
job : belongsTo ( 'job' , { async : false } ) ,
120
129
} ) ;
121
130
122
- assert . equal ( User . inverseFor ( 'job' , store ) , null , 'There is no inverse' ) ;
131
+ assert . equal ( user . inverseFor ( 'job' , store ) , null , 'There is no inverse' ) ;
123
132
} ) ;
124
133
125
134
testInDebug ( 'Errors out if you define 2 inverses to the same model' , function ( assert ) {
126
- Job . reopen ( {
135
+ job . reopen ( {
127
136
user : belongsTo ( 'user' , { inverse : 'job' , async : false } ) ,
128
137
owner : belongsTo ( 'user' , { inverse : 'job' , async : false } ) ,
129
138
} ) ;
130
139
131
- User . reopen ( {
140
+ user . reopen ( {
132
141
job : belongsTo ( 'job' , { async : false } ) ,
133
142
} ) ;
134
143
135
144
assert . expectAssertion ( ( ) => {
136
- User . inverseFor ( 'job' , store ) ;
137
- } , / 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 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 j o b m u l t i p l e t i m e s / i) ;
145
+ user . inverseFor ( 'job' , store ) ;
146
+ } , / 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) ;
138
147
} ) ;
139
148
140
149
test ( 'Caches findInverseFor return value' , function ( assert ) {
141
150
assert . expect ( 1 ) ;
142
151
143
- var inverseForUser = Job . inverseFor ( 'user' , store ) ;
144
- Job . findInverseFor = function ( ) {
152
+ let inverseForUser = job . inverseFor ( 'user' , store ) ;
153
+ job . findInverseFor = function ( ) {
145
154
assert . ok ( false , 'Find is not called anymore' ) ;
146
155
} ;
147
156
148
- assert . equal ( inverseForUser , Job . inverseFor ( 'user' , store ) , 'Inverse cached succesfully' ) ;
157
+ assert . equal ( inverseForUser , job . inverseFor ( 'user' , store ) , 'Inverse cached succesfully' ) ;
149
158
} ) ;
150
159
151
160
testInDebug ( 'Errors out if you do not define an inverse for a reflexive relationship' , function (
@@ -154,16 +163,14 @@ module('integration/inverse_test - inverseFor', function(hooks) {
154
163
//Maybe store is evaluated lazily, so we need this :(
155
164
assert . expectWarning ( ( ) => {
156
165
var reflexiveModel ;
157
- run ( ( ) => {
158
- store . push ( {
159
- data : {
160
- type : 'reflexive-model' ,
161
- id : '1' ,
162
- } ,
163
- } ) ;
164
- reflexiveModel = store . peekRecord ( 'reflexive-model' , 1 ) ;
165
- reflexiveModel . get ( 'reflexiveProp' ) ;
166
+ store . push ( {
167
+ data : {
168
+ type : 'reflexive-model' ,
169
+ id : '1' ,
170
+ } ,
166
171
} ) ;
172
+ reflexiveModel = store . peekRecord ( 'reflexive-model' , 1 ) ;
173
+ reflexiveModel . get ( 'reflexiveProp' ) ;
167
174
} , / D e t e c t e d a r e f l e x i v e r e l a t i o n s h i p b y t h e n a m e o f ' r e f l e x i v e P r o p ' / ) ;
168
175
} ) ;
169
176
} ) ;
0 commit comments