ember-data-factory-guy 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|