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