ember-data-factory-guy 0.7.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -9
- data/bower.json +1 -1
- data/dist/ember-data-factory-guy.js +65 -12
- data/dist/ember-data-factory-guy.min.js +1 -1
- data/dist/factory_guy_has_many.js +7 -7
- data/ember-data-factory-guy.gemspec +1 -1
- data/package.json +1 -1
- data/src/has_many.js +7 -7
- data/src/store.js +65 -12
- data/tests/active_model_adapter_factory_test.js +52 -37
- data/tests/factory_guy_test_mixin_test.js +9 -15
- data/tests/fixture_adapter_factory_test.js +11 -8
- data/tests/index.html +4 -3
- data/tests/rest_adapter_factory_test.js +63 -47
- data/tests/store_test.js +8 -11
- data/tests/support/factories/group_factory.js +29 -0
- data/tests/support/factories/material_factory.js +9 -0
- data/tests/support/factories/project_factory.js +11 -0
- data/tests/support/models/group.js +12 -0
- data/tests/support/models/hat.js +2 -1
- data/tests/support/models/material.js +5 -0
- data/tests/support/models/project.js +5 -0
- data/tests/support/test_helper.js +253 -23
- data/tests/test_setup.js +74 -1
- data/vendor/assets/javascripts/ember_data_factory_guy.js +65 -13
- data/vendor/assets/javascripts/factory_guy_has_many.js +7 -7
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89f70b883ece60eb9b0bdcfa6b2729d13461f6d5
|
4
|
+
data.tar.gz: 98cea7255238a18f36fd8c54cf08150ddd747001
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0622ff87bb05f9ebec1a5f4f6dbe6a8e1798c7a81558c36d52aa8a1ebd28a60fd81068338e34651e90aee074fd557130b56d1c3d035c8bbd32b4d2a02f4681c3
|
7
|
+
data.tar.gz: a20d90001e86020ac81e659fafd44350813686d121d4277bfb274097c9e5b17b03df022a91d4c1ca93f24bd838324bd710fde55fb7c629912b1db6cbc6ced0cb
|
data/README.md
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
*NOTE*
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
ember-data is changing the way they are doing relationships in 1.0.0-beta.10 and above
|
6
|
+
so, if you are using ember-data-1.0.0-beta.8 and earlier, then be sure to use version 0.6.4
|
7
|
+
( or below ) of ember-data-factory-guy.
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
ember-data-factory-guy version 0.7.0 and above will work on the newer versions of ember-data ( 1.0.0-beta.10 and above. )
|
10
|
+
**For the current version ( 0.7.1 ) though, support for the fixture adapter is currently broken.**
|
11
11
|
|
12
12
|
## Using as Gem
|
13
13
|
|
@@ -162,7 +162,8 @@ In the following examples, assume the models look like this:
|
|
162
162
|
|
163
163
|
It is better to define each polymorphic model in it's own typed definition:
|
164
164
|
|
165
|
-
```
|
165
|
+
```javascript
|
166
|
+
|
166
167
|
FactoryGuy.define('small_hat', {
|
167
168
|
default: {
|
168
169
|
type: 'SmallHat'
|
@@ -179,7 +180,8 @@ It is better to define each polymorphic model in it's own typed definition:
|
|
179
180
|
|
180
181
|
rather than doing this:
|
181
182
|
|
182
|
-
```
|
183
|
+
```javascript
|
184
|
+
|
183
185
|
FactoryGuy.define('hat', {
|
184
186
|
default: {},
|
185
187
|
small_hat: {
|
@@ -189,6 +191,7 @@ rather than doing this:
|
|
189
191
|
type: 'BigHat'
|
190
192
|
}
|
191
193
|
})
|
194
|
+
|
192
195
|
```
|
193
196
|
|
194
197
|
Since there are times that the latter can cause problems when
|
@@ -299,8 +302,8 @@ You can override the default attributes by passing in a hash
|
|
299
302
|
});
|
300
303
|
|
301
304
|
var json = FactoryGuy.build('funny_user');
|
302
|
-
json.name
|
303
|
-
json.style
|
305
|
+
json.name // => 'User1'
|
306
|
+
json.style // => 'funny User1'
|
304
307
|
|
305
308
|
var user = store.makeFixture('funny_user');
|
306
309
|
user.get('name') // => 'User2'
|
data/bower.json
CHANGED
@@ -503,7 +503,7 @@ DS.Store.reopen({
|
|
503
503
|
modelType = store.modelFor(modelName);
|
504
504
|
}
|
505
505
|
model = store.push(modelName, fixture);
|
506
|
-
|
506
|
+
store.setAssociationsForRESTAdapter(modelType, modelName, model);
|
507
507
|
});
|
508
508
|
return model;
|
509
509
|
}
|
@@ -551,14 +551,14 @@ DS.Store.reopen({
|
|
551
551
|
@param {String} modelName model name like 'user'
|
552
552
|
@param {Object} fixture to check for needed association assignments
|
553
553
|
*/
|
554
|
-
setAssociationsForFixtureAdapter: function(modelType, modelName, fixture) {
|
554
|
+
setAssociationsForFixtureAdapter: function (modelType, modelName, fixture) {
|
555
555
|
var self = this;
|
556
556
|
var adapter = this.adapterFor('application');
|
557
557
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
558
558
|
if (relationship.kind == 'hasMany') {
|
559
559
|
var hasManyRelation = fixture[relationship.key];
|
560
560
|
if (hasManyRelation) {
|
561
|
-
$.each(fixture[relationship.key], function(index,object) {
|
561
|
+
$.each(fixture[relationship.key], function (index, object) {
|
562
562
|
// used to require that the relationship was set by id,
|
563
563
|
// but now, you can set it as the json object, and this will
|
564
564
|
// normalize that back to the id
|
@@ -597,8 +597,8 @@ DS.Store.reopen({
|
|
597
597
|
Before pushing the fixture to the store, do some preprocessing.
|
598
598
|
|
599
599
|
If its a belongs to association, and the fixture has an object there,
|
600
|
-
|
601
|
-
|
600
|
+
then push that model to the store and set the id of that new model
|
601
|
+
as the attribute value in the fixture
|
602
602
|
|
603
603
|
@param modelType
|
604
604
|
@param fixture
|
@@ -617,18 +617,71 @@ DS.Store.reopen({
|
|
617
617
|
var hasManyRecords = fixture[relationship.key];
|
618
618
|
// if the records are objects and not instances they need to be converted to
|
619
619
|
// instances
|
620
|
-
if (Ember.typeOf(hasManyRecords) == 'array'
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
620
|
+
if (Ember.typeOf(hasManyRecords) == 'array') {
|
621
|
+
if (Ember.typeOf(hasManyRecords[0]) == 'object') {
|
622
|
+
var records = Em.A()
|
623
|
+
hasManyRecords.map(function (object) {
|
624
|
+
var record = store.push(relationship.type, object);
|
625
|
+
records.push(record);
|
626
|
+
return record;
|
627
|
+
})
|
628
|
+
fixture[relationship.key] = records;
|
629
|
+
}
|
627
630
|
}
|
628
631
|
}
|
629
632
|
})
|
630
633
|
},
|
631
634
|
|
635
|
+
/**
|
636
|
+
For the REST type models:
|
637
|
+
|
638
|
+
For example if a user hasMany projects, then set the user
|
639
|
+
on each project that the user hasMany of, so that the project
|
640
|
+
now has the belongsTo user association setup. As in this scenario:
|
641
|
+
|
642
|
+
```js
|
643
|
+
var project = store.makeFixture('project');
|
644
|
+
var user = store.makeFixture('user', {projects: [project]});
|
645
|
+
```
|
646
|
+
|
647
|
+
Or if you make a user, then a project with that user, then set the project
|
648
|
+
in the users list of 'projects' it hasMany of. As in this scenario:
|
649
|
+
|
650
|
+
```js
|
651
|
+
var user = store.makeFixture('user');
|
652
|
+
var project = store.makeFixture('project', {user: user});
|
653
|
+
```
|
654
|
+
|
655
|
+
NOTE:
|
656
|
+
As of ember-data-1.0.0-beta.10, this method is only needed because the belongsTo
|
657
|
+
is not assigned when there is a self referential polymorphic has many association.
|
658
|
+
|
659
|
+
@param {DS.Model} modelType model type like 'User'
|
660
|
+
@param {String} modelName model name like 'user'
|
661
|
+
@param {DS.Model} model model to check for needed association assignments
|
662
|
+
*/
|
663
|
+
setAssociationsForRESTAdapter: function (modelType, modelName, model) {
|
664
|
+
var self = this;
|
665
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
666
|
+
if (relationship.kind == 'hasMany') {
|
667
|
+
var children = model.get(name) || [];
|
668
|
+
children.forEach(function (child) {
|
669
|
+
var belongsToName = self.findRelationshipName(
|
670
|
+
'belongsTo',
|
671
|
+
child.constructor,
|
672
|
+
model
|
673
|
+
);
|
674
|
+
var inverseName = (relationship.options && relationship.options.inverse)
|
675
|
+
if (belongsToName || inverseName) {
|
676
|
+
child.set(belongsToName || inverseName, model);
|
677
|
+
}
|
678
|
+
})
|
679
|
+
}
|
680
|
+
|
681
|
+
})
|
682
|
+
},
|
683
|
+
|
684
|
+
|
632
685
|
findRelationshipName: function (kind, belongToModelType, childModel) {
|
633
686
|
var relationshipName;
|
634
687
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
@@ -1 +1 @@
|
|
1
|
-
Sequence=function(fn){var index=1;this.next=function(){return fn.call(this,index++)};this.reset=function(){index=1}};function MissingSequenceError(message){this.toString=function(){return message}}ModelDefinition=function(model,config){var sequences={};var traits={};var defaultAttributes={};var namedModels={};var modelId=1;this.model=model;this.matchesName=function(name){return model==name||namedModels[name]};this.merge=function(config){};this.generate=function(name,sequenceFn){if(sequenceFn){if(!sequences[name]){sequences[name]=new Sequence(sequenceFn)}}var sequence=sequences[name];if(!sequence){throw new MissingSequenceError("Can not find that sequence named ["+sequenceName+"] in '"+model+"' definition")}return sequence.next()};this.build=function(name,opts,traitArgs){var traitsObj={};traitArgs.forEach(function(trait){$.extend(traitsObj,traits[trait])});var modelAttributes=namedModels[name]||{};var fixture=$.extend({},defaultAttributes,modelAttributes,traitsObj,opts);for(attribute in fixture){if(Ember.typeOf(fixture[attribute])=="function"){fixture[attribute]=fixture[attribute].call(this,fixture)}else if(Ember.typeOf(fixture[attribute])=="object"){fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}if(!fixture.id){fixture.id=modelId++}return fixture};this.buildList=function(name,number,traits,opts){var arr=[];for(var i=0;i<number;i++){arr.push(this.build(name,opts,traits))}return arr};this.reset=function(){modelId=1;for(name in sequences){sequences[name].reset()}};var parseDefault=function(object){if(!object){return}defaultAttributes=object};var parseTraits=function(object){if(!object){return}traits=object};var parseSequences=function(object){if(!object){return}for(sequenceName in object){var sequenceFn=object[sequenceName];if(Ember.typeOf(sequenceFn)!="function"){throw new Error("Problem with ["+sequenceName+"] sequence definition. Sequences must be functions")}object[sequenceName]=new Sequence(sequenceFn)}sequences=object};var parseConfig=function(config){parseSequences(config.sequences);delete config.sequences;parseTraits(config.traits);delete config.traits;parseDefault(config.default);delete config.default;namedModels=config};parseConfig(config)};FactoryGuy={modelDefinitions:{},define:function(model,config){if(this.modelDefinitions[model]){this.modelDefinitions[model].merge(config)}else{this.modelDefinitions[model]=new ModelDefinition(model,config)}},generate:function(nameOrFunction){var sortaRandomName=Math.floor((1+Math.random())*65536).toString(16)+Date.now();return function(){if(Em.typeOf(nameOrFunction)=="function"){return this.generate(sortaRandomName,nameOrFunction)}else{return this.generate(nameOrFunction)}}},belongsTo:function(fixtureName,opts){return function(){return FactoryGuy.build(fixtureName,opts)}},association:function(fixtureName,opts){console.log("DEPRECATION Warning: use FactoryGuy.belongsTo instead");return this.belongsTo(fixtureName,opts)},hasMany:function(fixtureName,number,opts){return function(){return FactoryGuy.buildList(fixtureName,number,opts)}},lookupModelForFixtureName:function(name){var definition=this.lookupDefinitionForFixtureName(name);if(definition){return definition.model}},lookupDefinitionForFixtureName:function(name){for(model in this.modelDefinitions){var definition=this.modelDefinitions[model];if(definition.matchesName(name)){return definition}}},build:function(){var args=Array.prototype.slice.call(arguments);var opts={};var name=args.shift();if(!name){throw new Error("Build needs a factory name to build")}if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.build(name,opts,traits)},buildList:function(){var args=Array.prototype.slice.call(arguments);var name=args.shift();var number=args.shift();if(!name||!number){throw new Error("buildList needs a name and a number ( at least ) to build with")}var opts={};if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.buildList(name,number,traits,opts)},resetModels:function(store){for(model in this.modelDefinitions){var definition=this.modelDefinitions[model];definition.reset();try{var modelType=store.modelFor(definition.model);if(store.usingFixtureAdapter()){modelType.FIXTURES=[]}store.unloadAll(modelType)}catch(e){}}},pushFixture:function(modelClass,fixture){if(!modelClass["FIXTURES"]){modelClass["FIXTURES"]=[]}modelClass["FIXTURES"].push(fixture);return fixture},clear:function(opts){if(!opts){this.modelDefinitions={}}}};DS.Store.reopen({usingFixtureAdapter:function(){var adapter=this.adapterFor("application");return adapter instanceof DS.FixtureAdapter},makeFixture:function(name,options){var store=this;var modelName=FactoryGuy.lookupModelForFixtureName(name);var fixture=FactoryGuy.build(name,options);var modelType=store.modelFor(modelName);if(this.usingFixtureAdapter()){this.setAssociationsForFixtureAdapter(modelType,modelName,fixture);return FactoryGuy.pushFixture(modelType,fixture)}else{var store=this;var model;Em.run(function(){store.findEmbeddedAssociationsForRESTAdapter(modelType,fixture);if(fixture.type){modelName=fixture.type.underscore();modelType=store.modelFor(modelName)}model=store.push(modelName,fixture)});return model}},makeList:function(name,number,options){var arr=[];for(var i=0;i<number;i++){arr.push(this.makeFixture(name,options))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){var hasManyRelation=fixture[relationship.key];if(hasManyRelation){$.each(fixture[relationship.key],function(index,object){var id=object;if(Ember.typeOf(object)=="object"){id=object.id;hasManyRelation[index]=id}var hasManyfixtures=adapter.fixturesForType(relationship.type);var fixture=adapter.findFixtureById(hasManyfixtures,id);fixture[modelName]=fixture.id})}}if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(belongsToRecord){if(typeof belongsToRecord=="object"){FactoryGuy.pushFixture(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord.id}console.log("belongsToRecord",belongsToRecord);var hasManyName=self.findHasManyRelationshipNameForFixtureAdapter(relationship.type,relationship.parentType);var belongsToFixtures=adapter.fixturesForType(relationship.type);var belongsTofixture=adapter.findFixtureById(belongsToFixtures,fixture[relationship.key]);if(!belongsTofixture[hasManyName]){belongsTofixture[hasManyName]=[]}belongsTofixture[hasManyName].push(fixture.id)}}})},findEmbeddedAssociationsForRESTAdapter:function(modelType,fixture){var store=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}if(relationship.kind=="hasMany"){var hasManyRecords=fixture[relationship.key];if(Ember.typeOf(hasManyRecords)=="array"&&Ember.typeOf(hasManyRecords[0])=="object"){var records=Em.A();hasManyRecords.forEach(function(record){var record=store.push(relationship.type,record);records.push(record)});fixture[relationship.key]=records}}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind==kind&&childModel instanceof relationship.type){relationshipName=relationship.key}});return relationshipName},findHasManyRelationshipNameForFixtureAdapter:function(belongToModelType,childModelType){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"&&childModelType==relationship.type){relationshipName=relationship.key}});return relationshipName},pushPayload:function(type,payload){if(this.usingFixtureAdapter()){var model=this.modelFor(modelName);FactoryGuy.pushFixture(model,payload)}else{this._super(type,payload)}}});FactoryGuyTestMixin=Em.Mixin.create({setup:function(app){this.set("container",app.__container__);return this},useFixtureAdapter:function(app){app.ApplicationAdapter=DS.FixtureAdapter;this.getStore().adapterFor("application").simulateRemoteResponse=false},usingActiveModelSerializer:function(type){var store=this.getStore();var type=store.modelFor(type);var serializer=store.serializerFor(type.typeKey);return serializer instanceof DS.ActiveModelSerializer},find:function(type,id){return this.getStore().find(type,id)},make:function(name,opts){return this.getStore().makeFixture(name,opts)},getStore:function(){return this.get("container").lookup("store:main")},pushPayload:function(type,hash){return this.getStore().pushPayload(type,hash)},pushRecord:function(type,hash){return this.getStore().push(type,hash)},stubEndpointForHttpRequest:function(url,json,options){options=options||{};var request={url:url,dataType:"json",responseText:json,type:options.type||"GET",status:options.status||200};if(options.data){request.data=options.data}$.mockjax(request)},buildAjaxHttpResponse:function(name,opts){var fixture=FactoryGuy.build(name,opts);var modelName=FactoryGuy.lookupModelForFixtureName(name);if(this.usingActiveModelSerializer(modelName)){this.toSnakeCase(fixture)}var hash={};hash[modelName]=fixture;return hash},toSnakeCase:function(fixture){for(key in fixture){if(key!=Em.String.decamelize(key)){var value=fixture[key];delete fixture[key];fixture[Em.String.decamelize(key)]=value}}},buildURL:function(type,id){return this.getStore().adapterFor("application").buildURL(type,id)},handleSideloadFind:function(modelName,json,sideload){var id=json.id;var url=this.buildURL(modelName,id);var responseJson={};responseJson[modelName]=json;$.extend(responseJson,sideload);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200})},handleFind:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var id=responseJson[modelName].id;var url=this.buildURL(modelName,id);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200});return responseJson},handleCreate:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{type:"POST",status:status||200});return responseJson},handleUpdate:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"PUT",status:status||200})},handleDelete:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:status||200})},teardown:function(){FactoryGuy.resetModels(this.getStore())}});
|
1
|
+
Sequence=function(fn){var index=1;this.next=function(){return fn.call(this,index++)};this.reset=function(){index=1}};function MissingSequenceError(message){this.toString=function(){return message}}ModelDefinition=function(model,config){var sequences={};var traits={};var defaultAttributes={};var namedModels={};var modelId=1;this.model=model;this.matchesName=function(name){return model==name||namedModels[name]};this.merge=function(config){};this.generate=function(name,sequenceFn){if(sequenceFn){if(!sequences[name]){sequences[name]=new Sequence(sequenceFn)}}var sequence=sequences[name];if(!sequence){throw new MissingSequenceError("Can not find that sequence named ["+sequenceName+"] in '"+model+"' definition")}return sequence.next()};this.build=function(name,opts,traitArgs){var traitsObj={};traitArgs.forEach(function(trait){$.extend(traitsObj,traits[trait])});var modelAttributes=namedModels[name]||{};var fixture=$.extend({},defaultAttributes,modelAttributes,traitsObj,opts);for(attribute in fixture){if(Ember.typeOf(fixture[attribute])=="function"){fixture[attribute]=fixture[attribute].call(this,fixture)}else if(Ember.typeOf(fixture[attribute])=="object"){fixture[attribute]=FactoryGuy.build(attribute,fixture[attribute])}}if(!fixture.id){fixture.id=modelId++}return fixture};this.buildList=function(name,number,traits,opts){var arr=[];for(var i=0;i<number;i++){arr.push(this.build(name,opts,traits))}return arr};this.reset=function(){modelId=1;for(name in sequences){sequences[name].reset()}};var parseDefault=function(object){if(!object){return}defaultAttributes=object};var parseTraits=function(object){if(!object){return}traits=object};var parseSequences=function(object){if(!object){return}for(sequenceName in object){var sequenceFn=object[sequenceName];if(Ember.typeOf(sequenceFn)!="function"){throw new Error("Problem with ["+sequenceName+"] sequence definition. Sequences must be functions")}object[sequenceName]=new Sequence(sequenceFn)}sequences=object};var parseConfig=function(config){parseSequences(config.sequences);delete config.sequences;parseTraits(config.traits);delete config.traits;parseDefault(config.default);delete config.default;namedModels=config};parseConfig(config)};FactoryGuy={modelDefinitions:{},define:function(model,config){if(this.modelDefinitions[model]){this.modelDefinitions[model].merge(config)}else{this.modelDefinitions[model]=new ModelDefinition(model,config)}},generate:function(nameOrFunction){var sortaRandomName=Math.floor((1+Math.random())*65536).toString(16)+Date.now();return function(){if(Em.typeOf(nameOrFunction)=="function"){return this.generate(sortaRandomName,nameOrFunction)}else{return this.generate(nameOrFunction)}}},belongsTo:function(fixtureName,opts){return function(){return FactoryGuy.build(fixtureName,opts)}},association:function(fixtureName,opts){console.log("DEPRECATION Warning: use FactoryGuy.belongsTo instead");return this.belongsTo(fixtureName,opts)},hasMany:function(fixtureName,number,opts){return function(){return FactoryGuy.buildList(fixtureName,number,opts)}},lookupModelForFixtureName:function(name){var definition=this.lookupDefinitionForFixtureName(name);if(definition){return definition.model}},lookupDefinitionForFixtureName:function(name){for(model in this.modelDefinitions){var definition=this.modelDefinitions[model];if(definition.matchesName(name)){return definition}}},build:function(){var args=Array.prototype.slice.call(arguments);var opts={};var name=args.shift();if(!name){throw new Error("Build needs a factory name to build")}if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.build(name,opts,traits)},buildList:function(){var args=Array.prototype.slice.call(arguments);var name=args.shift();var number=args.shift();if(!name||!number){throw new Error("buildList needs a name and a number ( at least ) to build with")}var opts={};if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;var definition=this.lookupDefinitionForFixtureName(name);if(!definition){throw new Error("Can't find that factory named ["+name+"]")}return definition.buildList(name,number,traits,opts)},resetModels:function(store){for(model in this.modelDefinitions){var definition=this.modelDefinitions[model];definition.reset();try{var modelType=store.modelFor(definition.model);if(store.usingFixtureAdapter()){modelType.FIXTURES=[]}store.unloadAll(modelType)}catch(e){}}},pushFixture:function(modelClass,fixture){if(!modelClass["FIXTURES"]){modelClass["FIXTURES"]=[]}modelClass["FIXTURES"].push(fixture);return fixture},clear:function(opts){if(!opts){this.modelDefinitions={}}}};DS.Store.reopen({usingFixtureAdapter:function(){var adapter=this.adapterFor("application");return adapter instanceof DS.FixtureAdapter},makeFixture:function(name,options){var store=this;var modelName=FactoryGuy.lookupModelForFixtureName(name);var fixture=FactoryGuy.build(name,options);var modelType=store.modelFor(modelName);if(this.usingFixtureAdapter()){this.setAssociationsForFixtureAdapter(modelType,modelName,fixture);return FactoryGuy.pushFixture(modelType,fixture)}else{var store=this;var model;Em.run(function(){store.findEmbeddedAssociationsForRESTAdapter(modelType,fixture);if(fixture.type){modelName=fixture.type.underscore();modelType=store.modelFor(modelName)}model=store.push(modelName,fixture);store.setAssociationsForRESTAdapter(modelType,modelName,model)});return model}},makeList:function(name,number,options){var arr=[];for(var i=0;i<number;i++){arr.push(this.makeFixture(name,options))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){var hasManyRelation=fixture[relationship.key];if(hasManyRelation){$.each(fixture[relationship.key],function(index,object){var id=object;if(Ember.typeOf(object)=="object"){id=object.id;hasManyRelation[index]=id}var hasManyfixtures=adapter.fixturesForType(relationship.type);var fixture=adapter.findFixtureById(hasManyfixtures,id);fixture[modelName]=fixture.id})}}if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(belongsToRecord){if(typeof belongsToRecord=="object"){FactoryGuy.pushFixture(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord.id}var hasManyName=self.findHasManyRelationshipNameForFixtureAdapter(relationship.type,relationship.parentType);var belongsToFixtures=adapter.fixturesForType(relationship.type);var belongsTofixture=adapter.findFixtureById(belongsToFixtures,fixture[relationship.key]);if(!belongsTofixture[hasManyName]){belongsTofixture[hasManyName]=[]}belongsTofixture[hasManyName].push(fixture.id)}}})},findEmbeddedAssociationsForRESTAdapter:function(modelType,fixture){var store=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){belongsToRecord=store.push(relationship.type,belongsToRecord);fixture[relationship.key]=belongsToRecord}}if(relationship.kind=="hasMany"){var hasManyRecords=fixture[relationship.key];if(Ember.typeOf(hasManyRecords)=="array"){if(Ember.typeOf(hasManyRecords[0])=="object"){var records=Em.A();hasManyRecords.map(function(object){var record=store.push(relationship.type,object);records.push(record);return record});fixture[relationship.key]=records}}}})},setAssociationsForRESTAdapter:function(modelType,modelName,model){var self=this;Ember.get(modelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"){var children=model.get(name)||[];children.forEach(function(child){var belongsToName=self.findRelationshipName("belongsTo",child.constructor,model);var inverseName=relationship.options&&relationship.options.inverse;if(belongsToName||inverseName){child.set(belongsToName||inverseName,model)}})}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind==kind&&childModel instanceof relationship.type){relationshipName=relationship.key}});return relationshipName},findHasManyRelationshipNameForFixtureAdapter:function(belongToModelType,childModelType){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(name,relationship){if(relationship.kind=="hasMany"&&childModelType==relationship.type){relationshipName=relationship.key}});return relationshipName},pushPayload:function(type,payload){if(this.usingFixtureAdapter()){var model=this.modelFor(modelName);FactoryGuy.pushFixture(model,payload)}else{this._super(type,payload)}}});FactoryGuyTestMixin=Em.Mixin.create({setup:function(app){this.set("container",app.__container__);return this},useFixtureAdapter:function(app){app.ApplicationAdapter=DS.FixtureAdapter;this.getStore().adapterFor("application").simulateRemoteResponse=false},usingActiveModelSerializer:function(type){var store=this.getStore();var type=store.modelFor(type);var serializer=store.serializerFor(type.typeKey);return serializer instanceof DS.ActiveModelSerializer},find:function(type,id){return this.getStore().find(type,id)},make:function(name,opts){return this.getStore().makeFixture(name,opts)},getStore:function(){return this.get("container").lookup("store:main")},pushPayload:function(type,hash){return this.getStore().pushPayload(type,hash)},pushRecord:function(type,hash){return this.getStore().push(type,hash)},stubEndpointForHttpRequest:function(url,json,options){options=options||{};var request={url:url,dataType:"json",responseText:json,type:options.type||"GET",status:options.status||200};if(options.data){request.data=options.data}$.mockjax(request)},buildAjaxHttpResponse:function(name,opts){var fixture=FactoryGuy.build(name,opts);var modelName=FactoryGuy.lookupModelForFixtureName(name);if(this.usingActiveModelSerializer(modelName)){this.toSnakeCase(fixture)}var hash={};hash[modelName]=fixture;return hash},toSnakeCase:function(fixture){for(key in fixture){if(key!=Em.String.decamelize(key)){var value=fixture[key];delete fixture[key];fixture[Em.String.decamelize(key)]=value}}},buildURL:function(type,id){return this.getStore().adapterFor("application").buildURL(type,id)},handleSideloadFind:function(modelName,json,sideload){var id=json.id;var url=this.buildURL(modelName,id);var responseJson={};responseJson[modelName]=json;$.extend(responseJson,sideload);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200})},handleFind:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var id=responseJson[modelName].id;var url=this.buildURL(modelName,id);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET",status:status||200});return responseJson},handleCreate:function(name,opts,status){var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson=this.buildAjaxHttpResponse(name,opts);var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{type:"POST",status:status||200});return responseJson},handleUpdate:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"PUT",status:status||200})},handleDelete:function(type,id,status){this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:status||200})},teardown:function(){FactoryGuy.resetModels(this.getStore())}});
|
@@ -179,11 +179,11 @@
|
|
179
179
|
@param {Object} options a hash of options
|
180
180
|
@return {Ember.computed} relationship
|
181
181
|
*/
|
182
|
-
DS.hasMany = function(type, options) {
|
183
|
-
if (typeof type === 'object') {
|
184
|
-
options = type;
|
185
|
-
type = undefined;
|
186
|
-
}
|
187
|
-
return hasRelationship(type, options);
|
188
|
-
}
|
182
|
+
// DS.hasMany = function(type, options) {
|
183
|
+
// if (typeof type === 'object') {
|
184
|
+
// options = type;
|
185
|
+
// type = undefined;
|
186
|
+
// }
|
187
|
+
// return hasRelationship(type, options);
|
188
|
+
// }
|
189
189
|
}).call();
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = "ember-data-factory-guy"
|
4
|
-
s.version = "0.7.
|
4
|
+
s.version = "0.7.1"
|
5
5
|
s.platform = Gem::Platform::RUBY
|
6
6
|
s.authors = ["Daniel Sudol", "Alex Opak"]
|
7
7
|
s.email = ["dansudol@yahoo.com", "opak.alexandr@gmail.com"]
|
data/package.json
CHANGED
data/src/has_many.js
CHANGED
@@ -179,11 +179,11 @@
|
|
179
179
|
@param {Object} options a hash of options
|
180
180
|
@return {Ember.computed} relationship
|
181
181
|
*/
|
182
|
-
DS.hasMany = function(type, options) {
|
183
|
-
if (typeof type === 'object') {
|
184
|
-
options = type;
|
185
|
-
type = undefined;
|
186
|
-
}
|
187
|
-
return hasRelationship(type, options);
|
188
|
-
}
|
182
|
+
// DS.hasMany = function(type, options) {
|
183
|
+
// if (typeof type === 'object') {
|
184
|
+
// options = type;
|
185
|
+
// type = undefined;
|
186
|
+
// }
|
187
|
+
// return hasRelationship(type, options);
|
188
|
+
// }
|
189
189
|
}).call();
|
data/src/store.js
CHANGED
@@ -37,7 +37,7 @@ DS.Store.reopen({
|
|
37
37
|
modelType = store.modelFor(modelName);
|
38
38
|
}
|
39
39
|
model = store.push(modelName, fixture);
|
40
|
-
|
40
|
+
store.setAssociationsForRESTAdapter(modelType, modelName, model);
|
41
41
|
});
|
42
42
|
return model;
|
43
43
|
}
|
@@ -85,14 +85,14 @@ DS.Store.reopen({
|
|
85
85
|
@param {String} modelName model name like 'user'
|
86
86
|
@param {Object} fixture to check for needed association assignments
|
87
87
|
*/
|
88
|
-
setAssociationsForFixtureAdapter: function(modelType, modelName, fixture) {
|
88
|
+
setAssociationsForFixtureAdapter: function (modelType, modelName, fixture) {
|
89
89
|
var self = this;
|
90
90
|
var adapter = this.adapterFor('application');
|
91
91
|
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
92
92
|
if (relationship.kind == 'hasMany') {
|
93
93
|
var hasManyRelation = fixture[relationship.key];
|
94
94
|
if (hasManyRelation) {
|
95
|
-
$.each(fixture[relationship.key], function(index,object) {
|
95
|
+
$.each(fixture[relationship.key], function (index, object) {
|
96
96
|
// used to require that the relationship was set by id,
|
97
97
|
// but now, you can set it as the json object, and this will
|
98
98
|
// normalize that back to the id
|
@@ -131,8 +131,8 @@ DS.Store.reopen({
|
|
131
131
|
Before pushing the fixture to the store, do some preprocessing.
|
132
132
|
|
133
133
|
If its a belongs to association, and the fixture has an object there,
|
134
|
-
|
135
|
-
|
134
|
+
then push that model to the store and set the id of that new model
|
135
|
+
as the attribute value in the fixture
|
136
136
|
|
137
137
|
@param modelType
|
138
138
|
@param fixture
|
@@ -151,18 +151,71 @@ DS.Store.reopen({
|
|
151
151
|
var hasManyRecords = fixture[relationship.key];
|
152
152
|
// if the records are objects and not instances they need to be converted to
|
153
153
|
// instances
|
154
|
-
if (Ember.typeOf(hasManyRecords) == 'array'
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
154
|
+
if (Ember.typeOf(hasManyRecords) == 'array') {
|
155
|
+
if (Ember.typeOf(hasManyRecords[0]) == 'object') {
|
156
|
+
var records = Em.A()
|
157
|
+
hasManyRecords.map(function (object) {
|
158
|
+
var record = store.push(relationship.type, object);
|
159
|
+
records.push(record);
|
160
|
+
return record;
|
161
|
+
})
|
162
|
+
fixture[relationship.key] = records;
|
163
|
+
}
|
161
164
|
}
|
162
165
|
}
|
163
166
|
})
|
164
167
|
},
|
165
168
|
|
169
|
+
/**
|
170
|
+
For the REST type models:
|
171
|
+
|
172
|
+
For example if a user hasMany projects, then set the user
|
173
|
+
on each project that the user hasMany of, so that the project
|
174
|
+
now has the belongsTo user association setup. As in this scenario:
|
175
|
+
|
176
|
+
```js
|
177
|
+
var project = store.makeFixture('project');
|
178
|
+
var user = store.makeFixture('user', {projects: [project]});
|
179
|
+
```
|
180
|
+
|
181
|
+
Or if you make a user, then a project with that user, then set the project
|
182
|
+
in the users list of 'projects' it hasMany of. As in this scenario:
|
183
|
+
|
184
|
+
```js
|
185
|
+
var user = store.makeFixture('user');
|
186
|
+
var project = store.makeFixture('project', {user: user});
|
187
|
+
```
|
188
|
+
|
189
|
+
NOTE:
|
190
|
+
As of ember-data-1.0.0-beta.10, this method is only needed because the belongsTo
|
191
|
+
is not assigned when there is a self referential polymorphic has many association.
|
192
|
+
|
193
|
+
@param {DS.Model} modelType model type like 'User'
|
194
|
+
@param {String} modelName model name like 'user'
|
195
|
+
@param {DS.Model} model model to check for needed association assignments
|
196
|
+
*/
|
197
|
+
setAssociationsForRESTAdapter: function (modelType, modelName, model) {
|
198
|
+
var self = this;
|
199
|
+
Ember.get(modelType, 'relationshipsByName').forEach(function (name, relationship) {
|
200
|
+
if (relationship.kind == 'hasMany') {
|
201
|
+
var children = model.get(name) || [];
|
202
|
+
children.forEach(function (child) {
|
203
|
+
var belongsToName = self.findRelationshipName(
|
204
|
+
'belongsTo',
|
205
|
+
child.constructor,
|
206
|
+
model
|
207
|
+
);
|
208
|
+
var inverseName = (relationship.options && relationship.options.inverse)
|
209
|
+
if (belongsToName || inverseName) {
|
210
|
+
child.set(belongsToName || inverseName, model);
|
211
|
+
}
|
212
|
+
})
|
213
|
+
}
|
214
|
+
|
215
|
+
})
|
216
|
+
},
|
217
|
+
|
218
|
+
|
166
219
|
findRelationshipName: function (kind, belongToModelType, childModel) {
|
167
220
|
var relationshipName;
|
168
221
|
Ember.get(belongToModelType, 'relationshipsByName').forEach(
|
@@ -22,8 +22,8 @@ test("#resetModels clears the store of models, and resets the model definition",
|
|
22
22
|
|
23
23
|
FactoryGuy.resetModels(store);
|
24
24
|
|
25
|
-
equal(store.all('user').get('content.length'),0)
|
26
|
-
equal(store.all('project').get('content.length'),0)
|
25
|
+
// equal(store.all('user').get('content.length'),0)
|
26
|
+
// equal(store.all('project').get('content.length'),0)
|
27
27
|
|
28
28
|
for (model in FactoryGuy.modelDefinitions) {
|
29
29
|
var definition = FactoryGuy.modelDefinitions[model];
|
@@ -54,7 +54,7 @@ asyncTest("creates records in the store", function() {
|
|
54
54
|
var user = store.makeFixture('user');
|
55
55
|
|
56
56
|
store.find('user', user.id).then ( function(store_user) {
|
57
|
-
|
57
|
+
ok(store_user == user);
|
58
58
|
start()
|
59
59
|
});
|
60
60
|
});
|
@@ -70,48 +70,63 @@ test("when hasMany associations assigned, belongTo parent is assigned", function
|
|
70
70
|
var project = store.makeFixture('project');
|
71
71
|
var user = store.makeFixture('user', {projects: [project]})
|
72
72
|
|
73
|
-
|
73
|
+
ok(project.get('user') == user);
|
74
74
|
});
|
75
75
|
|
76
76
|
|
77
|
-
asyncTest("when asnyc
|
77
|
+
asyncTest("when hasMany ( asnyc ) associations assigned, belongTo parent is assigned", function() {
|
78
78
|
var user = store.makeFixture('user');
|
79
79
|
var company = store.makeFixture('company', {users: [user]});
|
80
80
|
|
81
81
|
user.get('company').then(function(c){
|
82
|
-
|
82
|
+
ok(c == company);
|
83
83
|
start();
|
84
84
|
})
|
85
85
|
});
|
86
86
|
|
87
87
|
|
88
|
-
test("when polymorphic
|
88
|
+
test("when hasMany ( polymorphic ) associations are assigned, belongTo parent is assigned", function() {
|
89
89
|
var bh = store.makeFixture('big_hat');
|
90
90
|
var sh = store.makeFixture('small_hat');
|
91
91
|
var user = store.makeFixture('user', {hats: [bh, sh]})
|
92
92
|
|
93
|
-
equal(user.get('hats.
|
94
|
-
ok(user.get('hats.
|
95
|
-
ok(user.get('hats.
|
93
|
+
equal(user.get('hats.length'), 2);
|
94
|
+
ok(user.get('hats.firstObject') instanceof BigHat)
|
95
|
+
ok(user.get('hats.lastObject') instanceof SmallHat)
|
96
96
|
// sets the belongTo user association
|
97
97
|
ok(bh.get('user') == user)
|
98
98
|
ok(sh.get('user') == user)
|
99
99
|
});
|
100
100
|
|
101
101
|
|
102
|
+
test("when hasMany ( self referential ) associations are assigned, belongsTo parent is assigned", function() {
|
103
|
+
var big_group = store.makeFixture('big_group');
|
104
|
+
var group = store.makeFixture('group', {versions: [big_group]});
|
105
|
+
ok(big_group.get('group') == group)
|
106
|
+
});
|
107
|
+
|
108
|
+
|
102
109
|
test("when hasMany associations are assigned, belongsTo parent is assigned using inverse", function() {
|
103
110
|
var project = store.makeFixture('project');
|
104
111
|
var project2 = store.makeFixture('project', {children: [project]});
|
105
112
|
|
106
|
-
|
113
|
+
ok(project.get('parent') == project2);
|
107
114
|
});
|
108
115
|
|
109
116
|
|
110
117
|
test("when hasMany associations are assigned, belongsTo parent is assigned using actual belongsTo name", function() {
|
111
118
|
var silk = store.makeFixture('silk');
|
112
|
-
var
|
119
|
+
var big_hat = store.makeFixture('big_hat', {materials: [silk]});
|
120
|
+
|
121
|
+
ok(silk.get('hat') == big_hat)
|
122
|
+
});
|
123
|
+
|
124
|
+
|
125
|
+
test("when hasMany associations are assigned, belongsTo ( polymorphic ) parent is assigned", function() {
|
126
|
+
var fluff = store.makeFixture('fluffy_material');
|
127
|
+
var big_hat = store.makeFixture('big_hat', {fluffy_materials: [fluff]});
|
113
128
|
|
114
|
-
|
129
|
+
ok(fluff.get('hat') == big_hat)
|
115
130
|
});
|
116
131
|
|
117
132
|
|
@@ -120,9 +135,9 @@ test("when belongTo parent is assigned, parent adds to hasMany records", functio
|
|
120
135
|
var project1 = store.makeFixture('project', {user: user});
|
121
136
|
var project2 = store.makeFixture('project', {user: user});
|
122
137
|
|
123
|
-
equal(user.get('projects.
|
124
|
-
|
125
|
-
|
138
|
+
equal(user.get('projects.length'), 2);
|
139
|
+
ok(user.get('projects.firstObject') == project1);
|
140
|
+
ok(user.get('projects.lastObject') == project2);
|
126
141
|
});
|
127
142
|
|
128
143
|
|
@@ -131,9 +146,9 @@ test("when belongTo parent is assigned, parent adds to polymorphic hasMany recor
|
|
131
146
|
store.makeFixture('big_hat', {user: user});
|
132
147
|
store.makeFixture('small_hat', {user: user});
|
133
148
|
|
134
|
-
equal(user.get('hats.
|
135
|
-
ok(user.get('hats.
|
136
|
-
ok(user.get('hats.
|
149
|
+
equal(user.get('hats.length'), 2);
|
150
|
+
ok(user.get('hats.firstObject') instanceof BigHat)
|
151
|
+
ok(user.get('hats.lastObject') instanceof SmallHat)
|
137
152
|
});
|
138
153
|
|
139
154
|
|
@@ -142,9 +157,9 @@ asyncTest("when async hasMany relationship is assigned, model relationship is sy
|
|
142
157
|
var user1 = store.makeFixture('user', {properties: [property]});
|
143
158
|
var user2 = store.makeFixture('user', {properties: [property]});
|
144
159
|
|
145
|
-
equal(property.get('owners.
|
146
|
-
|
147
|
-
|
160
|
+
equal(property.get('owners.length'), 2);
|
161
|
+
ok(property.get('owners.firstObject') == user1);
|
162
|
+
ok(property.get('owners.lastObject') == user2);
|
148
163
|
start();
|
149
164
|
});
|
150
165
|
|
@@ -154,9 +169,9 @@ asyncTest("when async belongsTo parent is assigned, parent adds to hasMany recor
|
|
154
169
|
var user1 = store.makeFixture('user', {company: company});
|
155
170
|
var user2 = store.makeFixture('user', {company: company});
|
156
171
|
|
157
|
-
equal(company.get('users.
|
158
|
-
|
159
|
-
|
172
|
+
equal(company.get('users.length'), 2);
|
173
|
+
ok(company.get('users.firstObject') == user1);
|
174
|
+
ok(company.get('users.lastObject') == user2);
|
160
175
|
start();
|
161
176
|
});
|
162
177
|
|
@@ -165,8 +180,8 @@ test("when belongTo parent is assigned, parent adds to hasMany record using inve
|
|
165
180
|
var project = store.makeFixture('project');
|
166
181
|
var project2 = store.makeFixture('project', {parent: project});
|
167
182
|
|
168
|
-
equal(project.get('children.
|
169
|
-
|
183
|
+
equal(project.get('children.length'), 1);
|
184
|
+
ok(project.get('children.firstObject') == project2);
|
170
185
|
});
|
171
186
|
|
172
187
|
|
@@ -174,34 +189,34 @@ test("when belongTo parent is assigned, parent adds to hasMany record using actu
|
|
174
189
|
var bh = store.makeFixture('big_hat');
|
175
190
|
var silk = store.makeFixture('silk', {hat: bh});
|
176
191
|
|
177
|
-
|
192
|
+
ok(bh.get('materials.firstObject') == silk)
|
178
193
|
});
|
179
194
|
|
180
195
|
|
181
196
|
test("when belongTo parent is assigned, parent adds to belongsTo record", function() {
|
182
197
|
var company = store.makeFixture('company');
|
183
198
|
var profile = store.makeFixture('profile', {company: company});
|
184
|
-
|
199
|
+
ok(company.get('profile') == profile);
|
185
200
|
|
186
201
|
// but guard against a situation where a model can belong to itself
|
187
202
|
// and do not want to set the belongsTo on this case.
|
188
203
|
var hat1 = store.makeFixture('big_hat')
|
189
204
|
var hat2 = store.makeFixture('big_hat', {hat: hat1})
|
190
|
-
|
191
|
-
|
205
|
+
ok(hat1.get('hat') == null);
|
206
|
+
ok(hat2.get('hat') == hat1);
|
192
207
|
});
|
193
208
|
|
194
209
|
|
195
210
|
test("belongsTo associations defined as attributes in fixture", function() {
|
196
211
|
var project = store.makeFixture('project_with_user');
|
197
212
|
equal(project.get('user') instanceof User, true)
|
198
|
-
|
213
|
+
ok(project.get('user.name') == 'User1');
|
199
214
|
|
200
215
|
var project = store.makeFixture('project_with_dude');
|
201
|
-
|
216
|
+
ok(project.get('user.name') == 'Dude');
|
202
217
|
|
203
218
|
var project = store.makeFixture('project_with_admin');
|
204
|
-
|
219
|
+
ok(project.get('user.name') == 'Admin');
|
205
220
|
});
|
206
221
|
|
207
222
|
|
@@ -219,7 +234,7 @@ module('DS.Store#makeList with ActiveModelAdapter', {
|
|
219
234
|
test("creates list of DS.Model instances", function() {
|
220
235
|
var users = store.makeList('user', 2);
|
221
236
|
equal(users.length, 2);
|
222
|
-
|
237
|
+
ok(users[0] instanceof DS.Model == true);
|
223
238
|
});
|
224
239
|
|
225
240
|
|
@@ -227,8 +242,8 @@ test("creates records in the store", function() {
|
|
227
242
|
var users = store.makeList('user', 2);
|
228
243
|
|
229
244
|
var storeUsers = store.all('user').get('content');
|
230
|
-
|
231
|
-
|
245
|
+
ok(storeUsers[0] == users[0]);
|
246
|
+
ok(storeUsers[1] == users[1]);
|
232
247
|
});
|
233
248
|
|
234
249
|
|