signal-desktop/ts/test-electron/util/sendToGroup_test.ts
2021-05-25 15:40:04 -07:00

144 lines
3.9 KiB
TypeScript

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { _analyzeSenderKeyDevices, _waitForAll } from '../../util/sendToGroup';
import { DeviceType } from '../../textsecure/Types.d';
describe('sendToGroup', () => {
describe('#_analyzeSenderKeyDevices', () => {
function getDefaultDeviceList(): Array<DeviceType> {
return [
{
identifier: 'ident-guid-one',
id: 1,
},
{
identifier: 'ident-guid-one',
id: 2,
},
{
identifier: 'ident-guid-two',
id: 2,
},
];
}
it('returns nothing if new and previous lists are the same', () => {
const memberDevices = getDefaultDeviceList();
const devicesForSend = getDefaultDeviceList();
const {
newToMemberDevices,
newToMemberUuids,
removedFromMemberDevices,
removedFromMemberUuids,
} = _analyzeSenderKeyDevices(memberDevices, devicesForSend);
assert.isEmpty(newToMemberDevices);
assert.isEmpty(newToMemberUuids);
assert.isEmpty(removedFromMemberDevices);
assert.isEmpty(removedFromMemberUuids);
});
it('returns set of new devices', () => {
const memberDevices = getDefaultDeviceList();
const devicesForSend = getDefaultDeviceList();
memberDevices.pop();
memberDevices.pop();
const {
newToMemberDevices,
newToMemberUuids,
removedFromMemberDevices,
removedFromMemberUuids,
} = _analyzeSenderKeyDevices(memberDevices, devicesForSend);
assert.deepEqual(newToMemberDevices, [
{
identifier: 'ident-guid-one',
id: 2,
},
{
identifier: 'ident-guid-two',
id: 2,
},
]);
assert.deepEqual(newToMemberUuids, ['ident-guid-one', 'ident-guid-two']);
assert.isEmpty(removedFromMemberDevices);
assert.isEmpty(removedFromMemberUuids);
});
it('returns set of removed devices', () => {
const memberDevices = getDefaultDeviceList();
const devicesForSend = getDefaultDeviceList();
devicesForSend.pop();
devicesForSend.pop();
const {
newToMemberDevices,
newToMemberUuids,
removedFromMemberDevices,
removedFromMemberUuids,
} = _analyzeSenderKeyDevices(memberDevices, devicesForSend);
assert.isEmpty(newToMemberDevices);
assert.isEmpty(newToMemberUuids);
assert.deepEqual(removedFromMemberDevices, [
{
identifier: 'ident-guid-one',
id: 2,
},
{
identifier: 'ident-guid-two',
id: 2,
},
]);
assert.deepEqual(removedFromMemberUuids, [
'ident-guid-one',
'ident-guid-two',
]);
});
it('returns empty removals if partial send', () => {
const memberDevices = getDefaultDeviceList();
const devicesForSend = getDefaultDeviceList();
devicesForSend.pop();
devicesForSend.pop();
const isPartialSend = true;
const {
newToMemberDevices,
newToMemberUuids,
removedFromMemberDevices,
removedFromMemberUuids,
} = _analyzeSenderKeyDevices(
memberDevices,
devicesForSend,
isPartialSend
);
assert.isEmpty(newToMemberDevices);
assert.isEmpty(newToMemberUuids);
assert.isEmpty(removedFromMemberDevices);
assert.isEmpty(removedFromMemberUuids);
});
});
describe('#_waitForAll', () => {
it('returns nothing if new and previous lists are the same', async () => {
const task1 = () => Promise.resolve(1);
const task2 = () => Promise.resolve(2);
const task3 = () => Promise.resolve(3);
const result = await _waitForAll({
tasks: [task1, task2, task3],
maxConcurrency: 1,
});
assert.deepEqual(result, [1, 2, 3]);
});
});
});