Skip to content

Commit edbeb9e

Browse files
committed
Check parsed results for total property
Fixes #113
1 parent 6b39f3d commit edbeb9e

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

Request.js

+13-7
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,31 @@ define([
135135
headers: headers
136136
});
137137
var collection = this;
138+
var parsedResponse = response.then(function (response) {
139+
return collection.parse(response);
140+
});
138141
return {
139-
data: response.then(function (response) {
140-
var results = collection.parse(response);
142+
data: parsedResponse.then(function (data) {
141143
// support items in the results
142-
results = results.items || results;
144+
var results = data.items || data;
143145
for (var i = 0, l = results.length; i < l; i++) {
144146
results[i] = collection._restore(results[i], true);
145147
}
146148
return results;
147149
}),
148-
total: response.response.then(function (response) {
149-
var total = response.data.total;
150+
total: parsedResponse.then(function (data) {
151+
// check for a total property
152+
var total = data.total;
150153
if (total > -1) {
151154
// if we have a valid positive number from the data,
152155
// we can use that
153156
return total;
154157
}
155-
var range = response.getHeader('Content-Range');
156-
return range && (range = range.match(/\/(.*)/)) && +range[1];
158+
// else use headers
159+
return response.response.then(function (response) {
160+
var range = response.getHeader('Content-Range');
161+
return range && (range = range.match(/\/(.*)/)) && +range[1];
162+
});
157163
}),
158164
response: response.response
159165
};

tests/Request.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,16 @@ define([
4747
expected = rangeArgs;
4848
results = collection.fetch();
4949
} else {
50+
mockRequest.setResponseHeaders({
51+
'Content-Range': rangeArgs.start + '-' + rangeArgs.end + '/' + expectedResults.length
52+
});
5053
results = collection.fetchRange(rangeArgs);
54+
results = results.totalLength.then(function (totalLength) {
55+
assert.strictEqual(totalLength, expectedResults.length);
56+
return results;
57+
});
5158
}
52-
return when(results).then(function (results) {
59+
return results.then(function (results) {
5360
expected.headers && mockRequest.assertRequestHeaders(expected.headers);
5461
expected.queryParams && mockRequest.assertQueryParams(expected.queryParams);
5562

0 commit comments

Comments
 (0)