From d409e1528296b687d5c2c3f209b0f313804a6f80 Mon Sep 17 00:00:00 2001 From: jankuca Date: Fri, 30 Aug 2013 16:19:40 -0700 Subject: [PATCH] fix($resource): pass transformed value to both callbacks and promises Closes #3817 --- src/ngResource/resource.js | 11 ++++++++--- test/ngResource/resourceSpec.js | 34 ++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 8f0ac543c744..a86c00ec4dd6 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -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 diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index c49ac9e0acfe..2bf40a2cb515 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -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() { }); -}); \ No newline at end of file +});