import React from 'react';
import {
Binary,
UUID,
Code,
Double,
Int32,
Long,
BSONRegExp,
Timestamp,
DBRef,
MaxKey,
MinKey,
ObjectId,
BSONSymbol,
Decimal128,
} from 'bson';
import BSONValue from './bson-value';
import { expect } from 'chai';
import { render, cleanup, screen } from '@testing-library/react';
describe('BSONValue', function () {
afterEach(cleanup);
const valuesToRender = [
{
type: 'Binary',
value: Binary.createFromBase64('dGVzdA==', Binary.SUBTYPE_DEFAULT),
expected: "Binary.createFromBase64('dGVzdA==', 0)",
},
{
type: 'Binary',
value: Binary.createFromBase64(
'encrypted data',
Binary.SUBTYPE_ENCRYPTED
),
expected: '*********',
},
{
type: 'Binary',
value: new UUID('48b481f0-31c7-4b2d-81d4-987ac69262a9').toBinary(),
expected: "UUID('48b481f0-31c7-4b2d-81d4-987ac69262a9')",
},
{
type: 'Binary',
value: Binary.createFromHexString('3132303d', Binary.SUBTYPE_UUID),
expected: "UUID('3132303d')",
},
{
type: 'Code',
value: new Code('var a = 1', { foo: 2 }),
expected: 'Code(\'var a = 1\', {"foo":2})',
},
{
type: 'Double',
value: new Double(123),
expected: '123',
},
{ type: 'Int32', value: new Int32(123), expected: '123' },
{ type: 'Long', value: new Long(123), expected: '123' },
{
type: 'BSONRegExp',
value: new BSONRegExp('foo', 'im'),
expected: '/foo/im',
},
{
type: 'Timestamp',
value: new Timestamp(new Long(0)),
expected: 'Timestamp({ t: 0, i: 0 })',
},
{
type: 'DBRef',
value: new DBRef('foo', new ObjectId('5d505646cf6d4fe581014ab2')),
expected: "DBRef('foo', '5d505646cf6d4fe581014ab2')",
},
{
type: 'DBRef',
value: new DBRef('foo', new ObjectId('5d505646cf6d4fe581014ab2'), 'buz'),
expected: "DBRef('foo', '5d505646cf6d4fe581014ab2', 'buz')",
},
{ type: 'MaxKey', value: new MaxKey(), expected: 'MaxKey()' },
{ type: 'MinKey', value: new MinKey(), expected: 'MinKey()' },
{
type: 'ObjectId',
value: new ObjectId('5d505646cf6d4fe581014ab2'),
expected: "ObjectId('5d505646cf6d4fe581014ab2')",
},
{
type: 'BSONSymbol',
value: new BSONSymbol('abc'),
expected: "Symbol('abc')",
},
{
type: 'Decimal128',
value: new Decimal128('10.0'),
expected: '10.0',
},
{
type: 'Date',
value: new Date(0),
expected: '1970-01-01T00:00:00.000+00:00',
},
{
type: 'String',
value: 'this is a string of test that is less than 70 symbols long',
expected: '"this is a string of test that is less than 70 symbols long"',
},
{
type: 'String',
value:
'this is a string of test that is less than is more than 70 symbols for the purpose of showing truncated text',
expected:
'"this is a string of test that is less than is more than 70 symbols for…"',
},
{ type: 'Undefined', value: undefined, expected: 'undefined' },
{ type: 'Null', value: null, expected: 'null' },
{ type: 'Boolean', value: false, expected: 'false' },
{ type: 'Boolean', value: true, expected: 'true' },
{ type: 'Array', value: [1, 2, 3], expected: 'Array (3)' },
{ type: 'Array', value: [], expected: 'Array (empty)' },
];
valuesToRender.forEach(function ({ expected, ...props }) {
it(`should render ${props.type} as ${expected}`, function () {
const { container } = render();
expect(container.querySelector('.element-value')).to.exist;
expect(container.querySelector('.element-value')?.textContent).to.eq(
expected
);
});
});
it('should render an info link for encrypted values', async function () {
render(
);
expect(await screen.findByTestId('bson-value-in-use-encryption-docs-link'))
.to.be.visible;
});
});