signal-desktop/ts/test-both/groups/add_banned_member_test.ts
2023-08-21 09:30:33 -07:00

118 lines
3.4 KiB
TypeScript

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { generateAci } from '../../types/ServiceId';
import { _maybeBuildAddBannedMemberActions } from '../../groups';
import { getClientZkGroupCipher, decryptServiceId } from '../../util/zkgroup';
import { updateRemoteConfig } from '../helpers/RemoteConfigStub';
const HARD_LIMIT_KEY = 'global.groupsv2.groupSizeHardLimit';
describe('group add banned member', () => {
const serviceId = generateAci();
const ourAci = generateAci();
const existing = Array.from({ length: 10 }, (_, index) => ({
serviceId: generateAci(),
timestamp: index,
}));
const secretParams =
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd/rq8//fR' +
'4RzhvN3G9KcKlQoj7cguQFjTOqLV6JUSbrURzeILsUmsymGJmHt3kpBJ2zosqp4ex' +
'sg+qwF1z6YdB/rxKnxKRLZZP/V0F7bERslYILy2lUh3Sh3iA98yO4CGfzjjFVo1SI' +
'7U8XApLeVNQHJo7nkflf/JyBrqPft5gEucbKW/h+S3OYjfQ5zl2Cpw3XrV7N6OKEu' +
'tLUWPHQuJx11A4xDPrmtAOnGy2NBxoOybDNlWipeNbn1WQJqOjMF7YA80oEm+5qnM' +
'kEYcFVqbYaSzPcMhg3mQ0SYfQpxYgSOJpwp9f/8EDnwJV4ISPBOo2CiaSqVfnd8Dw' +
'ZOc58gQA==';
const clientZkGroupCipher = getClientZkGroupCipher(secretParams);
before(async () => {
await updateRemoteConfig([
{ name: HARD_LIMIT_KEY, value: '5', enabled: true },
]);
});
it('should add banned member without deleting', () => {
const actions = _maybeBuildAddBannedMemberActions({
clientZkGroupCipher,
serviceId,
ourAci,
group: {
bannedMembersV2: [],
},
});
assert.strictEqual(actions.addMembersBanned?.length, 1);
assert.strictEqual(
decryptServiceId(
clientZkGroupCipher,
actions.addMembersBanned?.[0]?.added?.userId ?? new Uint8Array(0)
),
serviceId
);
assert.strictEqual(actions.deleteMembersBanned, null);
});
it('should add banned member while deleting the oldest', () => {
const actions = _maybeBuildAddBannedMemberActions({
clientZkGroupCipher,
serviceId,
ourAci,
group: {
bannedMembersV2: [...existing],
},
});
const deleted = actions.deleteMembersBanned?.map(({ deletedUserId }) => {
return decryptServiceId(
clientZkGroupCipher,
deletedUserId ?? new Uint8Array(0)
);
});
assert.strictEqual(actions.addMembersBanned?.length, 1);
assert.strictEqual(
decryptServiceId(
clientZkGroupCipher,
actions.addMembersBanned?.[0]?.added?.userId ?? new Uint8Array(0)
),
serviceId
);
assert.deepStrictEqual(
deleted,
existing
.slice(0, 6)
.reverse()
.map(member => member.serviceId)
);
});
it('should not ban ourselves', () => {
const actions = _maybeBuildAddBannedMemberActions({
clientZkGroupCipher,
serviceId: ourAci,
ourAci,
group: {
bannedMembersV2: [],
},
});
assert.isUndefined(actions.addMembersBanned);
assert.isUndefined(actions.deleteMembersBanned);
});
it('should not ban already banned person', () => {
const actions = _maybeBuildAddBannedMemberActions({
clientZkGroupCipher,
serviceId,
ourAci,
group: {
bannedMembersV2: [{ serviceId, timestamp: 1 }],
},
});
assert.isUndefined(actions.addMembersBanned);
assert.isUndefined(actions.deleteMembersBanned);
});
});