Skip to content

Commit 7caec86

Browse files
committed
Merge pull request #4290 from pangratz/warn-on-invalid-json-response
[BUGFIX beta] add custom warning when invalid JSON is returned
2 parents c8c0e87 + ec38f49 commit 7caec86

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

addon/adapters/rest.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
} from 'ember-data/adapters/errors';
1818
import BuildURLMixin from "ember-data/-private/adapters/build-url-mixin";
1919
import isEnabled from 'ember-data/-private/features';
20+
import { runInDebug, warn } from 'ember-data/-private/debug';
2021
import parseResponseHeaders from 'ember-data/-private/utils/parse-response-headers';
2122

2223
const {
@@ -1011,6 +1012,14 @@ var RESTAdapter = Adapter.extend(BuildURLMixin, {
10111012
};
10121013

10131014
hash.error = function(jqXHR, textStatus, errorThrown) {
1015+
runInDebug(function() {
1016+
let message = `The server returned an empty string for ${type} ${url}, which cannot be parsed into a valid JSON. Return either null or {}.`;
1017+
let validJSONString = !(textStatus === "parsererror" && jqXHR.responseText === "");
1018+
warn(message, validJSONString, {
1019+
id: 'ds.adapter.returned-empty-string-as-JSON'
1020+
});
1021+
});
1022+
10141023
let error;
10151024

10161025
if (errorThrown instanceof Error) {
@@ -1378,6 +1387,14 @@ if (isEnabled('ds-improved-ajax')) {
13781387
};
13791388

13801389
hash.error = function(jqXHR, textStatus, errorThrown) {
1390+
runInDebug(function() {
1391+
let message = `The server returned an empty string for ${method} ${url}, which cannot be parsed into a valid JSON. Return either null or {}.`;
1392+
let validJSONString = !(textStatus === "parsererror" && jqXHR.responseText === "");
1393+
warn(message, validJSONString, {
1394+
id: 'ds.adapter.returned-empty-string-as-JSON'
1395+
});
1396+
});
1397+
13811398
let error;
13821399

13831400
if (errorThrown instanceof Error) {

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"ember": "components/ember#release",
55
"ember-cli-shims": "0.1.0",
66
"ember-cli-test-loader": "0.2.2",
7-
"ember-qunit-notifications": "0.1.0"
7+
"ember-qunit-notifications": "0.1.0",
8+
"pretender": "^0.12.0"
89
},
910
"resolutions": {
1011
"ember": "release"

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"ember-cli-htmlbars-inline-precompile": "^0.2.0",
6363
"ember-cli-inject-live-reload": "^1.3.1",
6464
"ember-cli-internal-test-helpers": "^0.8.1",
65+
"ember-cli-pretender": "0.6.0",
6566
"ember-cli-qunit": "^1.2.1",
6667
"ember-cli-release": "0.2.3",
6768
"ember-cli-sri": "^2.1.0",
@@ -80,6 +81,7 @@
8081
"loader.js": "^4.0.0",
8182
"mocha": "2.4.5",
8283
"mocha-only-detector": "0.0.2",
84+
"pretender": "1.0.0",
8385
"rimraf": "2.5.2",
8486
"rsvp": "3.2.1"
8587
},

tests/integration/adapter/rest-adapter-test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import Ember from 'ember';
44
import testInDebug from 'dummy/tests/helpers/test-in-debug';
55
import {module, test} from 'qunit';
66

7+
import Pretender from "pretender";
8+
79
import DS from 'ember-data';
810
import isEnabled from 'ember-data/-private/features';
911

@@ -2517,3 +2519,24 @@ test("createRecord - sideloaded records are pushed to the store", function(asser
25172519
});
25182520
});
25192521
});
2522+
2523+
testInDebug("warns when an empty response is returned, though a valid stringified JSON is expected", function(assert) {
2524+
let done = assert.async();
2525+
let server = new Pretender();
2526+
2527+
server.post('/posts', function() {
2528+
return [201, { "Content-Type": "application/json" }, ""];
2529+
});
2530+
2531+
run(function() {
2532+
let post = store.createRecord('post');
2533+
let save = post.save();
2534+
2535+
save.then(null, function() {
2536+
server.shutdown();
2537+
done();
2538+
});
2539+
});
2540+
2541+
assert.expectWarning("The server returned an empty string for POST /posts, which cannot be parsed into a valid JSON. Return either null or {}.");
2542+
});

0 commit comments

Comments
 (0)