From b99025731a501cc12eb3d9a511cf8b9f327aa0d5 Mon Sep 17 00:00:00 2001 From: aditi-khare-mongoDB Date: Fri, 22 Jul 2022 11:00:47 -0400 Subject: [PATCH 1/3] serialize UUID class as a type --- src/parser/serializer.ts | 6 ++++++ test/node/uuid_tests.js | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/parser/serializer.ts b/src/parser/serializer.ts index e76402aa..f20ddc36 100644 --- a/src/parser/serializer.ts +++ b/src/parser/serializer.ts @@ -837,6 +837,8 @@ export function serializeInto( ); } else if (value['_bsontype'] === 'Binary') { index = serializeBinary(buffer, key, value, index, true); + } else if (value['_bsontype'] === 'UUID') { + index = serializeBinary(buffer, key, value.toBinary(), index); } else if (value['_bsontype'] === 'Symbol') { index = serializeSymbol(buffer, key, value, index, true); } else if (value['_bsontype'] === 'DBRef') { @@ -938,6 +940,8 @@ export function serializeInto( index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions); } else if (value['_bsontype'] === 'Binary') { index = serializeBinary(buffer, key, value, index); + } else if (value['_bsontype'] === 'UUID') { + index = serializeBinary(buffer, key, value.toBinary(), index); } else if (value['_bsontype'] === 'Symbol') { index = serializeSymbol(buffer, key, value, index); } else if (value['_bsontype'] === 'DBRef') { @@ -1043,6 +1047,8 @@ export function serializeInto( index = serializeFunction(buffer, key, value, index, checkKeys, depth, serializeFunctions); } else if (value['_bsontype'] === 'Binary') { index = serializeBinary(buffer, key, value, index); + } else if (value['_bsontype'] === 'UUID') { + index = serializeBinary(buffer, key, value.toBinary(), index); } else if (value['_bsontype'] === 'Symbol') { index = serializeSymbol(buffer, key, value, index); } else if (value['_bsontype'] === 'DBRef') { diff --git a/test/node/uuid_tests.js b/test/node/uuid_tests.js index 0ff69b17..0ebda298 100644 --- a/test/node/uuid_tests.js +++ b/test/node/uuid_tests.js @@ -6,6 +6,8 @@ const { inspect } = require('util'); const { validate: uuidStringValidate, version: uuidStringVersion } = require('uuid'); const BSON = require('../register-bson'); const BSONTypeError = BSON.BSONTypeError; +const BSON_DATA_BINARY = BSON.BSON_DATA_BINARY; +const BSON_BINARY_SUBTYPE_UUID_NEW = BSON.BSON_BINARY_SUBTYPE_UUID_NEW; // Test values const UPPERCASE_DASH_SEPARATED_UUID_STRING = 'AAAAAAAA-AAAA-4AAA-AAAA-AAAAAAAAAAAA'; @@ -162,4 +164,22 @@ describe('UUID', () => { const uuid = new UUID(UPPERCASE_DASH_SEPARATED_UUID_STRING); expect(inspect(uuid)).to.equal(`new UUID("${LOWERCASE_DASH_SEPARATED_UUID_STRING}")`); }); + + it(`should serialize as a valid UUID _bsontype with Object input without error`, () => { + const output = BSON.serialize({ uuid: new BSON.UUID() }); + expect(output[4]).to.equal(BSON_DATA_BINARY); + expect(output[14]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); + }); + + it(`should serialize as a valid UUID _bsontype with Map input without error`, () => { + const output = BSON.serialize(new Map([['uuid', new BSON.UUID()]])); + expect(output[4]).to.equal(BSON_DATA_BINARY); + expect(output[14]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); + }); + + it(`should serialize as a valid UUID _bsontype with Array input without error`, () => { + const output = BSON.serialize({ a: [new BSON.UUID()] }); + expect(output[11]).to.equal(BSON_DATA_BINARY); + expect(output[18]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); + }); }); From 933b6e686088ea18a76fe20eb24af2c61c5d29ab Mon Sep 17 00:00:00 2001 From: aditi-khare-mongoDB Date: Tue, 26 Jul 2022 13:39:06 -0400 Subject: [PATCH 2/3] Added toBinary test --- test/node/uuid_tests.js | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/test/node/uuid_tests.js b/test/node/uuid_tests.js index 0ebda298..f5cf46a4 100644 --- a/test/node/uuid_tests.js +++ b/test/node/uuid_tests.js @@ -165,21 +165,29 @@ describe('UUID', () => { expect(inspect(uuid)).to.equal(`new UUID("${LOWERCASE_DASH_SEPARATED_UUID_STRING}")`); }); - it(`should serialize as a valid UUID _bsontype with Object input without error`, () => { - const output = BSON.serialize({ uuid: new BSON.UUID() }); - expect(output[4]).to.equal(BSON_DATA_BINARY); - expect(output[14]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); - }); - - it(`should serialize as a valid UUID _bsontype with Map input without error`, () => { - const output = BSON.serialize(new Map([['uuid', new BSON.UUID()]])); - expect(output[4]).to.equal(BSON_DATA_BINARY); - expect(output[14]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); - }); - - it(`should serialize as a valid UUID _bsontype with Array input without error`, () => { - const output = BSON.serialize({ a: [new BSON.UUID()] }); - expect(output[11]).to.equal(BSON_DATA_BINARY); - expect(output[18]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); + describe('serialize', () => { + it('should have a valid UUID _bsontype with Object input without error', () => { + const output = BSON.serialize({ uuid: new BSON.UUID() }); + expect(output[4]).to.equal(BSON_DATA_BINARY); + expect(output[14]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); + }); + + it('should have a valid UUID _bsontype with Map input without error', () => { + const output = BSON.serialize(new Map([['uuid', new BSON.UUID()]])); + expect(output[4]).to.equal(BSON_DATA_BINARY); + expect(output[14]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); + }); + + it('should have as a valid UUID _bsontype with Array input without error', () => { + const output = BSON.serialize({ a: [new BSON.UUID()] }); + expect(output[11]).to.equal(BSON_DATA_BINARY); + expect(output[18]).to.equal(BSON_BINARY_SUBTYPE_UUID_NEW); + }); + + it('should serialize BSON.UUID() input the same as BSON.UUID().toBinary()', () => { + const toBinarySerialization = BSON.serialize({ uuid: new BSON.UUID().toBinary() }); + const plainUUIDSerialization = BSON.serialize({ uuid: new BSON.UUID() }); + expect(plainUUIDSerialization).to.deep.equal(toBinarySerialization); + }); }); }); From 6dbeb8de786990ac6aad8a940b7984e6c62137b9 Mon Sep 17 00:00:00 2001 From: aditi-khare-mongoDB Date: Tue, 26 Jul 2022 13:49:26 -0400 Subject: [PATCH 3/3] Fixed toBinary test --- test/node/uuid_tests.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/node/uuid_tests.js b/test/node/uuid_tests.js index f5cf46a4..f48360d8 100644 --- a/test/node/uuid_tests.js +++ b/test/node/uuid_tests.js @@ -185,9 +185,10 @@ describe('UUID', () => { }); it('should serialize BSON.UUID() input the same as BSON.UUID().toBinary()', () => { - const toBinarySerialization = BSON.serialize({ uuid: new BSON.UUID().toBinary() }); - const plainUUIDSerialization = BSON.serialize({ uuid: new BSON.UUID() }); + const exampleUUID = new BSON.UUID(); + const toBinarySerialization = BSON.serialize({ uuid: exampleUUID.toBinary() }); + const plainUUIDSerialization = BSON.serialize({ uuid: exampleUUID }); expect(plainUUIDSerialization).to.deep.equal(toBinarySerialization); - }); + }); }); });