ember-data-factory-guy 0.8.7 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gruntfile.js +1 -1
- data/README.md +83 -68
- data/bower.json +1 -1
- data/dist/amd/factory-guy.js +75 -13
- data/dist/ember-data-factory-guy.js +75 -13
- data/dist/ember-data-factory-guy.min.js +1 -1
- data/ember-data-factory-guy.gemspec +1 -1
- data/package.json +1 -1
- data/src/factory_guy.js +38 -0
- data/src/factory_guy_test_mixin.js +25 -11
- data/src/model_definition.js +12 -2
- data/tests/active_model_adapter_factory_test.js +61 -52
- data/tests/factory_guy_test.js +52 -3
- data/tests/factory_guy_test_mixin_test.js +46 -11
- data/tests/rest_adapter_factory_test.js +58 -50
- data/tests/support/models/user.js +1 -0
- data/tests/support/test_helper.js +14 -0
- data/tests/test_setup.js +104 -103
- data/vendor/assets/javascripts/ember_data_factory_guy.js +78 -17
- metadata +7 -7
data/tests/factory_guy_test.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
var testHelper, store;
|
2
2
|
|
3
|
-
module('FactoryGuy', {
|
3
|
+
module('FactoryGuy with DS.RESTAdapter', {
|
4
4
|
setup: function() {
|
5
|
-
testHelper = TestHelper.setup(DS.
|
5
|
+
testHelper = TestHelper.setup(DS.RESTAdapter);
|
6
6
|
store = testHelper.getStore();
|
7
7
|
},
|
8
8
|
teardown: function() {
|
@@ -12,6 +12,10 @@ module('FactoryGuy', {
|
|
12
12
|
}
|
13
13
|
});
|
14
14
|
|
15
|
+
test("can set and get store", function() {
|
16
|
+
FactoryGuy.setStore(store);
|
17
|
+
equal(FactoryGuy.getStore(), store)
|
18
|
+
});
|
15
19
|
|
16
20
|
test("Using sequences in definitions", function() {
|
17
21
|
delete FactoryGuy.modelDefinitions['person']
|
@@ -191,6 +195,15 @@ test("#buildList creates list of fixtures", function() {
|
|
191
195
|
});
|
192
196
|
|
193
197
|
|
198
|
+
test("#isAttributeRelationship", function() {
|
199
|
+
FactoryGuy.setStore(store);
|
200
|
+
var typeName = 'user'
|
201
|
+
equal(FactoryGuy.isAttributeRelationship(typeName,'company'),true);
|
202
|
+
equal(FactoryGuy.isAttributeRelationship(typeName,'hats'),true);
|
203
|
+
equal(FactoryGuy.isAttributeRelationship(typeName,'name'),false);
|
204
|
+
});
|
205
|
+
|
206
|
+
|
194
207
|
test("#lookupDefinitionForFixtureName", function() {
|
195
208
|
equal(!!FactoryGuy.lookupDefinitionForFixtureName('person'), true, 'finds definition if its the same as model name');
|
196
209
|
equal(!!FactoryGuy.lookupDefinitionForFixtureName('funny_person'), true, 'finds definition if its a named fixture');
|
@@ -203,9 +216,45 @@ test("#lookupModelForFixtureName", function() {
|
|
203
216
|
equal(FactoryGuy.lookupModelForFixtureName('fake'), undefined, "return nothing if can't find definition");
|
204
217
|
});
|
205
218
|
|
219
|
+
|
220
|
+
test("#make returns a model instance", function() {
|
221
|
+
FactoryGuy.setStore(store);
|
222
|
+
var user = FactoryGuy.make('user');
|
223
|
+
ok(user instanceof User)
|
224
|
+
});
|
225
|
+
|
226
|
+
test("#make requires that the store is set on FactoryGuy", function(assert) {
|
227
|
+
assert.throws(FactoryGuy.make('user'))
|
228
|
+
});
|
229
|
+
|
230
|
+
|
231
|
+
module('FactoryGuy with DS.FixtureAdapter', {
|
232
|
+
setup: function() {
|
233
|
+
testHelper = TestHelper.setup(DS.FixtureAdapter);
|
234
|
+
store = testHelper.getStore();
|
235
|
+
},
|
236
|
+
teardown: function() {
|
237
|
+
Em.run(function() {
|
238
|
+
testHelper.teardown();
|
239
|
+
});
|
240
|
+
}
|
241
|
+
});
|
242
|
+
|
243
|
+
|
244
|
+
asyncTest("#make loads the fixture in the store and returns an object", function() {
|
245
|
+
FactoryGuy.setStore(store);
|
246
|
+
var user = FactoryGuy.make('user');
|
247
|
+
ok(user instanceof Object )
|
248
|
+
store.find('user', user.id).then(function(u){
|
249
|
+
ok(u instanceof User)
|
250
|
+
start()
|
251
|
+
})
|
252
|
+
});
|
253
|
+
|
254
|
+
|
206
255
|
asyncTest("#pushFixture", function() {
|
207
256
|
var User = store.modelFor('user'),
|
208
|
-
user =
|
257
|
+
user = FactoryGuy.make('user'),
|
209
258
|
duplicateUser = FactoryGuy.build('user', { id: user.id, name: 'monkey' }),
|
210
259
|
differentUser = FactoryGuy.build('user'),
|
211
260
|
usersById = {};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
var testHelper, store;
|
1
|
+
var testHelper, store, make;
|
2
2
|
|
3
3
|
module('FactoryGuyTestMixin with DS.RESTAdapter', {});
|
4
4
|
|
@@ -28,6 +28,7 @@ module('FactoryGuyTestMixin (using mockjax) with DS.RESTAdapter', {
|
|
28
28
|
setup: function () {
|
29
29
|
testHelper = TestHelper.setup(DS.RESTAdapter);
|
30
30
|
store = testHelper.getStore();
|
31
|
+
make = function() {return testHelper.make.apply(testHelper,arguments)}
|
31
32
|
},
|
32
33
|
teardown: function () {
|
33
34
|
testHelper.teardown();
|
@@ -102,6 +103,7 @@ module('FactoryGuyTestMixin (using mockjax) with DS.ActiveModelAdapter', {
|
|
102
103
|
setup: function () {
|
103
104
|
testHelper = TestHelper.setup(DS.ActiveModelAdapter);
|
104
105
|
store = testHelper.getStore();
|
106
|
+
make = function() {return testHelper.make.apply(testHelper,arguments)}
|
105
107
|
},
|
106
108
|
teardown: function () {
|
107
109
|
testHelper.teardown();
|
@@ -168,7 +170,7 @@ asyncTest("#handleCreate returns camelCase attributes", function() {
|
|
168
170
|
});
|
169
171
|
|
170
172
|
asyncTest("#handleCreate match belongsTo association", function() {
|
171
|
-
var company =
|
173
|
+
var company = make('company')
|
172
174
|
testHelper.handleCreate('profile', {match:{ company: company}})
|
173
175
|
|
174
176
|
store.createRecord('profile', {company: company}).save().then(function(profile) {
|
@@ -178,7 +180,7 @@ asyncTest("#handleCreate match belongsTo association", function() {
|
|
178
180
|
});
|
179
181
|
|
180
182
|
asyncTest("#handleCreate match belongsTo polymorphic association", function() {
|
181
|
-
var group =
|
183
|
+
var group = make('group')
|
182
184
|
testHelper.handleCreate('profile', {match:{ group: group}})
|
183
185
|
|
184
186
|
store.createRecord('profile', {group: group}).save().then(function(profile) {
|
@@ -191,8 +193,8 @@ asyncTest("#handleCreate match belongsTo polymorphic association", function() {
|
|
191
193
|
asyncTest("#handleCreate match attributes and return attributes", function() {
|
192
194
|
var date = new Date()
|
193
195
|
var customDescription = "special description"
|
194
|
-
var company =
|
195
|
-
var group =
|
196
|
+
var company = make('company')
|
197
|
+
var group = make('big_group')
|
196
198
|
|
197
199
|
testHelper.handleCreate('profile', {
|
198
200
|
match: {description: customDescription, company: company, group: group},
|
@@ -291,8 +293,15 @@ asyncTest("#handleFindMany with traits and fixture options", function () {
|
|
291
293
|
|
292
294
|
/////// handleUpdate //////////
|
293
295
|
|
294
|
-
|
295
|
-
|
296
|
+
test("#handleUpdate with incorrect parameters", function(assert) {
|
297
|
+
// assert.throws(function(){testHelper.handleUpdate()},"missing everything");
|
298
|
+
// assert.throws(function(){testHelper.handleUpdate('profile')},"missing id");
|
299
|
+
// assert.throws(function(){testHelper.handleUpdate('profile', false)},"missing id");
|
300
|
+
assert.throws(function(){testHelper.handleUpdate('profile', true)},"missing id");
|
301
|
+
});
|
302
|
+
|
303
|
+
asyncTest("#handleUpdate the with modelType and id", function() {
|
304
|
+
var profile = make('profile');
|
296
305
|
testHelper.handleUpdate('profile', profile.id);
|
297
306
|
|
298
307
|
profile.set('description','new desc');
|
@@ -302,10 +311,36 @@ asyncTest("#handleUpdate the basic", function() {
|
|
302
311
|
});
|
303
312
|
});
|
304
313
|
|
305
|
-
|
306
|
-
|
314
|
+
|
315
|
+
asyncTest("#handleUpdate the with model", function() {
|
316
|
+
var profile = make('profile');
|
317
|
+
testHelper.handleUpdate(profile, true, {e:1});
|
318
|
+
|
319
|
+
profile.set('description','new desc');
|
320
|
+
profile.save().then(function(profile) {
|
321
|
+
ok(profile.get('description') == 'new desc');
|
322
|
+
start();
|
323
|
+
});
|
324
|
+
});
|
325
|
+
|
326
|
+
asyncTest("#handleUpdate the with modelType and id that fails", function() {
|
327
|
+
var profile = make('profile');
|
307
328
|
testHelper.handleUpdate('profile', profile.id, false);
|
308
329
|
|
330
|
+
profile.set('description','new desc');
|
331
|
+
profile.save().then(
|
332
|
+
function() {},
|
333
|
+
function() {
|
334
|
+
ok(true)
|
335
|
+
start();
|
336
|
+
}
|
337
|
+
)
|
338
|
+
});
|
339
|
+
|
340
|
+
asyncTest("#handleUpdate with model that fails", function() {
|
341
|
+
var profile = make('profile');
|
342
|
+
testHelper.handleUpdate(profile, false);
|
343
|
+
|
309
344
|
profile.set('description','new desc');
|
310
345
|
profile.save().then(
|
311
346
|
function() {},
|
@@ -320,7 +355,7 @@ asyncTest("#handleUpdate failure", function() {
|
|
320
355
|
/////// handleDelete //////////
|
321
356
|
|
322
357
|
asyncTest("#handleDelete the basic", function() {
|
323
|
-
var profile =
|
358
|
+
var profile = make('profile');
|
324
359
|
testHelper.handleDelete('profile', profile.id);
|
325
360
|
|
326
361
|
profile.destroyRecord().then(function() {
|
@@ -330,7 +365,7 @@ asyncTest("#handleDelete the basic", function() {
|
|
330
365
|
});
|
331
366
|
|
332
367
|
asyncTest("#handleDelete failure case", function() {
|
333
|
-
var profile =
|
368
|
+
var profile = make('profile');
|
334
369
|
testHelper.handleDelete('profile', profile.id, false);
|
335
370
|
|
336
371
|
profile.destroyRecord().then(
|
@@ -1,9 +1,10 @@
|
|
1
|
-
var testHelper, store;
|
1
|
+
var testHelper, store, make;
|
2
2
|
|
3
3
|
module('FactoryGuy with DS.RESTAdapter', {
|
4
4
|
setup: function() {
|
5
5
|
testHelper = TestHelper.setup(DS.RESTAdapter);
|
6
6
|
store = testHelper.getStore();
|
7
|
+
make = function() {return testHelper.make.apply(testHelper,arguments)}
|
7
8
|
},
|
8
9
|
teardown: function() {
|
9
10
|
Em.run(function() { testHelper.teardown(); });
|
@@ -12,8 +13,8 @@ module('FactoryGuy with DS.RESTAdapter', {
|
|
12
13
|
|
13
14
|
|
14
15
|
test("#resetModels clears the store of models, and resets the model definition", function() {
|
15
|
-
var project =
|
16
|
-
var user =
|
16
|
+
var project = make('project');
|
17
|
+
var user = make('user', {projects: [project]});
|
17
18
|
|
18
19
|
for (model in FactoryGuy.modelDefinitions) {
|
19
20
|
var definition = FactoryGuy.modelDefinitions[model];
|
@@ -37,6 +38,7 @@ module('DS.Store#makeFixture with RestAdapter', {
|
|
37
38
|
setup: function() {
|
38
39
|
testHelper = TestHelper.setup(DS.RESTAdapter);
|
39
40
|
store = testHelper.getStore();
|
41
|
+
make = function() {return testHelper.make.apply(testHelper,arguments)}
|
40
42
|
},
|
41
43
|
teardown: function() {
|
42
44
|
Em.run(function() { testHelper.teardown(); });
|
@@ -45,7 +47,7 @@ module('DS.Store#makeFixture with RestAdapter', {
|
|
45
47
|
|
46
48
|
|
47
49
|
asyncTest("creates records in the store", function() {
|
48
|
-
var user =
|
50
|
+
var user = make('user');
|
49
51
|
ok(user instanceof User);
|
50
52
|
|
51
53
|
store.find('user', user.id).then(function(store_user) {
|
@@ -54,34 +56,40 @@ asyncTest("creates records in the store", function() {
|
|
54
56
|
});
|
55
57
|
});
|
56
58
|
|
59
|
+
test("handles custom attribute type attributes", function() {
|
60
|
+
var info = {first:1}
|
61
|
+
var user = make('user', {info: info});
|
62
|
+
ok(user.get('info') == info)
|
63
|
+
});
|
64
|
+
|
57
65
|
test("makeFixture with fixture options", function() {
|
58
|
-
var profile =
|
66
|
+
var profile = make('profile', {description: 'dude'});
|
59
67
|
ok(profile.get('description') == 'dude');
|
60
68
|
});
|
61
69
|
|
62
70
|
test("makeFixture with traits", function() {
|
63
|
-
var profile =
|
71
|
+
var profile = make('profile', 'goofy_description');
|
64
72
|
ok(profile.get('description') == 'goofy');
|
65
73
|
});
|
66
74
|
|
67
75
|
test("makeFixture with traits and fixture options ", function() {
|
68
|
-
var profile =
|
76
|
+
var profile = make('profile', 'goofy_description', {description: 'dude'});
|
69
77
|
ok(profile.get('description') == 'dude');
|
70
78
|
});
|
71
79
|
|
72
80
|
|
73
81
|
|
74
82
|
test("when hasMany associations assigned, belongTo parent is assigned", function() {
|
75
|
-
var project =
|
76
|
-
var user =
|
83
|
+
var project = make('project');
|
84
|
+
var user = make('user', {projects: [project]})
|
77
85
|
|
78
86
|
ok(project.get('user') == user);
|
79
87
|
});
|
80
88
|
|
81
89
|
|
82
90
|
asyncTest("when hasMany ( asnyc ) associations assigned, belongTo parent is assigned", function() {
|
83
|
-
var user =
|
84
|
-
var company =
|
91
|
+
var user = make('user');
|
92
|
+
var company = make('company', {users: [user]});
|
85
93
|
|
86
94
|
user.get('company').then(function(c){
|
87
95
|
ok(c == company);
|
@@ -91,9 +99,9 @@ asyncTest("when hasMany ( asnyc ) associations assigned, belongTo parent is assi
|
|
91
99
|
|
92
100
|
|
93
101
|
test("when hasMany ( polymorphic ) associations are assigned, belongTo parent is assigned", function() {
|
94
|
-
var bh =
|
95
|
-
var sh =
|
96
|
-
var user =
|
102
|
+
var bh = make('big_hat');
|
103
|
+
var sh = make('small_hat');
|
104
|
+
var user = make('user', {hats: [bh, sh]});
|
97
105
|
|
98
106
|
equal(user.get('hats.length'), 2);
|
99
107
|
ok(user.get('hats.firstObject') instanceof BigHat)
|
@@ -105,40 +113,40 @@ test("when hasMany ( polymorphic ) associations are assigned, belongTo parent is
|
|
105
113
|
|
106
114
|
|
107
115
|
test("when hasMany ( self referential ) associations are assigned, belongsTo parent is assigned", function() {
|
108
|
-
var big_group =
|
109
|
-
var group =
|
116
|
+
var big_group = make('big_group');
|
117
|
+
var group = make('group', {versions: [big_group]});
|
110
118
|
ok(big_group.get('group') == group)
|
111
119
|
});
|
112
120
|
|
113
121
|
|
114
122
|
test("when hasMany associations are assigned, belongsTo parent is assigned using inverse", function() {
|
115
|
-
var project =
|
116
|
-
var project2 =
|
123
|
+
var project = make('project');
|
124
|
+
var project2 = make('project', {children: [project]});
|
117
125
|
|
118
126
|
ok(project.get('parent') == project2);
|
119
127
|
});
|
120
128
|
|
121
129
|
|
122
130
|
test("when hasMany associations are assigned, belongsTo parent is assigned using actual belongsTo name", function() {
|
123
|
-
var silk =
|
124
|
-
var bh =
|
131
|
+
var silk = make('silk');
|
132
|
+
var bh = make('big_hat', {materials: [silk]});
|
125
133
|
|
126
134
|
ok(silk.get('hat') == bh)
|
127
135
|
});
|
128
136
|
|
129
137
|
|
130
138
|
test("when hasMany associations are assigned, belongsTo ( polymorphic ) parent is assigned", function() {
|
131
|
-
var fluff =
|
132
|
-
var big_hat =
|
139
|
+
var fluff = make('fluffy_material');
|
140
|
+
var big_hat = make('big_hat', {fluffy_materials: [fluff]});
|
133
141
|
|
134
142
|
ok(fluff.get('hat') == big_hat)
|
135
143
|
});
|
136
144
|
|
137
145
|
|
138
146
|
test("when belongTo parent is assigned, parent adds to hasMany records", function() {
|
139
|
-
var user =
|
140
|
-
var project1 =
|
141
|
-
var project2 =
|
147
|
+
var user = make('user');
|
148
|
+
var project1 = make('project', {user: user});
|
149
|
+
var project2 = make('project', {user: user});
|
142
150
|
|
143
151
|
equal(user.get('projects.length'), 2);
|
144
152
|
ok(user.get('projects.firstObject') == project1);
|
@@ -147,9 +155,9 @@ test("when belongTo parent is assigned, parent adds to hasMany records", functio
|
|
147
155
|
|
148
156
|
|
149
157
|
test("when belongTo parent is assigned, parent adds to polymorphic hasMany records", function() {
|
150
|
-
var user =
|
151
|
-
|
152
|
-
|
158
|
+
var user = make('user');
|
159
|
+
make('big_hat', {user: user});
|
160
|
+
make('small_hat', {user: user});
|
153
161
|
|
154
162
|
equal(user.get('hats.length'), 2);
|
155
163
|
ok(user.get('hats.firstObject') instanceof BigHat)
|
@@ -158,9 +166,9 @@ test("when belongTo parent is assigned, parent adds to polymorphic hasMany recor
|
|
158
166
|
|
159
167
|
|
160
168
|
asyncTest("when hasMany ( async ) relationship is assigned, model relationship is synced on both sides", function() {
|
161
|
-
var property =
|
162
|
-
var user1 =
|
163
|
-
var user2 =
|
169
|
+
var property = make('property');
|
170
|
+
var user1 = make('user', {properties: [property]});
|
171
|
+
var user2 = make('user', {properties: [property]});
|
164
172
|
|
165
173
|
equal(property.get('owners.length'), 2);
|
166
174
|
ok(property.get('owners.firstObject') == user1);
|
@@ -170,9 +178,9 @@ asyncTest("when hasMany ( async ) relationship is assigned, model relationship i
|
|
170
178
|
|
171
179
|
|
172
180
|
asyncTest("when belongsTo ( async ) parent is assigned, parent adds to hasMany records", function() {
|
173
|
-
var user1 =
|
174
|
-
var user2 =
|
175
|
-
var company =
|
181
|
+
var user1 = make('user');
|
182
|
+
var user2 = make('user');
|
183
|
+
var company = make('company', {users: [user1, user2]});
|
176
184
|
|
177
185
|
equal(company.get('users.length'), 2);
|
178
186
|
ok(company.get('users.firstObject') == user1);
|
@@ -182,8 +190,8 @@ asyncTest("when belongsTo ( async ) parent is assigned, parent adds to hasMany r
|
|
182
190
|
|
183
191
|
|
184
192
|
test("when belongTo parent is assigned, parent adds to hasMany record using inverse", function() {
|
185
|
-
var project =
|
186
|
-
var project2 =
|
193
|
+
var project = make('project');
|
194
|
+
var project2 = make('project', {parent: project});
|
187
195
|
|
188
196
|
equal(project.get('children.length'), 1);
|
189
197
|
ok(project.get('children.firstObject') == project2);
|
@@ -191,43 +199,43 @@ test("when belongTo parent is assigned, parent adds to hasMany record using inve
|
|
191
199
|
|
192
200
|
|
193
201
|
test("when belongTo parent is assigned, parent adds to hasMany record using actual hasMany name", function() {
|
194
|
-
var bh =
|
195
|
-
var silk =
|
202
|
+
var bh = make('big_hat');
|
203
|
+
var silk = make('silk', {hat: bh});
|
196
204
|
|
197
205
|
ok(bh.get('materials.firstObject') == silk)
|
198
206
|
});
|
199
207
|
|
200
208
|
|
201
209
|
test("when belongTo parent is assigned, parent adds to belongsTo record", function() {
|
202
|
-
var company =
|
203
|
-
var profile =
|
210
|
+
var company = make('company');
|
211
|
+
var profile = make('profile', {company: company});
|
204
212
|
ok(company.get('profile') == profile);
|
205
213
|
|
206
214
|
// but guard against a situation where a model can belong to itself
|
207
215
|
// and do not want to set the belongsTo on this case.
|
208
|
-
var hat1 =
|
209
|
-
var hat2 =
|
216
|
+
var hat1 = make('big_hat')
|
217
|
+
var hat2 = make('big_hat', {hat: hat1})
|
210
218
|
ok(hat1.get('hat') == null);
|
211
219
|
ok(hat2.get('hat') == hat1);
|
212
220
|
});
|
213
221
|
|
214
222
|
|
215
223
|
test("belongsTo associations defined as attributes in fixture", function() {
|
216
|
-
var project =
|
224
|
+
var project = make('project_with_user');
|
217
225
|
equal(project.get('user') instanceof User, true)
|
218
226
|
ok(project.get('user.name') == 'User1');
|
219
227
|
|
220
|
-
var project =
|
228
|
+
var project = make('project_with_dude');
|
221
229
|
ok(project.get('user.name') == 'Dude');
|
222
230
|
|
223
|
-
var project =
|
231
|
+
var project = make('project_with_admin');
|
224
232
|
ok(project.get('user.name') == 'Admin');
|
225
233
|
});
|
226
234
|
|
227
235
|
|
228
236
|
|
229
237
|
test("hasMany associations defined as attributes in fixture", function() {
|
230
|
-
var user =
|
238
|
+
var user = make('user_with_projects');
|
231
239
|
equal(user.get('projects.length'), 2)
|
232
240
|
ok(user.get('projects.firstObject.user') == user)
|
233
241
|
ok(user.get('projects.lastObject.user') == user)
|
@@ -235,24 +243,24 @@ test("hasMany associations defined as attributes in fixture", function() {
|
|
235
243
|
|
236
244
|
|
237
245
|
test("hasMany associations defined with traits", function() {
|
238
|
-
var user =
|
246
|
+
var user = make('user', 'with_projects');
|
239
247
|
equal(user.get('projects.length'), 2)
|
240
248
|
ok(user.get('projects.firstObject.user') == user)
|
241
249
|
ok(user.get('projects.lastObject.user') == user)
|
242
250
|
})
|
243
251
|
|
244
252
|
test("belongsTo associations defined with traits", function() {
|
245
|
-
var hat1 =
|
253
|
+
var hat1 = make('hat', 'with_user');
|
246
254
|
equal(hat1.get('user') instanceof User, true)
|
247
255
|
|
248
|
-
var hat2 =
|
256
|
+
var hat2 = make('hat', 'with_user', 'with_outfit');
|
249
257
|
equal(hat2.get('user') instanceof User, true)
|
250
258
|
equal(hat2.get('outfit') instanceof Outfit, true)
|
251
259
|
})
|
252
260
|
|
253
261
|
|
254
262
|
test("with (nested json fixture) belongsTo has a hasMany association which has a belongsTo", function() {
|
255
|
-
var project =
|
263
|
+
var project = make('project', 'with_user_having_hats_belonging_to_outfit');
|
256
264
|
var user = project.get('user');
|
257
265
|
var hats = user.get('hats');
|
258
266
|
var firstHat = hats.get('firstObject');
|