aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony Lieuallen2011-03-22 13:51:48 -0400
committerIgor Minar2011-03-29 00:25:22 -0700
commit94514a91f8e352e97c5eb44cdace29643e57f9d6 (patch)
tree4e78d1258b2adbddc5ee9e43d1a39ea63d35fdf3
parent4da65d0e8c6a3bfbe5b2c4ad5708a39e750f739a (diff)
downloadangular.js-94514a91f8e352e97c5eb44cdace29643e57f9d6.tar.bz2
Don't mutate resource if server responded with no body
If the server provides response with no body to a resource request, resource should not mutate the resource model in the callback.
-rw-r--r--src/Resource.js16
-rw-r--r--test/ResourceSpec.js14
2 files changed, 23 insertions, 7 deletions
diff --git a/src/Resource.js b/src/Resource.js
index b686d930..ade110db 100644
--- a/src/Resource.js
+++ b/src/Resource.js
@@ -97,13 +97,15 @@ ResourceFactory.prototype = {
data,
function(status, response, clear) {
if (status == 200) {
- if (action.isArray) {
- value.length = 0;
- forEach(response, function(item){
- value.push(new Resource(item));
- });
- } else {
- copy(response, value);
+ if (response) {
+ if (action.isArray) {
+ value.length = 0;
+ forEach(response, function(item){
+ value.push(new Resource(item));
+ });
+ } else {
+ copy(response, value);
+ }
}
(callback||noop)(value);
} else {
diff --git a/test/ResourceSpec.js b/test/ResourceSpec.js
index 633fd605..df5b624f 100644
--- a/test/ResourceSpec.js
+++ b/test/ResourceSpec.js
@@ -177,6 +177,20 @@ describe("resource", function() {
expect(callback).wasCalledWith(cc);
});
+ it('should not mutate the resource object if response contains no body', function(){
+ var data = {id:{key:123}, number:'9876'};
+ xhr.expectGET("/CreditCard/123").respond(data);
+ var cc = CreditCard.get({id:123});
+ xhr.flush();
+ expect(cc instanceof CreditCard).toBeTruthy();
+ var idBefore = cc.id;
+
+ xhr.expectPOST("/CreditCard/123", data).respond('');
+ cc.$save();
+ xhr.flush();
+ expect(idBefore).toEqual(cc.id);
+ });
+
it('should bind default parameters', function(){
xhr.expectGET('/CreditCard/123.visa?minimum=0.05').respond({id:123});
var Visa = CreditCard.bind({verb:'.visa', minimum:0.05});