Merge pull request #121 from JordanVincent/master
Fix untransform null objects
This commit is contained in:
@@ -2,16 +2,18 @@
|
|||||||
|
|
||||||
var transform = require('../transform');
|
var transform = require('../transform');
|
||||||
|
|
||||||
var dummyConfig = {
|
var dummySchema = {
|
||||||
schema: {
|
|
||||||
data: {},
|
data: {},
|
||||||
getExpectedType: function(className, key) {
|
getExpectedType: function(className, key) {
|
||||||
if (key == 'userPointer') {
|
if (key == 'userPointer') {
|
||||||
return '*_User';
|
return '*_User';
|
||||||
|
} else if (key == 'picture') {
|
||||||
|
return 'file';
|
||||||
|
} else if (key == 'location') {
|
||||||
|
return 'geopoint';
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -19,7 +21,7 @@ describe('transformCreate', () => {
|
|||||||
|
|
||||||
it('a basic number', (done) => {
|
it('a basic number', (done) => {
|
||||||
var input = {five: 5};
|
var input = {five: 5};
|
||||||
var output = transform.transformCreate(dummyConfig, null, input);
|
var output = transform.transformCreate(dummySchema, null, input);
|
||||||
jequal(input, output);
|
jequal(input, output);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@@ -29,7 +31,7 @@ describe('transformCreate', () => {
|
|||||||
createdAt: "2015-10-06T21:24:50.332Z",
|
createdAt: "2015-10-06T21:24:50.332Z",
|
||||||
updatedAt: "2015-10-06T21:24:50.332Z"
|
updatedAt: "2015-10-06T21:24:50.332Z"
|
||||||
};
|
};
|
||||||
var output = transform.transformCreate(dummyConfig, null, input);
|
var output = transform.transformCreate(dummySchema, null, input);
|
||||||
expect(output._created_at instanceof Date).toBe(true);
|
expect(output._created_at instanceof Date).toBe(true);
|
||||||
expect(output._updated_at instanceof Date).toBe(true);
|
expect(output._updated_at instanceof Date).toBe(true);
|
||||||
done();
|
done();
|
||||||
@@ -41,21 +43,21 @@ describe('transformCreate', () => {
|
|||||||
objectId: 'myId',
|
objectId: 'myId',
|
||||||
className: 'Blah',
|
className: 'Blah',
|
||||||
};
|
};
|
||||||
var out = transform.transformCreate(dummyConfig, null, {pointers: [pointer]});
|
var out = transform.transformCreate(dummySchema, null, {pointers: [pointer]});
|
||||||
jequal([pointer], out.pointers);
|
jequal([pointer], out.pointers);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('a delete op', (done) => {
|
it('a delete op', (done) => {
|
||||||
var input = {deleteMe: {__op: 'Delete'}};
|
var input = {deleteMe: {__op: 'Delete'}};
|
||||||
var output = transform.transformCreate(dummyConfig, null, input);
|
var output = transform.transformCreate(dummySchema, null, input);
|
||||||
jequal(output, {});
|
jequal(output, {});
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('basic ACL', (done) => {
|
it('basic ACL', (done) => {
|
||||||
var input = {ACL: {'0123': {'read': true, 'write': true}}};
|
var input = {ACL: {'0123': {'read': true, 'write': true}}};
|
||||||
var output = transform.transformCreate(dummyConfig, null, input);
|
var output = transform.transformCreate(dummySchema, null, input);
|
||||||
// This just checks that it doesn't crash, but it should check format.
|
// This just checks that it doesn't crash, but it should check format.
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@@ -63,7 +65,7 @@ describe('transformCreate', () => {
|
|||||||
|
|
||||||
describe('transformWhere', () => {
|
describe('transformWhere', () => {
|
||||||
it('objectId', (done) => {
|
it('objectId', (done) => {
|
||||||
var out = transform.transformWhere(dummyConfig, null, {objectId: 'foo'});
|
var out = transform.transformWhere(dummySchema, null, {objectId: 'foo'});
|
||||||
expect(out._id).toEqual('foo');
|
expect(out._id).toEqual('foo');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@@ -72,7 +74,7 @@ describe('transformWhere', () => {
|
|||||||
var input = {
|
var input = {
|
||||||
objectId: {'$in': ['one', 'two', 'three']},
|
objectId: {'$in': ['one', 'two', 'three']},
|
||||||
};
|
};
|
||||||
var output = transform.transformWhere(dummyConfig, null, input);
|
var output = transform.transformWhere(dummySchema, null, input);
|
||||||
jequal(input.objectId, output._id);
|
jequal(input.objectId, output._id);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@@ -81,17 +83,66 @@ describe('transformWhere', () => {
|
|||||||
describe('untransformObject', () => {
|
describe('untransformObject', () => {
|
||||||
it('built-in timestamps', (done) => {
|
it('built-in timestamps', (done) => {
|
||||||
var input = {createdAt: new Date(), updatedAt: new Date()};
|
var input = {createdAt: new Date(), updatedAt: new Date()};
|
||||||
var output = transform.untransformObject(dummyConfig, null, input);
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
expect(typeof output.createdAt).toEqual('string');
|
expect(typeof output.createdAt).toEqual('string');
|
||||||
expect(typeof output.updatedAt).toEqual('string');
|
expect(typeof output.updatedAt).toEqual('string');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('pointer', (done) => {
|
||||||
|
var input = {_p_userPointer: '_User$123'};
|
||||||
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
|
expect(typeof output.userPointer).toEqual('object');
|
||||||
|
expect(output.userPointer).toEqual(
|
||||||
|
{__type: 'Pointer', className: '_User', objectId: '123'}
|
||||||
|
);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('null pointer', (done) => {
|
||||||
|
var input = {_p_userPointer: null};
|
||||||
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
|
expect(output.userPointer).toBeUndefined();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('file', (done) => {
|
||||||
|
var input = {picture: 'pic.jpg'};
|
||||||
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
|
expect(typeof output.picture).toEqual('object');
|
||||||
|
expect(output.picture).toEqual({__type: 'File', name: 'pic.jpg'});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('null file', (done) => {
|
||||||
|
var input = {picture: null};
|
||||||
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
|
expect(output.picture).toBeUndefined();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('geopoint', (done) => {
|
||||||
|
var input = {location: [180, -180]};
|
||||||
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
|
expect(typeof output.location).toEqual('object');
|
||||||
|
expect(output.location).toEqual(
|
||||||
|
{__type: 'GeoPoint', longitude: 180, latitude: -180}
|
||||||
|
);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('null geopoint', (done) => {
|
||||||
|
var input = {location: null};
|
||||||
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
|
expect(output.location).toBeUndefined();
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('transformKey', () => {
|
describe('transformKey', () => {
|
||||||
it('throws out _password', (done) => {
|
it('throws out _password', (done) => {
|
||||||
try {
|
try {
|
||||||
transform.transformKey(dummyConfig, '_User', '_password');
|
transform.transformKey(dummySchema, '_User', '_password');
|
||||||
fail('should have thrown');
|
fail('should have thrown');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
done();
|
done();
|
||||||
@@ -105,7 +156,7 @@ describe('transform schema key changes', () => {
|
|||||||
var input = {
|
var input = {
|
||||||
somePointer: {__type: 'Pointer', className: 'Micro', objectId: 'oft'}
|
somePointer: {__type: 'Pointer', className: 'Micro', objectId: 'oft'}
|
||||||
};
|
};
|
||||||
var output = transform.transformCreate(dummyConfig, null, input);
|
var output = transform.transformCreate(dummySchema, null, input);
|
||||||
expect(typeof output._p_somePointer).toEqual('string');
|
expect(typeof output._p_somePointer).toEqual('string');
|
||||||
expect(output._p_somePointer).toEqual('Micro$oft');
|
expect(output._p_somePointer).toEqual('Micro$oft');
|
||||||
done();
|
done();
|
||||||
@@ -115,7 +166,7 @@ describe('transform schema key changes', () => {
|
|||||||
var input = {
|
var input = {
|
||||||
userPointer: {__type: 'Pointer', className: '_User', objectId: 'qwerty'}
|
userPointer: {__type: 'Pointer', className: '_User', objectId: 'qwerty'}
|
||||||
};
|
};
|
||||||
var output = transform.transformCreate(dummyConfig, null, input);
|
var output = transform.transformCreate(dummySchema, null, input);
|
||||||
expect(typeof output._p_userPointer).toEqual('string');
|
expect(typeof output._p_userPointer).toEqual('string');
|
||||||
expect(output._p_userPointer).toEqual('_User$qwerty');
|
expect(output._p_userPointer).toEqual('_User$qwerty');
|
||||||
done();
|
done();
|
||||||
@@ -128,7 +179,7 @@ describe('transform schema key changes', () => {
|
|||||||
"Kevin": { "write": true }
|
"Kevin": { "write": true }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var output = transform.transformCreate(dummyConfig, null, input);
|
var output = transform.transformCreate(dummySchema, null, input);
|
||||||
expect(typeof output._rperm).toEqual('object');
|
expect(typeof output._rperm).toEqual('object');
|
||||||
expect(typeof output._wperm).toEqual('object');
|
expect(typeof output._wperm).toEqual('object');
|
||||||
expect(output.ACL).toBeUndefined();
|
expect(output.ACL).toBeUndefined();
|
||||||
@@ -142,7 +193,7 @@ describe('transform schema key changes', () => {
|
|||||||
_rperm: ["*"],
|
_rperm: ["*"],
|
||||||
_wperm: ["Kevin"]
|
_wperm: ["Kevin"]
|
||||||
};
|
};
|
||||||
var output = transform.untransformObject(dummyConfig, null, input);
|
var output = transform.untransformObject(dummySchema, null, input);
|
||||||
expect(typeof output.ACL).toEqual('object');
|
expect(typeof output.ACL).toEqual('object');
|
||||||
expect(output._rperm).toBeUndefined();
|
expect(output._rperm).toBeUndefined();
|
||||||
expect(output._wperm).toBeUndefined();
|
expect(output._wperm).toBeUndefined();
|
||||||
|
|||||||
@@ -676,6 +676,9 @@ function untransformObject(schema, className, mongoObject) {
|
|||||||
console.log('Found a pointer in a non-pointer column, dropping it.', className, key);
|
console.log('Found a pointer in a non-pointer column, dropping it.', className, key);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (mongoObject[key] === null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
var objData = mongoObject[key].split('$');
|
var objData = mongoObject[key].split('$');
|
||||||
var newClass = (expected ? expected.substring(1) : objData[0]);
|
var newClass = (expected ? expected.substring(1) : objData[0]);
|
||||||
if (objData[0] !== newClass) {
|
if (objData[0] !== newClass) {
|
||||||
@@ -689,6 +692,8 @@ function untransformObject(schema, className, mongoObject) {
|
|||||||
break;
|
break;
|
||||||
} else if (key[0] == '_' && key != '__type') {
|
} else if (key[0] == '_' && key != '__type') {
|
||||||
throw ('bad key in untransform: ' + key);
|
throw ('bad key in untransform: ' + key);
|
||||||
|
} else if (mongoObject[key] === null) {
|
||||||
|
break;
|
||||||
} else {
|
} else {
|
||||||
var expected = schema.getExpectedType(className, key);
|
var expected = schema.getExpectedType(className, key);
|
||||||
if (expected == 'file') {
|
if (expected == 'file') {
|
||||||
|
|||||||
Reference in New Issue
Block a user