ember-data-factory-guy 0.7.5 → 0.7.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +56 -17
- data/bower.json +6 -4
- data/dist/ember-data-factory-guy.js +9 -59
- data/dist/ember-data-factory-guy.min.js +1 -1
- data/ember-data-factory-guy.gemspec +1 -1
- data/package.json +1 -1
- data/src/factory_guy_test_mixin.js +9 -60
- data/tests/factory_guy_test_mixin_test.js +2 -4
- data/tests/index.html +8 -5
- data/tests/support/factories/profile_factory.js +3 -0
- data/tests/test_setup.js +3 -4888
- data/vendor/assets/javascripts/ember_data_factory_guy.js +9 -59
- metadata +2 -4
- data/tests/support/libs/mockjax.js +0 -600
- data/tests/support/libs/sinon.js +0 -4287
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 09d4fe99fe9f0b792f14f6b17f0866cfbaa46eca
|
4
|
+
data.tar.gz: 3c2a64a11020f01ed1941f6c4b7ddaf73318ca3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1dd36da1d32a68d2aec68b51351c1f1f1300326c0a762f8b15652b0fb4defc74316f5827b81839eb28662492ace9dad67092e6e834065c799e1132435ff147f
|
7
|
+
data.tar.gz: c0600ebf435a98e8cea2f1bee7991d3e6a480dfd7c46928387e71ab6cf2fa490c4d18d6016212a369791d5a99cdc16c4c2bbab1f7100b27636a954118dc19d6c
|
data/README.md
CHANGED
@@ -4,15 +4,19 @@
|
|
4
4
|
|
5
5
|
ember-data is changing the way they are doing relationships in 1.0.0-beta.10 and above
|
6
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
|
-
|
7
|
+
of ember-data-factory-guy.
|
8
8
|
|
9
9
|
- Versions:
|
10
10
|
- 0.6.4 -> ember-data-1.0.0-beta.8 and under
|
11
11
|
- 0.7.1.1 -> ember-data-1.0.0-beta.10
|
12
|
-
- 0.7.
|
13
|
-
- 0.7.
|
12
|
+
- 0.7.6 -> ember-data-1.0.0-beta.11
|
13
|
+
- 0.7.6 -> ember-data-1.0.0-beta.12
|
14
14
|
|
15
|
-
**For versions ( 0.7.1 -> 0.7.
|
15
|
+
**For versions ( 0.7.1 -> 0.7.6 ), support for the fixture adapter is currently broken.**
|
16
|
+
|
17
|
+
**Version 0.7.6 has many bug fixes that the earlier versions don't have, so hopefully you
|
18
|
+
can switch to newer version of ember-data and therefore the best ember-data-factory-guy version,
|
19
|
+
but if not, send me bug report and I will try and go back and fix the older version you are using.**
|
16
20
|
|
17
21
|
## Using as Gem
|
18
22
|
|
@@ -27,7 +31,7 @@ gem 'ember-data-factory-guy', group: test
|
|
27
31
|
or for particular version:
|
28
32
|
|
29
33
|
```ruby
|
30
|
-
gem 'ember-data-factory-guy', '0.7.
|
34
|
+
gem 'ember-data-factory-guy', '0.7.6', group: test
|
31
35
|
```
|
32
36
|
|
33
37
|
then:
|
@@ -62,7 +66,7 @@ or for particular version:
|
|
62
66
|
"dependencies": {
|
63
67
|
"foo-dependency": "latest",
|
64
68
|
"other-foo-dependency": "latest",
|
65
|
-
"ember-data-factory-guy": "0.7.
|
69
|
+
"ember-data-factory-guy": "0.7.6"
|
66
70
|
}
|
67
71
|
```
|
68
72
|
|
@@ -283,10 +287,10 @@ You can override the default attributes by passing in a hash
|
|
283
287
|
});
|
284
288
|
|
285
289
|
var json = FactoryGuy.build('special_project');
|
286
|
-
json.title // => 'Project 1'
|
290
|
+
json.title // => 'Project #1'
|
287
291
|
|
288
292
|
var project = store.makeFixture('special_project');
|
289
|
-
project.get('title') // => 'Project 2'
|
293
|
+
project.get('title') // => 'Project #2'
|
290
294
|
|
291
295
|
```
|
292
296
|
|
@@ -570,7 +574,7 @@ test("make a user using your applications default adapter", function() {
|
|
570
574
|
|
571
575
|
- Uses mockjax
|
572
576
|
- Has helper methods
|
573
|
-
- handleFindMany
|
577
|
+
- handleFindMany
|
574
578
|
- handleCreate
|
575
579
|
- handleUpdate ( can mock success or failure )
|
576
580
|
- handleDelete ( can mock success or failure )
|
@@ -583,12 +587,50 @@ To do that you will still have to deal with ember data trying to create, update
|
|
583
587
|
If you put models into the store ( with store#makeFixture ), the http GET call does not need to be mocked,
|
584
588
|
since that model is already in the store.
|
585
589
|
|
586
|
-
But what if you want to handle create, update
|
590
|
+
But what if you want to handle create, update, and delete? Or even findAll records?
|
587
591
|
|
588
592
|
FactoryGuy assumes you want to mock ajax calls with the mockjax library,
|
589
593
|
and this is already bundled for you when you use the ember-data-factory-guy library.
|
590
594
|
|
591
595
|
|
596
|
+
##### handleFindMany
|
597
|
+
- for dealing with finding all records of a particular type
|
598
|
+
|
599
|
+
```javascript
|
600
|
+
// can use traits and extra fixture options here as you would with store#makeList
|
601
|
+
testHelper.handleFindMany('profile', 2);
|
602
|
+
|
603
|
+
store.find('profile').then(function (profiles) {
|
604
|
+
profiles.get('length') //=> 2
|
605
|
+
});
|
606
|
+
```
|
607
|
+
|
608
|
+
##### handleCreate
|
609
|
+
|
610
|
+
*success case is the default*
|
611
|
+
|
612
|
+
```javascript
|
613
|
+
// set up the profile you want here
|
614
|
+
testHelper.handleCreate('profile', 'with_company', {description: "Moo"})
|
615
|
+
|
616
|
+
// don't put options or traits here just put 'profile', since the above handle create
|
617
|
+
// is tailoring the profile for you
|
618
|
+
store.createRecord('profile').save().then(function(profile) {
|
619
|
+
profile.toJSON() //=> {id:1, description: "Moo", company: "1"}
|
620
|
+
});
|
621
|
+
|
622
|
+
```
|
623
|
+
|
624
|
+
*mocking a failed create*
|
625
|
+
|
626
|
+
```javascript
|
627
|
+
// set the succeed flag to 'false'
|
628
|
+
testHelper.handleCreate('profile', false);
|
629
|
+
|
630
|
+
store.createRecord('profile').save() //=> fails
|
631
|
+
|
632
|
+
```
|
633
|
+
|
592
634
|
##### handleUpdate
|
593
635
|
|
594
636
|
*success case is the default*
|
@@ -601,10 +643,11 @@ and this is already bundled for you when you use the ember-data-factory-guy libr
|
|
601
643
|
profile.save() //=> will succeed
|
602
644
|
````
|
603
645
|
|
604
|
-
*mocking failed update*
|
646
|
+
*mocking a failed update*
|
605
647
|
|
606
648
|
```javascript
|
607
649
|
var profile = store.makeFixture('profile');
|
650
|
+
// set the succeed flag to 'false'
|
608
651
|
testHelper.handleUpdate('profile', profile.id, false);
|
609
652
|
|
610
653
|
profile.set('description', 'bad value');
|
@@ -612,6 +655,7 @@ and this is already bundled for you when you use the ember-data-factory-guy libr
|
|
612
655
|
````
|
613
656
|
|
614
657
|
|
658
|
+
|
615
659
|
##### handleDelete
|
616
660
|
|
617
661
|
*success case is the default*
|
@@ -623,7 +667,7 @@ and this is already bundled for you when you use the ember-data-factory-guy libr
|
|
623
667
|
profile.destroyRecord() // => will succeed
|
624
668
|
````
|
625
669
|
|
626
|
-
*mocking failed delete*
|
670
|
+
*mocking a failed delete*
|
627
671
|
|
628
672
|
```javascript
|
629
673
|
var profile = store.makeFixture('profile');
|
@@ -646,11 +690,6 @@ ViewTestHelper = Ember.Object.createWithMixins(FactoryGuyTestMixin,{
|
|
646
690
|
$.mockjaxSettings.logging = false; // mockjax settings
|
647
691
|
$.mockjaxSettings.responseTime = 0; // mockjax settings
|
648
692
|
return this._super(app); // still call the base setup from FactoryGuyTestMixin
|
649
|
-
},
|
650
|
-
// override teardown to clear mockjax declarations
|
651
|
-
teardown: function() {
|
652
|
-
$.mockjaxClear();
|
653
|
-
this._super();
|
654
693
|
}
|
655
694
|
}
|
656
695
|
|
data/bower.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ember-data-factory-guy",
|
3
|
-
"version": "0.7.
|
3
|
+
"version": "0.7.6",
|
4
4
|
"authors": [
|
5
5
|
"Daniel Sudol <dansudol@yahoo.com>",
|
6
6
|
"Opak Alex <opak.alexandr@gmail.com>"
|
@@ -14,7 +14,6 @@
|
|
14
14
|
"FixtureAdapter"
|
15
15
|
],
|
16
16
|
"license": "MIT",
|
17
|
-
|
18
17
|
"dependencies": {
|
19
18
|
"handlebars": "~1.1.2",
|
20
19
|
"jquery": "2.0.3",
|
@@ -24,7 +23,6 @@
|
|
24
23
|
"qunit": "latest",
|
25
24
|
"jquery-mockjax": "latest"
|
26
25
|
},
|
27
|
-
|
28
26
|
"ignore": [
|
29
27
|
"**/.*",
|
30
28
|
"node_modules",
|
@@ -36,5 +34,9 @@
|
|
36
34
|
"src",
|
37
35
|
"test",
|
38
36
|
"tests"
|
39
|
-
]
|
37
|
+
],
|
38
|
+
"devDependencies": {
|
39
|
+
"sinon": "http://sinonjs.org/releases/sinon-1.10.1.js",
|
40
|
+
"sinon-qunit": "~2.0.0"
|
41
|
+
}
|
40
42
|
}
|
@@ -776,12 +776,10 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
776
776
|
/**
|
777
777
|
Proxy to store's makeFixture method
|
778
778
|
|
779
|
-
@param {String} name name of fixture
|
780
|
-
@param {Object} options fixture options
|
781
|
-
@returns {Object|DS.Model} json or record depending on the adapter type
|
782
779
|
*/
|
783
|
-
make: function (
|
784
|
-
|
780
|
+
make: function () {
|
781
|
+
var store = this.getStore();
|
782
|
+
return store.makeFixture.apply(store, arguments);
|
785
783
|
},
|
786
784
|
|
787
785
|
getStore: function () {
|
@@ -821,57 +819,6 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
821
819
|
},
|
822
820
|
|
823
821
|
|
824
|
-
/**
|
825
|
-
Build the json used for creating or finding a record.
|
826
|
-
|
827
|
-
@param {String} modelName model name like 'user'
|
828
|
-
@param {String} fixture the fixture data
|
829
|
-
@return {Object} json response used for mocking a request
|
830
|
-
*/
|
831
|
-
buildAjaxHttpResponse: function (modelName, fixture) {
|
832
|
-
if (this.usingActiveModelSerializer(modelName)) {
|
833
|
-
this.toSnakeCase(fixture);
|
834
|
-
}
|
835
|
-
var hash = {};
|
836
|
-
hash[modelName] = fixture;
|
837
|
-
return hash;
|
838
|
-
},
|
839
|
-
|
840
|
-
|
841
|
-
_collectArgs: function (args, fromMethod) {
|
842
|
-
var args = Array.prototype.slice.call(arguments);
|
843
|
-
var name = args.shift();
|
844
|
-
if (!name) {
|
845
|
-
throw new Error(fromMethod + " needs a factory name to build");
|
846
|
-
}
|
847
|
-
var succeed = true;
|
848
|
-
if (Ember.typeOf(args[args.length-1]) == 'boolean') {
|
849
|
-
succeed = args.pop();
|
850
|
-
}
|
851
|
-
var opts = {}
|
852
|
-
if (Ember.typeOf(args[args.length-1]) == 'object') {
|
853
|
-
opts = args.pop();
|
854
|
-
}
|
855
|
-
var traits = args; // whatever is left are traits
|
856
|
-
|
857
|
-
return {name: name, traits: traits, opts: opts, succeed: succeed}
|
858
|
-
},
|
859
|
-
|
860
|
-
/**
|
861
|
-
Convert Object's keys to snake case
|
862
|
-
|
863
|
-
@param {Object} fixture to convert
|
864
|
-
*/
|
865
|
-
toSnakeCase: function (fixture) {
|
866
|
-
for (key in fixture) {
|
867
|
-
if (key != Em.String.decamelize(key)) {
|
868
|
-
var value = fixture[key];
|
869
|
-
delete fixture[key];
|
870
|
-
fixture[Em.String.decamelize(key)] = value
|
871
|
-
}
|
872
|
-
}
|
873
|
-
},
|
874
|
-
|
875
822
|
/**
|
876
823
|
Build url for the mockjax call. Proxy to the adapters buildURL method.
|
877
824
|
|
@@ -892,7 +839,6 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
892
839
|
@param {Number} number number of fixtures to create
|
893
840
|
@param {String} trait optional traits (one or more)
|
894
841
|
@param {Object} opts optional fixture options
|
895
|
-
@return {Object} json response
|
896
842
|
*/
|
897
843
|
handleFindMany: function () {
|
898
844
|
var store = this.getStore();
|
@@ -916,7 +862,8 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
916
862
|
@param {String} name name of the fixture ( or model ) to create
|
917
863
|
@param {String} trait optional traits ( one or more )
|
918
864
|
@param {Object} opts optional fixture options
|
919
|
-
@
|
865
|
+
@param {Boolean} succeed optional flag to indicate if the request
|
866
|
+
should succeed ( default is true )
|
920
867
|
*/
|
921
868
|
handleCreate: function () {
|
922
869
|
var args = Array.prototype.slice.call(arguments);
|
@@ -934,8 +881,9 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
934
881
|
|
935
882
|
if (succeed) {
|
936
883
|
var store = this.getStore();
|
937
|
-
// make the
|
884
|
+
// make the record and load it in the store
|
938
885
|
var model = store.makeFixture.apply(store,args);
|
886
|
+
// believe it or not .. this actually works
|
939
887
|
responseJson[modelName]=model;
|
940
888
|
} else {
|
941
889
|
httpOptions.status = 500;
|
@@ -983,8 +931,10 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
983
931
|
|
984
932
|
teardown: function () {
|
985
933
|
FactoryGuy.resetModels(this.getStore());
|
934
|
+
$.mockjax.clear();
|
986
935
|
}
|
987
936
|
});
|
937
|
+
|
988
938
|
/*!
|
989
939
|
* MockJax - jQuery Plugin to Mock Ajax requests
|
990
940
|
*
|
@@ -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=[]}Ember.run(function(){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(){var store=this;var fixture=FactoryGuy.build.apply(FactoryGuy,arguments);var name=arguments[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var modelType=store.modelFor(modelName);if(this.usingFixtureAdapter()){this.setAssociationsForFixtureAdapter(modelType,modelName,fixture);return FactoryGuy.pushFixture(modelType,fixture)}else{return store.makeModel(modelType,fixture)}},makeModel:function(modelType,fixture){var store=this,modelName=store.modelFor(modelType).typeKey,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(){var arr=[];var number=arguments[1];for(var i=0;i<number;i++){arr.push(this.makeFixture.apply(this,arguments))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){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(relationship,name){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,belongsToRecord);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){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,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(relationship,name){if(relationship.kind=="hasMany"){var children=model.get(name)||[];children.forEach(function(child){var belongsToName=self.findRelationshipName("belongsTo",child.constructor,model);if(belongsToName){child.set(belongsToName,model)}})}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(relationship,name){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(relationship,name){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(modelName,fixture){if(this.usingActiveModelSerializer(modelName)){this.toSnakeCase(fixture)}var hash={};hash[modelName]=fixture;return hash},_collectArgs:function(args,fromMethod){var args=Array.prototype.slice.call(arguments);var name=args.shift();if(!name){throw new Error(fromMethod+" needs a factory name to build")}var succeed=true;if(Ember.typeOf(args[args.length-1])=="boolean"){succeed=args.pop()}var opts={};if(Ember.typeOf(args[args.length-1])=="object"){opts=args.pop()}var traits=args;return{name:name,traits:traits,opts:opts,succeed:succeed}},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)},handleFindMany:function(){var store=this.getStore();store.makeList.apply(store,arguments);var name=arguments[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson={};responseJson[modelName]=[];var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET"})},handleCreate:function(){var args=Array.prototype.slice.call(arguments);var succeed=true;if(Ember.typeOf(args[args.length-1])=="boolean"){succeed=args.pop()}var name=args[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var url=this.buildURL(modelName);var responseJson={};var httpOptions={type:"POST"};if(succeed){var store=this.getStore();var model=store.makeFixture.apply(store,args);responseJson[modelName]=model}else{httpOptions.status=500}this.stubEndpointForHttpRequest(url,responseJson,httpOptions)},handleUpdate:function(type,id,succeed){succeed=succeed===undefined?true:succeed;this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"PUT",status:succeed?200:500})},handleDelete:function(type,id,succeed){succeed=succeed===undefined?true:succeed;this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:succeed?200:500})},teardown:function(){FactoryGuy.resetModels(this.getStore())}});(function($){var _ajax=$.ajax,mockHandlers=[],mockedAjaxCalls=[],unmockedAjaxCalls=[],CALLBACK_REGEX=/=\?(&|$)/,jsc=(new Date).getTime();function parseXML(xml){if(window.DOMParser==undefined&&window.ActiveXObject){DOMParser=function(){};DOMParser.prototype.parseFromString=function(xmlString){var doc=new ActiveXObject("Microsoft.XMLDOM");doc.async="false";doc.loadXML(xmlString);return doc}}try{var xmlDoc=(new DOMParser).parseFromString(xml,"text/xml");if($.isXMLDoc(xmlDoc)){var err=$("parsererror",xmlDoc);if(err.length==1){throw new Error("Error: "+$(xmlDoc).text())}}else{throw new Error("Unable to parse XML")}return xmlDoc}catch(e){var msg=e.name==undefined?e:e.name+": "+e.message;$(document).trigger("xmlParseError",[msg]);return undefined}}function isMockDataEqual(mock,live){var identical=true;if(typeof live==="string"){return $.isFunction(mock.test)?mock.test(live):mock==live}$.each(mock,function(k){if(live[k]===undefined){identical=false;return identical}else{if(typeof live[k]==="object"&&live[k]!==null){if(identical&&$.isArray(live[k])){identical=$.isArray(mock[k])&&live[k].length===mock[k].length}identical=identical&&isMockDataEqual(mock[k],live[k])}else{if(mock[k]&&$.isFunction(mock[k].test)){identical=identical&&mock[k].test(live[k])}else{identical=identical&&mock[k]==live[k]}}}});return identical}function isDefaultSetting(handler,property){return handler[property]===$.mockjaxSettings[property]}function getMockForRequest(handler,requestSettings){if($.isFunction(handler)){return handler(requestSettings)}if($.isFunction(handler.url.test)){if(!handler.url.test(requestSettings.url)){return null}}else{var star=handler.url.indexOf("*");if(handler.url!==requestSettings.url&&star===-1||!new RegExp(handler.url.replace(/[-[\]{}()+?.,\\^$|#\s]/g,"\\$&").replace(/\*/g,".+")).test(requestSettings.url)){return null}}if(handler.data){if(!requestSettings.data||!isMockDataEqual(handler.data,requestSettings.data)){return null}}if(handler&&handler.type&&handler.type.toLowerCase()!=requestSettings.type.toLowerCase()){return null}return handler}function parseResponseTimeOpt(responseTime){if($.isArray(responseTime)){var min=responseTime[0];var max=responseTime[1];return typeof min==="number"&&typeof max==="number"?Math.floor(Math.random()*(max-min))+min:null}else{return typeof responseTime==="number"?responseTime:null}}function _xhrSend(mockHandler,requestSettings,origSettings){var process=function(that){return function(){return function(){this.status=mockHandler.status;this.statusText=mockHandler.statusText;this.readyState=1;var finishRequest=function(){this.readyState=4;var onReady;if(requestSettings.dataType=="json"&&typeof mockHandler.responseText=="object"){this.responseText=JSON.stringify(mockHandler.responseText)}else if(requestSettings.dataType=="xml"){if(typeof mockHandler.responseXML=="string"){this.responseXML=parseXML(mockHandler.responseXML);this.responseText=mockHandler.responseXML}else{this.responseXML=mockHandler.responseXML}}else if(typeof mockHandler.responseText==="object"&&mockHandler.responseText!==null){mockHandler.contentType="application/json";this.responseText=JSON.stringify(mockHandler.responseText)}else{this.responseText=mockHandler.responseText}if(typeof mockHandler.status=="number"||typeof mockHandler.status=="string"){this.status=mockHandler.status}if(typeof mockHandler.statusText==="string"){this.statusText=mockHandler.statusText}onReady=this.onreadystatechange||this.onload;if($.isFunction(onReady)){if(mockHandler.isTimeout){this.status=-1}onReady.call(this,mockHandler.isTimeout?"timeout":undefined)}else if(mockHandler.isTimeout){this.status=-1}};if($.isFunction(mockHandler.response)){if(mockHandler.response.length===2){mockHandler.response(origSettings,function(){finishRequest.call(that)});return}else{mockHandler.response(origSettings)}}finishRequest.call(that)}.apply(that)}}(this);if(mockHandler.proxy){_ajax({global:false,url:mockHandler.proxy,type:mockHandler.proxyType,data:mockHandler.data,dataType:requestSettings.dataType==="script"?"text/plain":requestSettings.dataType,complete:function(xhr){mockHandler.responseXML=xhr.responseXML;mockHandler.responseText=xhr.responseText;if(isDefaultSetting(mockHandler,"status")){mockHandler.status=xhr.status}if(isDefaultSetting(mockHandler,"statusText")){mockHandler.statusText=xhr.statusText}this.responseTimer=setTimeout(process,parseResponseTimeOpt(mockHandler.responseTime)||0)}})}else{if(requestSettings.async===false){process()}else{this.responseTimer=setTimeout(process,parseResponseTimeOpt(mockHandler.responseTime)||50)}}}function xhr(mockHandler,requestSettings,origSettings,origHandler){mockHandler=$.extend(true,{},$.mockjaxSettings,mockHandler);if(typeof mockHandler.headers==="undefined"){mockHandler.headers={}}if(typeof requestSettings.headers==="undefined"){requestSettings.headers={}}if(mockHandler.contentType){mockHandler.headers["content-type"]=mockHandler.contentType}return{status:mockHandler.status,statusText:mockHandler.statusText,readyState:1,open:function(){},send:function(){origHandler.fired=true;_xhrSend.call(this,mockHandler,requestSettings,origSettings)},abort:function(){clearTimeout(this.responseTimer)},setRequestHeader:function(header,value){requestSettings.headers[header]=value},getResponseHeader:function(header){if(mockHandler.headers&&mockHandler.headers[header]){return mockHandler.headers[header]}else if(header.toLowerCase()=="last-modified"){return mockHandler.lastModified||(new Date).toString()}else if(header.toLowerCase()=="etag"){return mockHandler.etag||""}else if(header.toLowerCase()=="content-type"){return mockHandler.contentType||"text/plain"}},getAllResponseHeaders:function(){var headers="";if(mockHandler.contentType){mockHandler.headers["Content-Type"]=mockHandler.contentType}$.each(mockHandler.headers,function(k,v){headers+=k+": "+v+"\n"});return headers}}}function processJsonpMock(requestSettings,mockHandler,origSettings){processJsonpUrl(requestSettings);requestSettings.dataType="json";if(requestSettings.data&&CALLBACK_REGEX.test(requestSettings.data)||CALLBACK_REGEX.test(requestSettings.url)){createJsonpCallback(requestSettings,mockHandler,origSettings);var rurl=/^(\w+:)?\/\/([^\/?#]+)/,parts=rurl.exec(requestSettings.url),remote=parts&&(parts[1]&&parts[1]!==location.protocol||parts[2]!==location.host);requestSettings.dataType="script";if(requestSettings.type.toUpperCase()==="GET"&&remote){var newMockReturn=processJsonpRequest(requestSettings,mockHandler,origSettings);if(newMockReturn){return newMockReturn}else{return true}}}return null}function processJsonpUrl(requestSettings){if(requestSettings.type.toUpperCase()==="GET"){if(!CALLBACK_REGEX.test(requestSettings.url)){requestSettings.url+=(/\?/.test(requestSettings.url)?"&":"?")+(requestSettings.jsonp||"callback")+"=?"}}else if(!requestSettings.data||!CALLBACK_REGEX.test(requestSettings.data)){requestSettings.data=(requestSettings.data?requestSettings.data+"&":"")+(requestSettings.jsonp||"callback")+"=?"}}function processJsonpRequest(requestSettings,mockHandler,origSettings){var callbackContext=origSettings&&origSettings.context||requestSettings,newMock=null;if(mockHandler.response&&$.isFunction(mockHandler.response)){mockHandler.response(origSettings)}else{if(typeof mockHandler.responseText==="object"){$.globalEval("("+JSON.stringify(mockHandler.responseText)+")")}else{$.globalEval("("+mockHandler.responseText+")")}}setTimeout(function(){jsonpSuccess(requestSettings,callbackContext,mockHandler);jsonpComplete(requestSettings,callbackContext,mockHandler)},parseResponseTimeOpt(mockHandler.responseTime)||0);if($.Deferred){newMock=new $.Deferred;if(typeof mockHandler.responseText=="object"){newMock.resolveWith(callbackContext,[mockHandler.responseText])}else{newMock.resolveWith(callbackContext,[$.parseJSON(mockHandler.responseText)])}}return newMock}function createJsonpCallback(requestSettings,mockHandler,origSettings){var callbackContext=origSettings&&origSettings.context||requestSettings;var jsonp=requestSettings.jsonpCallback||"jsonp"+jsc++;if(requestSettings.data){requestSettings.data=(requestSettings.data+"").replace(CALLBACK_REGEX,"="+jsonp+"$1")}requestSettings.url=requestSettings.url.replace(CALLBACK_REGEX,"="+jsonp+"$1");window[jsonp]=window[jsonp]||function(tmp){data=tmp;jsonpSuccess(requestSettings,callbackContext,mockHandler);jsonpComplete(requestSettings,callbackContext,mockHandler);window[jsonp]=undefined;try{delete window[jsonp]}catch(e){}if(head){head.removeChild(script)}}}function jsonpSuccess(requestSettings,callbackContext,mockHandler){if(requestSettings.success){requestSettings.success.call(callbackContext,mockHandler.responseText||"",status,{})}if(requestSettings.global){(requestSettings.context?$(requestSettings.context):$.event).trigger("ajaxSuccess",[{},requestSettings])}}function jsonpComplete(requestSettings,callbackContext){if(requestSettings.complete){requestSettings.complete.call(callbackContext,{},status)}if(requestSettings.global){(requestSettings.context?$(requestSettings.context):$.event).trigger("ajaxComplete",[{},requestSettings])}if(requestSettings.global&&!--$.active){$.event.trigger("ajaxStop")}}function handleAjax(url,origSettings){var mockRequest,requestSettings,mockHandler,overrideCallback;if(typeof url==="object"){origSettings=url;url=undefined}else{origSettings=origSettings||{};origSettings.url=url}requestSettings=$.extend(true,{},$.ajaxSettings,origSettings);overrideCallback=function(action,mockHandler){var origHandler=origSettings[action.toLowerCase()];return function(){if($.isFunction(origHandler)){origHandler.apply(this,[].slice.call(arguments))}mockHandler["onAfter"+action]()}};for(var k=0;k<mockHandlers.length;k++){if(!mockHandlers[k]){continue}mockHandler=getMockForRequest(mockHandlers[k],requestSettings);if(!mockHandler){continue}mockedAjaxCalls.push(requestSettings);$.mockjaxSettings.log(mockHandler,requestSettings);if(requestSettings.dataType&&requestSettings.dataType.toUpperCase()==="JSONP"){if(mockRequest=processJsonpMock(requestSettings,mockHandler,origSettings)){return mockRequest}}mockHandler.cache=requestSettings.cache;mockHandler.timeout=requestSettings.timeout;mockHandler.global=requestSettings.global;if(mockHandler.isTimeout){if(mockHandler.responseTime>1){origSettings.timeout=mockHandler.responseTime-1}else{mockHandler.responseTime=2;origSettings.timeout=1}mockHandler.isTimeout=false}if($.isFunction(mockHandler.onAfterSuccess)){origSettings.success=overrideCallback("Success",mockHandler)}if($.isFunction(mockHandler.onAfterError)){origSettings.error=overrideCallback("Error",mockHandler)}if($.isFunction(mockHandler.onAfterComplete)){origSettings.complete=overrideCallback("Complete",mockHandler)}copyUrlParameters(mockHandler,origSettings);(function(mockHandler,requestSettings,origSettings,origHandler){mockRequest=_ajax.call($,$.extend(true,{},origSettings,{xhr:function(){return xhr(mockHandler,requestSettings,origSettings,origHandler)}}))})(mockHandler,requestSettings,origSettings,mockHandlers[k]);return mockRequest}unmockedAjaxCalls.push(origSettings);if($.mockjaxSettings.throwUnmocked===true){throw new Error("AJAX not mocked: "+origSettings.url)}else{return _ajax.apply($,[origSettings])}}function copyUrlParameters(mockHandler,origSettings){if(!(mockHandler.url instanceof RegExp)){return}if(!mockHandler.hasOwnProperty("urlParams")){return}var captures=mockHandler.url.exec(origSettings.url);if(captures.length===1){return}captures.shift();var i=0,capturesLength=captures.length,paramsLength=mockHandler.urlParams.length,maxIterations=Math.min(capturesLength,paramsLength),paramValues={};for(i;i<maxIterations;i++){var key=mockHandler.urlParams[i];paramValues[key]=captures[i]}origSettings.urlParams=paramValues}$.extend({ajax:handleAjax});$.mockjaxSettings={log:function(mockHandler,requestSettings){if(mockHandler.logging===false||typeof mockHandler.logging==="undefined"&&$.mockjaxSettings.logging===false){return}if(window.console&&console.log){var message="MOCK "+requestSettings.type.toUpperCase()+": "+requestSettings.url;var request=$.extend({},requestSettings);if(typeof console.log==="function"){console.log(message,request)}else{try{console.log(message+" "+JSON.stringify(request))}catch(e){console.log(message)}}}},logging:true,status:200,statusText:"OK",responseTime:500,isTimeout:false,throwUnmocked:false,contentType:"text/plain",response:"",responseText:"",responseXML:"",proxy:"",proxyType:"GET",lastModified:null,etag:"",headers:{etag:"IJF@H#@923uf8023hFO@I#H#","content-type":"text/plain"}};$.mockjax=function(settings){var i=mockHandlers.length;mockHandlers[i]=settings;return i};$.mockjax.clear=function(i){if(arguments.length==1){mockHandlers[i]=null}else{mockHandlers=[]}mockedAjaxCalls=[];unmockedAjaxCalls=[]};$.mockjaxClear=function(i){window.console&&window.console.warn&&window.console.warn("DEPRECATED: The $.mockjaxClear() method has been deprecated in 1.6.0. Please use $.mockjax.clear() as the older function will be removed soon!");$.mockjax.clear()};$.mockjax.handler=function(i){if(arguments.length==1){return mockHandlers[i]}};$.mockjax.mockedAjaxCalls=function(){return mockedAjaxCalls};$.mockjax.unfiredHandlers=function(){var results=[];for(var i=0,len=mockHandlers.length;i<len;i++){var handler=mockHandlers[i];if(handler!==null&&!handler.fired){results.push(handler)}}return results};$.mockjax.unmockedAjaxCalls=function(){return unmockedAjaxCalls}})(jQuery);
|
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=[]}Ember.run(function(){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(){var store=this;var fixture=FactoryGuy.build.apply(FactoryGuy,arguments);var name=arguments[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var modelType=store.modelFor(modelName);if(this.usingFixtureAdapter()){this.setAssociationsForFixtureAdapter(modelType,modelName,fixture);return FactoryGuy.pushFixture(modelType,fixture)}else{return store.makeModel(modelType,fixture)}},makeModel:function(modelType,fixture){var store=this,modelName=store.modelFor(modelType).typeKey,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(){var arr=[];var number=arguments[1];for(var i=0;i<number;i++){arr.push(this.makeFixture.apply(this,arguments))}return arr},setAssociationsForFixtureAdapter:function(modelType,modelName,fixture){var self=this;var adapter=this.adapterFor("application");Ember.get(modelType,"relationshipsByName").forEach(function(relationship,name){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(relationship,name){if(relationship.kind=="belongsTo"){var belongsToRecord=fixture[relationship.key];if(Ember.typeOf(belongsToRecord)=="object"){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,belongsToRecord);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){store.findEmbeddedAssociationsForRESTAdapter(relationship.type,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(relationship,name){if(relationship.kind=="hasMany"){var children=model.get(name)||[];children.forEach(function(child){var belongsToName=self.findRelationshipName("belongsTo",child.constructor,model);if(belongsToName){child.set(belongsToName,model)}})}})},findRelationshipName:function(kind,belongToModelType,childModel){var relationshipName;Ember.get(belongToModelType,"relationshipsByName").forEach(function(relationship,name){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(relationship,name){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(){var store=this.getStore();return store.makeFixture.apply(store,arguments)},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)},buildURL:function(type,id){return this.getStore().adapterFor("application").buildURL(type,id)},handleFindMany:function(){var store=this.getStore();store.makeList.apply(store,arguments);var name=arguments[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var responseJson={};responseJson[modelName]=[];var url=this.buildURL(modelName);this.stubEndpointForHttpRequest(url,responseJson,{type:"GET"})},handleCreate:function(){var args=Array.prototype.slice.call(arguments);var succeed=true;if(Ember.typeOf(args[args.length-1])=="boolean"){succeed=args.pop()}var name=args[0];var modelName=FactoryGuy.lookupModelForFixtureName(name);var url=this.buildURL(modelName);var responseJson={};var httpOptions={type:"POST"};if(succeed){var store=this.getStore();var model=store.makeFixture.apply(store,args);responseJson[modelName]=model}else{httpOptions.status=500}this.stubEndpointForHttpRequest(url,responseJson,httpOptions)},handleUpdate:function(type,id,succeed){succeed=succeed===undefined?true:succeed;this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"PUT",status:succeed?200:500})},handleDelete:function(type,id,succeed){succeed=succeed===undefined?true:succeed;this.stubEndpointForHttpRequest(this.buildURL(type,id),{},{type:"DELETE",status:succeed?200:500})},teardown:function(){FactoryGuy.resetModels(this.getStore());$.mockjax.clear()}});(function($){var _ajax=$.ajax,mockHandlers=[],mockedAjaxCalls=[],unmockedAjaxCalls=[],CALLBACK_REGEX=/=\?(&|$)/,jsc=(new Date).getTime();function parseXML(xml){if(window.DOMParser==undefined&&window.ActiveXObject){DOMParser=function(){};DOMParser.prototype.parseFromString=function(xmlString){var doc=new ActiveXObject("Microsoft.XMLDOM");doc.async="false";doc.loadXML(xmlString);return doc}}try{var xmlDoc=(new DOMParser).parseFromString(xml,"text/xml");if($.isXMLDoc(xmlDoc)){var err=$("parsererror",xmlDoc);if(err.length==1){throw new Error("Error: "+$(xmlDoc).text())}}else{throw new Error("Unable to parse XML")}return xmlDoc}catch(e){var msg=e.name==undefined?e:e.name+": "+e.message;$(document).trigger("xmlParseError",[msg]);return undefined}}function isMockDataEqual(mock,live){var identical=true;if(typeof live==="string"){return $.isFunction(mock.test)?mock.test(live):mock==live}$.each(mock,function(k){if(live[k]===undefined){identical=false;return identical}else{if(typeof live[k]==="object"&&live[k]!==null){if(identical&&$.isArray(live[k])){identical=$.isArray(mock[k])&&live[k].length===mock[k].length}identical=identical&&isMockDataEqual(mock[k],live[k])}else{if(mock[k]&&$.isFunction(mock[k].test)){identical=identical&&mock[k].test(live[k])}else{identical=identical&&mock[k]==live[k]}}}});return identical}function isDefaultSetting(handler,property){return handler[property]===$.mockjaxSettings[property]}function getMockForRequest(handler,requestSettings){if($.isFunction(handler)){return handler(requestSettings)}if($.isFunction(handler.url.test)){if(!handler.url.test(requestSettings.url)){return null}}else{var star=handler.url.indexOf("*");if(handler.url!==requestSettings.url&&star===-1||!new RegExp(handler.url.replace(/[-[\]{}()+?.,\\^$|#\s]/g,"\\$&").replace(/\*/g,".+")).test(requestSettings.url)){return null}}if(handler.data){if(!requestSettings.data||!isMockDataEqual(handler.data,requestSettings.data)){return null}}if(handler&&handler.type&&handler.type.toLowerCase()!=requestSettings.type.toLowerCase()){return null}return handler}function parseResponseTimeOpt(responseTime){if($.isArray(responseTime)){var min=responseTime[0];var max=responseTime[1];return typeof min==="number"&&typeof max==="number"?Math.floor(Math.random()*(max-min))+min:null}else{return typeof responseTime==="number"?responseTime:null}}function _xhrSend(mockHandler,requestSettings,origSettings){var process=function(that){return function(){return function(){this.status=mockHandler.status;this.statusText=mockHandler.statusText;this.readyState=1;var finishRequest=function(){this.readyState=4;var onReady;if(requestSettings.dataType=="json"&&typeof mockHandler.responseText=="object"){this.responseText=JSON.stringify(mockHandler.responseText)}else if(requestSettings.dataType=="xml"){if(typeof mockHandler.responseXML=="string"){this.responseXML=parseXML(mockHandler.responseXML);this.responseText=mockHandler.responseXML}else{this.responseXML=mockHandler.responseXML}}else if(typeof mockHandler.responseText==="object"&&mockHandler.responseText!==null){mockHandler.contentType="application/json";this.responseText=JSON.stringify(mockHandler.responseText)}else{this.responseText=mockHandler.responseText}if(typeof mockHandler.status=="number"||typeof mockHandler.status=="string"){this.status=mockHandler.status}if(typeof mockHandler.statusText==="string"){this.statusText=mockHandler.statusText}onReady=this.onreadystatechange||this.onload;if($.isFunction(onReady)){if(mockHandler.isTimeout){this.status=-1}onReady.call(this,mockHandler.isTimeout?"timeout":undefined)}else if(mockHandler.isTimeout){this.status=-1}};if($.isFunction(mockHandler.response)){if(mockHandler.response.length===2){mockHandler.response(origSettings,function(){finishRequest.call(that)});return}else{mockHandler.response(origSettings)}}finishRequest.call(that)}.apply(that)}}(this);if(mockHandler.proxy){_ajax({global:false,url:mockHandler.proxy,type:mockHandler.proxyType,data:mockHandler.data,dataType:requestSettings.dataType==="script"?"text/plain":requestSettings.dataType,complete:function(xhr){mockHandler.responseXML=xhr.responseXML;mockHandler.responseText=xhr.responseText;if(isDefaultSetting(mockHandler,"status")){mockHandler.status=xhr.status}if(isDefaultSetting(mockHandler,"statusText")){mockHandler.statusText=xhr.statusText}this.responseTimer=setTimeout(process,parseResponseTimeOpt(mockHandler.responseTime)||0)}})}else{if(requestSettings.async===false){process()}else{this.responseTimer=setTimeout(process,parseResponseTimeOpt(mockHandler.responseTime)||50)}}}function xhr(mockHandler,requestSettings,origSettings,origHandler){mockHandler=$.extend(true,{},$.mockjaxSettings,mockHandler);if(typeof mockHandler.headers==="undefined"){mockHandler.headers={}}if(typeof requestSettings.headers==="undefined"){requestSettings.headers={}}if(mockHandler.contentType){mockHandler.headers["content-type"]=mockHandler.contentType}return{status:mockHandler.status,statusText:mockHandler.statusText,readyState:1,open:function(){},send:function(){origHandler.fired=true;_xhrSend.call(this,mockHandler,requestSettings,origSettings)},abort:function(){clearTimeout(this.responseTimer)},setRequestHeader:function(header,value){requestSettings.headers[header]=value},getResponseHeader:function(header){if(mockHandler.headers&&mockHandler.headers[header]){return mockHandler.headers[header]}else if(header.toLowerCase()=="last-modified"){return mockHandler.lastModified||(new Date).toString()}else if(header.toLowerCase()=="etag"){return mockHandler.etag||""}else if(header.toLowerCase()=="content-type"){return mockHandler.contentType||"text/plain"}},getAllResponseHeaders:function(){var headers="";if(mockHandler.contentType){mockHandler.headers["Content-Type"]=mockHandler.contentType}$.each(mockHandler.headers,function(k,v){headers+=k+": "+v+"\n"});return headers}}}function processJsonpMock(requestSettings,mockHandler,origSettings){processJsonpUrl(requestSettings);requestSettings.dataType="json";if(requestSettings.data&&CALLBACK_REGEX.test(requestSettings.data)||CALLBACK_REGEX.test(requestSettings.url)){createJsonpCallback(requestSettings,mockHandler,origSettings);var rurl=/^(\w+:)?\/\/([^\/?#]+)/,parts=rurl.exec(requestSettings.url),remote=parts&&(parts[1]&&parts[1]!==location.protocol||parts[2]!==location.host);requestSettings.dataType="script";if(requestSettings.type.toUpperCase()==="GET"&&remote){var newMockReturn=processJsonpRequest(requestSettings,mockHandler,origSettings);if(newMockReturn){return newMockReturn}else{return true}}}return null}function processJsonpUrl(requestSettings){if(requestSettings.type.toUpperCase()==="GET"){if(!CALLBACK_REGEX.test(requestSettings.url)){requestSettings.url+=(/\?/.test(requestSettings.url)?"&":"?")+(requestSettings.jsonp||"callback")+"=?"}}else if(!requestSettings.data||!CALLBACK_REGEX.test(requestSettings.data)){requestSettings.data=(requestSettings.data?requestSettings.data+"&":"")+(requestSettings.jsonp||"callback")+"=?"}}function processJsonpRequest(requestSettings,mockHandler,origSettings){var callbackContext=origSettings&&origSettings.context||requestSettings,newMock=null;if(mockHandler.response&&$.isFunction(mockHandler.response)){mockHandler.response(origSettings)}else{if(typeof mockHandler.responseText==="object"){$.globalEval("("+JSON.stringify(mockHandler.responseText)+")")}else{$.globalEval("("+mockHandler.responseText+")")}}setTimeout(function(){jsonpSuccess(requestSettings,callbackContext,mockHandler);jsonpComplete(requestSettings,callbackContext,mockHandler)},parseResponseTimeOpt(mockHandler.responseTime)||0);if($.Deferred){newMock=new $.Deferred;if(typeof mockHandler.responseText=="object"){newMock.resolveWith(callbackContext,[mockHandler.responseText])}else{newMock.resolveWith(callbackContext,[$.parseJSON(mockHandler.responseText)])}}return newMock}function createJsonpCallback(requestSettings,mockHandler,origSettings){var callbackContext=origSettings&&origSettings.context||requestSettings;var jsonp=requestSettings.jsonpCallback||"jsonp"+jsc++;if(requestSettings.data){requestSettings.data=(requestSettings.data+"").replace(CALLBACK_REGEX,"="+jsonp+"$1")}requestSettings.url=requestSettings.url.replace(CALLBACK_REGEX,"="+jsonp+"$1");window[jsonp]=window[jsonp]||function(tmp){data=tmp;jsonpSuccess(requestSettings,callbackContext,mockHandler);jsonpComplete(requestSettings,callbackContext,mockHandler);window[jsonp]=undefined;try{delete window[jsonp]}catch(e){}if(head){head.removeChild(script)}}}function jsonpSuccess(requestSettings,callbackContext,mockHandler){if(requestSettings.success){requestSettings.success.call(callbackContext,mockHandler.responseText||"",status,{})}if(requestSettings.global){(requestSettings.context?$(requestSettings.context):$.event).trigger("ajaxSuccess",[{},requestSettings])}}function jsonpComplete(requestSettings,callbackContext){if(requestSettings.complete){requestSettings.complete.call(callbackContext,{},status)}if(requestSettings.global){(requestSettings.context?$(requestSettings.context):$.event).trigger("ajaxComplete",[{},requestSettings])}if(requestSettings.global&&!--$.active){$.event.trigger("ajaxStop")}}function handleAjax(url,origSettings){var mockRequest,requestSettings,mockHandler,overrideCallback;if(typeof url==="object"){origSettings=url;url=undefined}else{origSettings=origSettings||{};origSettings.url=url}requestSettings=$.extend(true,{},$.ajaxSettings,origSettings);overrideCallback=function(action,mockHandler){var origHandler=origSettings[action.toLowerCase()];return function(){if($.isFunction(origHandler)){origHandler.apply(this,[].slice.call(arguments))}mockHandler["onAfter"+action]()}};for(var k=0;k<mockHandlers.length;k++){if(!mockHandlers[k]){continue}mockHandler=getMockForRequest(mockHandlers[k],requestSettings);if(!mockHandler){continue}mockedAjaxCalls.push(requestSettings);$.mockjaxSettings.log(mockHandler,requestSettings);if(requestSettings.dataType&&requestSettings.dataType.toUpperCase()==="JSONP"){if(mockRequest=processJsonpMock(requestSettings,mockHandler,origSettings)){return mockRequest}}mockHandler.cache=requestSettings.cache;mockHandler.timeout=requestSettings.timeout;mockHandler.global=requestSettings.global;if(mockHandler.isTimeout){if(mockHandler.responseTime>1){origSettings.timeout=mockHandler.responseTime-1}else{mockHandler.responseTime=2;origSettings.timeout=1}mockHandler.isTimeout=false}if($.isFunction(mockHandler.onAfterSuccess)){origSettings.success=overrideCallback("Success",mockHandler)}if($.isFunction(mockHandler.onAfterError)){origSettings.error=overrideCallback("Error",mockHandler)}if($.isFunction(mockHandler.onAfterComplete)){origSettings.complete=overrideCallback("Complete",mockHandler)}copyUrlParameters(mockHandler,origSettings);(function(mockHandler,requestSettings,origSettings,origHandler){mockRequest=_ajax.call($,$.extend(true,{},origSettings,{xhr:function(){return xhr(mockHandler,requestSettings,origSettings,origHandler)}}))})(mockHandler,requestSettings,origSettings,mockHandlers[k]);return mockRequest}unmockedAjaxCalls.push(origSettings);if($.mockjaxSettings.throwUnmocked===true){throw new Error("AJAX not mocked: "+origSettings.url)}else{return _ajax.apply($,[origSettings])}}function copyUrlParameters(mockHandler,origSettings){if(!(mockHandler.url instanceof RegExp)){return}if(!mockHandler.hasOwnProperty("urlParams")){return}var captures=mockHandler.url.exec(origSettings.url);if(captures.length===1){return}captures.shift();var i=0,capturesLength=captures.length,paramsLength=mockHandler.urlParams.length,maxIterations=Math.min(capturesLength,paramsLength),paramValues={};for(i;i<maxIterations;i++){var key=mockHandler.urlParams[i];paramValues[key]=captures[i]}origSettings.urlParams=paramValues}$.extend({ajax:handleAjax});$.mockjaxSettings={log:function(mockHandler,requestSettings){if(mockHandler.logging===false||typeof mockHandler.logging==="undefined"&&$.mockjaxSettings.logging===false){return}if(window.console&&console.log){var message="MOCK "+requestSettings.type.toUpperCase()+": "+requestSettings.url;var request=$.extend({},requestSettings);if(typeof console.log==="function"){console.log(message,request)}else{try{console.log(message+" "+JSON.stringify(request))}catch(e){console.log(message)}}}},logging:true,status:200,statusText:"OK",responseTime:500,isTimeout:false,throwUnmocked:false,contentType:"text/plain",response:"",responseText:"",responseXML:"",proxy:"",proxyType:"GET",lastModified:null,etag:"",headers:{etag:"IJF@H#@923uf8023hFO@I#H#","content-type":"text/plain"}};$.mockjax=function(settings){var i=mockHandlers.length;mockHandlers[i]=settings;return i};$.mockjax.clear=function(i){if(arguments.length==1){mockHandlers[i]=null}else{mockHandlers=[]}mockedAjaxCalls=[];unmockedAjaxCalls=[]};$.mockjaxClear=function(i){window.console&&window.console.warn&&window.console.warn("DEPRECATED: The $.mockjaxClear() method has been deprecated in 1.6.0. Please use $.mockjax.clear() as the older function will be removed soon!");$.mockjax.clear()};$.mockjax.handler=function(i){if(arguments.length==1){return mockHandlers[i]}};$.mockjax.mockedAjaxCalls=function(){return mockedAjaxCalls};$.mockjax.unfiredHandlers=function(){var results=[];for(var i=0,len=mockHandlers.length;i<len;i++){var handler=mockHandlers[i];if(handler!==null&&!handler.fired){results.push(handler)}}return results};$.mockjax.unmockedAjaxCalls=function(){return unmockedAjaxCalls}})(jQuery);
|
@@ -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.6"
|
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
@@ -36,12 +36,10 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
36
36
|
/**
|
37
37
|
Proxy to store's makeFixture method
|
38
38
|
|
39
|
-
@param {String} name name of fixture
|
40
|
-
@param {Object} options fixture options
|
41
|
-
@returns {Object|DS.Model} json or record depending on the adapter type
|
42
39
|
*/
|
43
|
-
make: function (
|
44
|
-
|
40
|
+
make: function () {
|
41
|
+
var store = this.getStore();
|
42
|
+
return store.makeFixture.apply(store, arguments);
|
45
43
|
},
|
46
44
|
|
47
45
|
getStore: function () {
|
@@ -81,57 +79,6 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
81
79
|
},
|
82
80
|
|
83
81
|
|
84
|
-
/**
|
85
|
-
Build the json used for creating or finding a record.
|
86
|
-
|
87
|
-
@param {String} modelName model name like 'user'
|
88
|
-
@param {String} fixture the fixture data
|
89
|
-
@return {Object} json response used for mocking a request
|
90
|
-
*/
|
91
|
-
buildAjaxHttpResponse: function (modelName, fixture) {
|
92
|
-
if (this.usingActiveModelSerializer(modelName)) {
|
93
|
-
this.toSnakeCase(fixture);
|
94
|
-
}
|
95
|
-
var hash = {};
|
96
|
-
hash[modelName] = fixture;
|
97
|
-
return hash;
|
98
|
-
},
|
99
|
-
|
100
|
-
|
101
|
-
_collectArgs: function (args, fromMethod) {
|
102
|
-
var args = Array.prototype.slice.call(arguments);
|
103
|
-
var name = args.shift();
|
104
|
-
if (!name) {
|
105
|
-
throw new Error(fromMethod + " needs a factory name to build");
|
106
|
-
}
|
107
|
-
var succeed = true;
|
108
|
-
if (Ember.typeOf(args[args.length-1]) == 'boolean') {
|
109
|
-
succeed = args.pop();
|
110
|
-
}
|
111
|
-
var opts = {}
|
112
|
-
if (Ember.typeOf(args[args.length-1]) == 'object') {
|
113
|
-
opts = args.pop();
|
114
|
-
}
|
115
|
-
var traits = args; // whatever is left are traits
|
116
|
-
|
117
|
-
return {name: name, traits: traits, opts: opts, succeed: succeed}
|
118
|
-
},
|
119
|
-
|
120
|
-
/**
|
121
|
-
Convert Object's keys to snake case
|
122
|
-
|
123
|
-
@param {Object} fixture to convert
|
124
|
-
*/
|
125
|
-
toSnakeCase: function (fixture) {
|
126
|
-
for (key in fixture) {
|
127
|
-
if (key != Em.String.decamelize(key)) {
|
128
|
-
var value = fixture[key];
|
129
|
-
delete fixture[key];
|
130
|
-
fixture[Em.String.decamelize(key)] = value
|
131
|
-
}
|
132
|
-
}
|
133
|
-
},
|
134
|
-
|
135
82
|
/**
|
136
83
|
Build url for the mockjax call. Proxy to the adapters buildURL method.
|
137
84
|
|
@@ -152,7 +99,6 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
152
99
|
@param {Number} number number of fixtures to create
|
153
100
|
@param {String} trait optional traits (one or more)
|
154
101
|
@param {Object} opts optional fixture options
|
155
|
-
@return {Object} json response
|
156
102
|
*/
|
157
103
|
handleFindMany: function () {
|
158
104
|
var store = this.getStore();
|
@@ -176,7 +122,8 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
176
122
|
@param {String} name name of the fixture ( or model ) to create
|
177
123
|
@param {String} trait optional traits ( one or more )
|
178
124
|
@param {Object} opts optional fixture options
|
179
|
-
@
|
125
|
+
@param {Boolean} succeed optional flag to indicate if the request
|
126
|
+
should succeed ( default is true )
|
180
127
|
*/
|
181
128
|
handleCreate: function () {
|
182
129
|
var args = Array.prototype.slice.call(arguments);
|
@@ -194,8 +141,9 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
194
141
|
|
195
142
|
if (succeed) {
|
196
143
|
var store = this.getStore();
|
197
|
-
// make the
|
144
|
+
// make the record and load it in the store
|
198
145
|
var model = store.makeFixture.apply(store,args);
|
146
|
+
// believe it or not .. this actually works
|
199
147
|
responseJson[modelName]=model;
|
200
148
|
} else {
|
201
149
|
httpOptions.status = 500;
|
@@ -243,5 +191,6 @@ FactoryGuyTestMixin = Em.Mixin.create({
|
|
243
191
|
|
244
192
|
teardown: function () {
|
245
193
|
FactoryGuy.resetModels(this.getStore());
|
194
|
+
$.mockjax.clear();
|
246
195
|
}
|
247
|
-
});
|
196
|
+
});
|
@@ -31,7 +31,6 @@ module('FactoryGuyTestMixin (using mockjax) with DS.RESTAdapter', {
|
|
31
31
|
},
|
32
32
|
teardown: function () {
|
33
33
|
testHelper.teardown();
|
34
|
-
$.mockjaxClear();
|
35
34
|
}
|
36
35
|
});
|
37
36
|
|
@@ -100,14 +99,13 @@ module('FactoryGuyTestMixin (using mockjax) with DS.ActiveModelAdapter', {
|
|
100
99
|
},
|
101
100
|
teardown: function () {
|
102
101
|
testHelper.teardown();
|
103
|
-
$.mockjaxClear();
|
104
102
|
}
|
105
103
|
});
|
106
104
|
|
107
105
|
|
108
106
|
/////// handleCreate //////////
|
109
107
|
|
110
|
-
asyncTest("#handleCreate the basic", function() {
|
108
|
+
asyncTest("#handleCreate the basic", function() {
|
111
109
|
testHelper.handleCreate('profile')
|
112
110
|
|
113
111
|
store.createRecord('profile').save().then(function(profile) {
|
@@ -118,7 +116,7 @@ asyncTest("#handleCreate the basic", function() {
|
|
118
116
|
});
|
119
117
|
|
120
118
|
asyncTest("#handleCreate with model that has camelCase attribute", function() {
|
121
|
-
testHelper.handleCreate('profile', {camelCaseDescription: 'description'})
|
119
|
+
testHelper.handleCreate('profile', 'with_company', {camelCaseDescription: 'description'})
|
122
120
|
|
123
121
|
store.createRecord('profile').save().then(function(profile) {
|
124
122
|
ok(profile.get('camelCaseDescription') == 'description')
|