diff --git a/packages/ember-model/lib/rest_adapter.js b/packages/ember-model/lib/rest_adapter.js index cb1bd1c..133da60 100644 --- a/packages/ember-model/lib/rest_adapter.js +++ b/packages/ember-model/lib/rest_adapter.js @@ -90,7 +90,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ url = this.buildURL(record.constructor, get(record, primaryKey)), self = this; - return this.ajax(url, record.toJSON(), "DELETE").then(function(data) { // TODO: Some APIs may or may not return data + return this.ajax(url, record.toJSON(), "DELETE").then(function(data) { self.didDeleteRecord(record, data); }); }, @@ -124,6 +124,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ }, _ajax: function(url, params, method, settings) { + var self = this; if (!settings) { settings = this.ajaxSettings(url, method); } @@ -148,7 +149,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ jqXHR.then = null; } - Ember.run(null, reject, jqXHR); + self._handleRejections(method, jqXHR, resolve, reject); }; @@ -156,6 +157,14 @@ Ember.RESTAdapter = Ember.Adapter.extend({ }); }, + _handleRejections: function(method, jqXHR, resolve, reject) { + if (method === "DELETE" && jqXHR.status >= 200 && jqXHR.status < 300) { + Ember.run(null, resolve, null); + } else { + Ember.run(null, reject, jqXHR); + } + }, + _loadRecordFromData: function(record, data) { var rootKey = get(record.constructor, 'rootKey'), primaryKey = get(record.constructor, 'primaryKey'); diff --git a/packages/ember-model/tests/adapter/rest_adapter_test.js b/packages/ember-model/tests/adapter/rest_adapter_test.js index 233c1ec..a24f7b5 100644 --- a/packages/ember-model/tests/adapter/rest_adapter_test.js +++ b/packages/ember-model/tests/adapter/rest_adapter_test.js @@ -881,3 +881,33 @@ test("buildURL() creates url from model's url, id, and url suffix", function() { url = adapter.buildURL(RESTModel, "123"); equal(url, "/posts/123.json" ); }); + +test('_handleRejections() will resolve empty successful DELETEs', function() { + expect(1); + var resolve = function(data) { + ok(data === null, "resolved with null"); + }; + Ember.run(function() { + adapter._handleRejections("DELETE", {status: 200}, resolve, Ember.$.noop); + }); +}); + +test('_handleRejections() will reject empty responses for other verbs', function() { + expect(1); + var reject = function(data) { + ok(data.status === 200, "rejected with 200 status"); + }; + Ember.run(function() { + adapter._handleRejections("PUT", {status: 200}, Ember.$.noop, reject); + }); +}); + +test('_handleRejections() will reject DELETEs with unsuccessful status codes', function() { + expect(1); + var reject = function(data) { + ok(data.status === 403, "rejected with 403 status"); + }; + Ember.run(function() { + adapter._handleRejections("DELETE", {status: 403}, Ember.$.noop, reject); + }); +});