fix($resource): pass transformed value to both callbacks and promises

Closes #3817
This commit is contained in:
jankuca 2013-08-30 16:19:40 -07:00 committed by Brian Ford
parent 5b8c78843e
commit e36e28ebd4
2 changed files with 41 additions and 4 deletions

View file

@ -492,8 +492,6 @@ angular.module('ngResource', ['ng']).
value.$resolved = true;
(success||noop)(value, response.headers);
response.resource = value;
return response;
@ -503,8 +501,15 @@ angular.module('ngResource', ['ng']).
(error||noop)(response);
return $q.reject(response);
}).then(responseInterceptor, responseErrorInterceptor);
});
promise = promise.then(
function(response) {
var value = responseInterceptor(response);
(success||noop)(value, response.headers);
return value;
},
responseErrorInterceptor);
if (!isInstanceCall) {
// we are creating instance / collection

View file

@ -630,6 +630,38 @@ describe("resource", function() {
expect(cc.url).toBe('/new-id');
});
it('should pass the same transformed value to success callbacks and to promises', function() {
$httpBackend.expect('GET', '/CreditCard').respond(200, { value: 'original' });
var transformResponse = function (response) {
return { value: 'transformed' };
};
var CreditCard = $resource('/CreditCard', {}, {
call: {
method: 'get',
interceptor: { response: transformResponse }
}
});
var successValue,
promiseValue;
var cc = new CreditCard({ name: 'Me' });
var req = cc.$call({}, function (result) {
successValue = result;
});
req.then(function (result) {
promiseValue = result;
});
$httpBackend.flush();
expect(successValue).toEqual({ value: 'transformed' });
expect(promiseValue).toEqual({ value: 'transformed' });
expect(successValue).toBe(promiseValue);
});
});
@ -1084,4 +1116,4 @@ describe('resource', function() {
});
});
});