Skip to content

Commit 1a1fd72

Browse files
committed
test(object-id): add test for old ObjectID vs ObjectId serializing
1 parent adc12da commit 1a1fd72

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

test/node/bson_test.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2284,4 +2284,50 @@ describe('BSON', function() {
22842284
expect(false).to.equal(id.equals(undefined));
22852285
done();
22862286
});
2287+
2288+
it('should serialize ObjectIds from old bson versions', function() {
2289+
// create a wrapper simulating the old ObjectID class
2290+
class ObjectID {
2291+
constructor() {
2292+
this.oid = new ObjectId();
2293+
}
2294+
get id() {
2295+
return this.oid.id;
2296+
}
2297+
toString() {
2298+
return this.oid.toString();
2299+
}
2300+
}
2301+
Object.defineProperty(ObjectID.prototype, '_bsontype', { value: 'ObjectID' });
2302+
2303+
// Array
2304+
const array = [new ObjectID(), new ObjectId()];
2305+
const deserializedArrayAsMap = BSON.deserialize(BSON.serialize(array));
2306+
const deserializedArray = Object.keys(deserializedArrayAsMap).map(
2307+
x => deserializedArrayAsMap[x]
2308+
);
2309+
expect(deserializedArray.map(x => x.toString())).to.eql(array.map(x => x.toString()));
2310+
2311+
// Map
2312+
const map = new Map();
2313+
map.set('oldBsonType', new ObjectID());
2314+
map.set('newBsonType', new ObjectId());
2315+
const deserializedMapAsObject = BSON.deserialize(BSON.serialize(map), { relaxed: false });
2316+
const deserializedMap = new Map(
2317+
Object.keys(deserializedMapAsObject).map(k => [k, deserializedMapAsObject[k]])
2318+
);
2319+
2320+
map.forEach((value, key) => {
2321+
expect(deserializedMap.has(key)).to.be.true;
2322+
const deserializedMapValue = deserializedMap.get(key);
2323+
expect(deserializedMapValue.toString()).to.equal(value.toString());
2324+
});
2325+
2326+
// Object
2327+
const record = { oldBsonType: new ObjectID(), newBsonType: new ObjectId() };
2328+
const deserializedObject = BSON.deserialize(BSON.serialize(record));
2329+
expect(deserializedObject).to.have.keys(['oldBsonType', 'newBsonType']);
2330+
expect(record.oldBsonType.toString()).to.equal(deserializedObject.oldBsonType.toString());
2331+
expect(record.newBsonType.toString()).to.equal(deserializedObject.newBsonType.toString());
2332+
});
22872333
});

0 commit comments

Comments
 (0)