ember-data-factory-guy 0.7.5 → 0.7.6
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 +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')
|