aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/ngResource/resourceSpec.js202
1 files changed, 161 insertions, 41 deletions
diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js
index ec7f1476..6a709fb7 100644
--- a/test/ngResource/resourceSpec.js
+++ b/test/ngResource/resourceSpec.js
@@ -467,58 +467,66 @@ describe("resource", function() {
describe('single resource', function() {
- it('should add promise $then method to the result object', function() {
+ it('should add $promise to the result object', function() {
$httpBackend.expect('GET', '/CreditCard/123').respond({id: 123, number: '9876'});
var cc = CreditCard.get({id: 123});
- cc.$then(callback);
+ cc.$promise.then(callback);
expect(callback).not.toHaveBeenCalled();
$httpBackend.flush();
- var response = callback.mostRecentCall.args[0];
-
- expect(response.data).toEqual({id: 123, number: '9876'});
- expect(response.status).toEqual(200);
- expect(response.resource).toEqualData({id: 123, number: '9876', $resolved: true});
- expect(typeof response.resource.$save).toBe('function');
+ expect(callback).toHaveBeenCalledOnce();
+ expect(callback.mostRecentCall.args[0]).toBe(cc);
});
- it('should keep $then around after promise resolution', function() {
+ it('should keep $promise around after resolution', function() {
$httpBackend.expect('GET', '/CreditCard/123').respond({id: 123, number: '9876'});
var cc = CreditCard.get({id: 123});
- cc.$then(callback);
+ cc.$promise.then(callback);
$httpBackend.flush();
- var response = callback.mostRecentCall.args[0];
-
callback.reset();
- cc.$then(callback);
+ cc.$promise.then(callback);
$rootScope.$apply(); //flush async queue
- expect(callback).toHaveBeenCalledOnceWith(response);
+ expect(callback).toHaveBeenCalledOnce();
+ });
+
+
+ it('should keep the original promise after instance action', function() {
+ $httpBackend.expect('GET', '/CreditCard/123').respond({id: 123, number: '9876'});
+ $httpBackend.expect('POST', '/CreditCard/123').respond({id: 123, number: '9876'});
+
+ var cc = CreditCard.get({id: 123});
+ var originalPromise = cc.$promise;
+
+ cc.number = '666';
+ cc.$save({id: 123});
+
+ expect(cc.$promise).toBe(originalPromise);
});
- it('should allow promise chaining via $then method', function() {
+ it('should allow promise chaining', function() {
$httpBackend.expect('GET', '/CreditCard/123').respond({id: 123, number: '9876'});
var cc = CreditCard.get({id: 123});
- cc.$then(function(response) { return 'new value'; }).then(callback);
+ cc.$promise.then(function(value) { return 'new value'; }).then(callback);
$httpBackend.flush();
expect(callback).toHaveBeenCalledOnceWith('new value');
});
- it('should allow error callback registration via $then method', function() {
+ it('should allow $promise error callback registration', function() {
$httpBackend.expect('GET', '/CreditCard/123').respond(404, 'resource not found');
var cc = CreditCard.get({id: 123});
- cc.$then(null, callback);
+ cc.$promise.then(null, callback);
$httpBackend.flush();
var response = callback.mostRecentCall.args[0];
@@ -534,7 +542,7 @@ describe("resource", function() {
expect(cc.$resolved).toBe(false);
- cc.$then(callback);
+ cc.$promise.then(callback);
expect(cc.$resolved).toBe(false);
$httpBackend.flush();
@@ -547,69 +555,125 @@ describe("resource", function() {
$httpBackend.expect('GET', '/CreditCard/123').respond(404, 'resource not found');
var cc = CreditCard.get({id: 123});
- cc.$then(null, callback);
+ cc.$promise.then(null, callback);
$httpBackend.flush();
expect(callback).toHaveBeenCalledOnce();
expect(cc.$resolved).toBe(true);
});
+
+
+ it('should keep $resolved true in all subsequent interactions', function() {
+ $httpBackend.expect('GET', '/CreditCard/123').respond({id: 123, number: '9876'});
+ var cc = CreditCard.get({id: 123});
+ $httpBackend.flush();
+ expect(cc.$resolved).toBe(true);
+
+ $httpBackend.expect('POST', '/CreditCard/123').respond();
+ cc.$save({id: 123});
+ expect(cc.$resolved).toBe(true);
+ $httpBackend.flush();
+ expect(cc.$resolved).toBe(true);
+ });
+
+
+ it('should return promise from action method calls', function() {
+ $httpBackend.expect('GET', '/CreditCard/123').respond({id: 123, number: '9876'});
+ var cc = new CreditCard({name: 'Mojo'});
+
+ expect(cc).toEqualData({name: 'Mojo'});
+
+ cc.$get({id:123}).then(callback);
+
+ $httpBackend.flush();
+ expect(callback).toHaveBeenCalledOnce();
+ expect(cc).toEqualData({id: 123, number: '9876'});
+ callback.reset();
+
+ $httpBackend.expect('POST', '/CreditCard').respond({id: 1, number: '9'});
+
+ cc.$save().then(callback);
+
+ $httpBackend.flush();
+ expect(callback).toHaveBeenCalledOnce();
+ expect(cc).toEqualData({id: 1, number: '9'});
+ });
+
+
+ it('should allow parsing a value from headers', function() {
+ // https://github.com/angular/angular.js/pull/2607#issuecomment-17759933
+ $httpBackend.expect('POST', '/CreditCard').respond(201, '', {'Location': '/new-id'});
+
+ var parseUrlFromHeaders = function(response) {
+ var resource = response.resource;
+ resource.url = response.headers('Location');
+ return resource;
+ };
+
+ var CreditCard = $resource('/CreditCard', {}, {
+ save: {
+ method: 'post',
+ interceptor: {response: parseUrlFromHeaders}
+ }
+ });
+
+ var cc = new CreditCard({name: 'Me'});
+
+ cc.$save();
+ $httpBackend.flush();
+
+ expect(cc.url).toBe('/new-id');
+ });
});
describe('resource collection', function() {
- it('should add promise $then method to the result object', function() {
+ it('should add $promise to the result object', function() {
$httpBackend.expect('GET', '/CreditCard?key=value').respond([{id: 1}, {id: 2}]);
var ccs = CreditCard.query({key: 'value'});
- ccs.$then(callback);
+ ccs.$promise.then(callback);
expect(callback).not.toHaveBeenCalled();
$httpBackend.flush();
- var response = callback.mostRecentCall.args[0];
-
- expect(response.data).toEqual([{id: 1}, {id :2}]);
- expect(response.status).toEqual(200);
- expect(response.resource).toEqualData([ { id : 1 }, { id : 2 } ]);
- expect(typeof response.resource[0].$save).toBe('function');
- expect(typeof response.resource[1].$save).toBe('function');
+ expect(callback).toHaveBeenCalledOnce();
+ expect(callback.mostRecentCall.args[0]).toBe(ccs);
});
- it('should keep $then around after promise resolution', function() {
+ it('should keep $promise around after resolution', function() {
$httpBackend.expect('GET', '/CreditCard?key=value').respond([{id: 1}, {id: 2}]);
var ccs = CreditCard.query({key: 'value'});
- ccs.$then(callback);
+ ccs.$promise.then(callback);
$httpBackend.flush();
- var response = callback.mostRecentCall.args[0];
-
callback.reset();
- ccs.$then(callback);
+ ccs.$promise.then(callback);
$rootScope.$apply(); //flush async queue
- expect(callback).toHaveBeenCalledOnceWith(response);
+ expect(callback).toHaveBeenCalledOnce();
});
- it('should allow promise chaining via $then method', function() {
+ it('should allow promise chaining', function() {
$httpBackend.expect('GET', '/CreditCard?key=value').respond([{id: 1}, {id: 2}]);
var ccs = CreditCard.query({key: 'value'});
- ccs.$then(function(response) { return 'new value'; }).then(callback);
+ ccs.$promise.then(function(value) { return 'new value'; }).then(callback);
$httpBackend.flush();
expect(callback).toHaveBeenCalledOnceWith('new value');
});
- it('should allow error callback registration via $then method', function() {
+ it('should allow $promise error callback registration', function() {
$httpBackend.expect('GET', '/CreditCard?key=value').respond(404, 'resource not found');
var ccs = CreditCard.query({key: 'value'});
- ccs.$then(null, callback);
+ ccs.$promise.then(null, callback);
$httpBackend.flush();
var response = callback.mostRecentCall.args[0];
@@ -625,7 +689,7 @@ describe("resource", function() {
expect(ccs.$resolved).toBe(false);
- ccs.$then(callback);
+ ccs.$promise.then(callback);
expect(ccs.$resolved).toBe(false);
$httpBackend.flush();
@@ -638,12 +702,68 @@ describe("resource", function() {
$httpBackend.expect('GET', '/CreditCard?key=value').respond(404, 'resource not found');
var ccs = CreditCard.query({key: 'value'});
- ccs.$then(null, callback);
+ ccs.$promise.then(null, callback);
$httpBackend.flush();
expect(callback).toHaveBeenCalledOnce();
expect(ccs.$resolved).toBe(true);
});
});
+
+ it('should allow per action response interceptor that gets full response', function() {
+ CreditCard = $resource('/CreditCard', {}, {
+ query: {
+ method: 'get',
+ isArray: true,
+ interceptor: {
+ response: function(response) {
+ return response;
+ }
+ }
+ }
+ });
+
+ $httpBackend.expect('GET', '/CreditCard').respond([{id: 1}]);
+
+ var ccs = CreditCard.query();
+
+ ccs.$promise.then(callback);
+
+ $httpBackend.flush();
+ expect(callback).toHaveBeenCalledOnce();
+
+ var response = callback.mostRecentCall.args[0];
+ expect(response.resource).toBe(ccs);
+ expect(response.status).toBe(200);
+ expect(response.config).toBeDefined();
+ });
+
+
+ it('should allow per action responseError interceptor that gets full response', function() {
+ CreditCard = $resource('/CreditCard', {}, {
+ query: {
+ method: 'get',
+ isArray: true,
+ interceptor: {
+ responseError: function(response) {
+ return response;
+ }
+ }
+ }
+ });
+
+ $httpBackend.expect('GET', '/CreditCard').respond(404);
+
+ var ccs = CreditCard.query();
+
+ ccs.$promise.then(callback);
+
+ $httpBackend.flush();
+ expect(callback).toHaveBeenCalledOnce();
+
+ var response = callback.mostRecentCall.args[0];
+ expect(response.status).toBe(404);
+ expect(response.config).toBeDefined();
+ });
});