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.
This commit is contained in:
Anthony Lieuallen 2011-03-22 13:51:48 -04:00 committed by Igor Minar
parent 4da65d0e8c
commit 94514a91f8
2 changed files with 23 additions and 7 deletions

View file

@ -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 {

View file

@ -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});