Fixes #1230 coerceArray converts empty Objects (#1269)

This commit is contained in:
Dimitris 2017-03-20 16:05:11 +02:00 committed by Sakib Hasan
parent 1f52d23d67
commit 6f8ecfdf5c
2 changed files with 23 additions and 2 deletions

View File

@ -1567,7 +1567,14 @@ function coerceArray(val) {
throw new Error(g.f('Value is not an {{array}} or {{object}} with sequential numeric indices'));
}
var arrayVal = new Array(Object.keys(val).length);
// It is an object, check if empty
var props = Object.keys(val);
if (props.length === 0) {
throw new Error(g.f('Value is an empty {{object}}'));
}
var arrayVal = new Array(props.length);
for (var i = 0; i < arrayVal.length; ++i) {
if (!val.hasOwnProperty(i)) {
throw new Error(g.f('Value is not an {{array}} or {{object}} with sequential numeric indices'));

View File

@ -1312,6 +1312,8 @@ describe('DataAccessObject', function() {
date: Date,
location: 'GeoPoint',
scores: [Number],
array: 'array',
object: 'object',
});
});
@ -1546,7 +1548,7 @@ describe('DataAccessObject', function() {
assert(error, 'An error should have been thrown');
});
it('throws an error if the filter.limit property is nagative', function() {
it('throws an error if the filter.limit property is negative', function() {
try {
// The limit param must be a valid number
filter = model._normalize({limit: -1});
@ -1627,6 +1629,18 @@ describe('DataAccessObject', function() {
assert.deepEqual(where, {date: undefined});
});
it('does not coerce empty objects to arrays', function() {
where = model._coerce({object: {}});
where.object.should.not.be.an.Array();
where.object.should.be.an.Object();
});
it('does not coerce an empty array', function() {
where = model._coerce({array: []});
where.array.should.be.an.Array();
where.array.should.have.length(0);
});
it('does not coerce to a number for a simple value that produces NaN',
function() {
where = model._coerce({age: 'xyz'});