diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 2498bdf3a43a..eafa574700e9 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -488,7 +488,7 @@ angular.module('ngResource', ['ng']). value.push(new Resource(item)); }); } else { - copy(data, value); + if(data !== value) copy(data, value); value.$promise = promise; } } diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index d13156b3fcbc..29b2b4836d30 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -430,6 +430,21 @@ describe("resource", function() { expect(idBefore).toEqual(cc.id); }); + it('should not throw if response.data is the resource object', function() { + var data = {id:{key:123}, number:'9876'}; + $httpBackend.expect('GET', '/CreditCard/123').respond(data); + + var cc = CreditCard.get({id:123}); + $httpBackend.flush(); + expect(cc instanceof CreditCard).toBe(true); + + $httpBackend.expect('POST', '/CreditCard/123', angular.toJson(data)).respond(cc); + + expect(function() { + cc.$save(); + $httpBackend.flush(); + }).not.toThrow(); + }); it('should bind default parameters', function() { $httpBackend.expect('GET', '/CreditCard/123.visa?minimum=0.05').respond({id: 123});