diff options
| -rw-r--r-- | src/Resource.js | 16 | ||||
| -rw-r--r-- | test/ResourceSpec.js | 14 |
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}); |
