aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjankuca2013-08-30 16:19:40 -0700
committerBrian Ford2013-10-02 17:03:53 -0700
commite36e28ebd4a6c144e47d11fba8e211d8d5a9d03e (patch)
treecf226669f97d5b16cc37b931ed2b70a5fdaf1f78
parent5b8c78843e8d62a7a67cead8bf04c76aa8ee411d (diff)
downloadangular.js-e36e28ebd4a6c144e47d11fba8e211d8d5a9d03e.tar.bz2
fix($resource): pass transformed value to both callbacks and promises
Closes #3817
-rw-r--r--src/ngResource/resource.js11
-rw-r--r--test/ngResource/resourceSpec.js34
2 files changed, 41 insertions, 4 deletions
diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js
index 8f0ac543..a86c00ec 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 c49ac9e0..2bf40a2c 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
+});