signal-desktop/ts/test-node/jobs/helpers/syncHelpers_test.ts
2023-08-21 09:30:33 -07:00

106 lines
2.6 KiB
TypeScript

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { parseRawSyncDataArray } from '../../../jobs/helpers/syncHelpers';
import { generateAci } from '../../../types/ServiceId';
const SERVICE_ID_1 = generateAci();
const SERVICE_ID_2 = generateAci();
describe('read and view sync helpers', () => {
describe('parseRawSyncDataArray', () => {
it('errors if not passed an array', () => {
[undefined, { timestamp: 123 }].forEach(input => {
assert.throws(() => parseRawSyncDataArray(input));
});
});
it('errors if passed an array with any invalid elements', () => {
const valid = {
messageId: '4a3ad1e1-61a7-464d-9982-f3e8eea81818',
senderAci: SERVICE_ID_2,
timestamp: 1234,
};
[undefined, {}, { messageId: -1, timestamp: 4567 }].forEach(invalid => {
assert.throws(() => parseRawSyncDataArray([valid, invalid]));
});
});
it('does nothing to an empty array', () => {
assert.deepEqual(parseRawSyncDataArray([]), []);
});
it('handles a valid array', () => {
assert.deepEqual(
parseRawSyncDataArray([
{
senderAci: SERVICE_ID_1,
timestamp: 1234,
},
{
messageId: '4a3ad1e1-61a7-464d-9982-f3e8eea81818',
senderE164: undefined,
senderAci: SERVICE_ID_2,
timestamp: 4567,
},
]),
[
{
messageId: undefined,
senderE164: undefined,
senderAci: SERVICE_ID_1,
timestamp: 1234,
},
{
messageId: '4a3ad1e1-61a7-464d-9982-f3e8eea81818',
senderE164: undefined,
senderAci: SERVICE_ID_2,
timestamp: 4567,
},
]
);
});
it('turns `null` into `undefined`', () => {
assert.deepEqual(
parseRawSyncDataArray([
{
messageId: null,
senderAci: SERVICE_ID_1,
timestamp: 1234,
},
]),
[
{
messageId: undefined,
senderE164: undefined,
senderAci: SERVICE_ID_1,
timestamp: 1234,
},
]
);
});
it('removes extra properties', () => {
assert.deepEqual(
parseRawSyncDataArray([
{
timestamp: 1234,
extra: true,
},
]),
[
{
messageId: undefined,
senderE164: undefined,
senderAci: undefined,
timestamp: 1234,
},
]
);
});
});
});