From 324f186845357bf5172a4bb908674f5ce185d06b Mon Sep 17 00:00:00 2001 From: jankuca Date: Fri, 30 Aug 2013 16:19:40 -0700 Subject: [PATCH] fix($resource): pass interceptor-transformed value to both success callbacks and promises --- src/ngResource/resource.js | 11 ++++++++--- test/ngResource/resourceSpec.js | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 57da8f092134..77819f1057ac 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -491,8 +491,6 @@ angular.module('ngResource', ['ng']). value.$resolved = true; - (success||noop)(value, response.headers); - response.resource = value; return response; @@ -502,8 +500,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 d971e8e7db80..098d8a9a5ef5 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -630,6 +630,37 @@ 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, { a: 987 }); + + var transformResponse = function (response) { + return { a: 123 }; + }; + + var CreditCard = $resource('/CreditCard', {}, { + call: { + method: 'get', + interceptor: { response: transformResponse } + } + }); + + var a, b; + var cc = new CreditCard({name: 'Me'}); + + var req = cc.$call({}, function (successValue) { + a = successValue; + }); + req.then(function (promiseValue) { + b = promiseValue; + }); + + $httpBackend.flush(); + expect(a).toBeDefined(); + expect(b).toBeDefined(); + expect(a).toBe(b); + expect(cc.$resolved).toBe(true); + }); }); @@ -1084,4 +1115,4 @@ describe('resource', function() { }); -}); \ No newline at end of file +});