Skip to content

Commit d68a097

Browse files
readded tests
1 parent 7860f24 commit d68a097

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

test/node/uuid_tests.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,65 @@ describe('UUID', () => {
193193
expect(plainUUIDSerialization).to.deep.equal(toBinarySerialization);
194194
});
195195
});
196+
197+
describe('deserialize', () => {
198+
const originalUUID = new BSON.UUID();
199+
const binaryUUID = originalUUID.toBinary();
200+
const serializedUUID = BSON.serialize({ uuid: originalUUID.toBinary() });
201+
202+
it('should promoteUUIDs when flag is true', () => {
203+
const { uuid: promotedUUID } = BSON.deserialize(serializedUUID, { promoteUUIDs: true });
204+
expect(promotedUUID._bsontype).to.equal('UUID');
205+
expect(promotedUUID).to.deep.equal(originalUUID);
206+
});
207+
208+
it('should not promoteUUIDs when flag is false', () => {
209+
const { uuid: unpromotedUUID } = BSON.deserialize(serializedUUID, { promoteUUIDs: false });
210+
expect(unpromotedUUID._bsontype).to.equal('Binary');
211+
expect(unpromotedUUID).to.deep.equal(binaryUUID);
212+
});
213+
214+
it('should not promoteUUIDs when flag is omitted', () => {
215+
const { uuid: omittedFlagUUID } = BSON.deserialize(serializedUUID);
216+
expect(omittedFlagUUID._bsontype).to.equal('Binary');
217+
expect(omittedFlagUUID).to.deep.equal(binaryUUID);
218+
});
219+
220+
it('should throw BSONTypeError if _bsontype is not UUID and promoteUUIDs is true', () => {
221+
const binaryVar = new Binary(Buffer.from('abc'));
222+
const serializedBinary = BSON.serialize(binaryVar);
223+
expect(() => {
224+
BSON.deserialize(serializedBinary, { promoteUUIDs: true });
225+
}).to.throw(BSONTypeError);
226+
});
227+
228+
describe('promoteBuffers', () => {
229+
const promoteUUIDValues = [true, false, undefined];
230+
const promoteBufferValues = [true, false, undefined];
231+
232+
const testCases = promoteUUIDValues.flatMap(promoteUUIDs =>
233+
promoteBufferValues.flatMap(promoteBuffers => ({
234+
options: { promoteUUIDs, promoteBuffers },
235+
// promoteBuffers: true returns a Buffer so _bsontype does not exist
236+
outcome: promoteUUIDs ? 'UUID' : promoteBuffers ? undefined : 'Binary'
237+
}))
238+
);
239+
240+
for (const { options, outcome } of testCases) {
241+
it(`should deserialize to ${outcome} type when promoteUUIDs is ${options.promoteUUIDs} and promoteBuffers is ${options.promoteBuffers}`, () => {
242+
const { uuid } = BSON.deserialize(serializedUUID, options);
243+
expect(uuid._bsontype).to.equal(outcome);
244+
if (uuid._bsontype === 'UUID') {
245+
expect(uuid.id).to.deep.equal(originalUUID.id);
246+
} else if (uuid._bsontype === 'Binary') {
247+
expect(uuid.buffer).to.deep.equal(originalUUID.id);
248+
} else if (uuid._bsontype === undefined) {
249+
expect(uuid).to.deep.equal(originalUUID.id);
250+
} else {
251+
expect.fail('Unexpected _bsontype');
252+
}
253+
});
254+
}
255+
});
256+
});
196257
});

0 commit comments

Comments
 (0)