Skip to content

Commit d0a09fe

Browse files
committed
Add test to show bug emberjs#5267
1 parent 2d21853 commit d0a09fe

File tree

1 file changed

+82
-3
lines changed

1 file changed

+82
-3
lines changed

tests/integration/inverse-test.js

+82-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { module, test } from 'qunit';
66

77
import DS from 'ember-data';
88

9-
let env, store, User, Job, ReflexiveModel;
9+
let env, store, User, Manager, Job, Company, ReflexiveModel;
1010

11-
const { attr, belongsTo } = DS;
11+
const { attr, belongsTo, hasMany } = DS;
1212

1313
function stringify(string) {
1414
return function() { return string; };
@@ -19,18 +19,27 @@ module('integration/inverse_test - inverseFor', {
1919
User = DS.Model.extend({
2020
name: attr('string'),
2121
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"})
2324
});
2425

2526
User.toString = stringify('user');
2627

28+
Manager = User.extend({});
29+
Manager.toString = stringify('manager');
30+
2731
Job = DS.Model.extend({
2832
isGood: attr(),
2933
user: belongsTo('user', { async: false })
3034
});
3135

3236
Job.toString = stringify('job');
3337

38+
Company = DS.Model.extend({
39+
employees: hasMany('user', {inverse: "employer", polymorphic: true})
40+
});
41+
Company.toString = stringify('company');
42+
3443
ReflexiveModel = DS.Model.extend({
3544
reflexiveProp: belongsTo('reflexive-model', { async: false })
3645
});
@@ -39,7 +48,9 @@ module('integration/inverse_test - inverseFor', {
3948

4049
env = setupStore({
4150
user: User,
51+
manager: Manager,
4252
job: Job,
53+
company: Company,
4354
reflexiveModel: ReflexiveModel
4455
});
4556

@@ -124,6 +135,74 @@ test("Caches findInverseFor return value", function(assert) {
124135
assert.equal(inverseForUser, Job.inverseFor('user', store), 'Inverse cached succesfully');
125136
});
126137

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+
127206
testInDebug("Errors out if you do not define an inverse for a reflexive relationship", function(assert) {
128207

129208
//Maybe store is evaluated lazily, so we need this :(

0 commit comments

Comments
 (0)