Signal-Desktop/ts/test-both/conversations/isConversationTooBigToRing_...

62 lines
2.0 KiB
TypeScript

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import * as sinon from 'sinon';
import { times } from 'lodash';
import { v4 as uuid } from 'uuid';
import * as remoteConfig from '../../RemoteConfig';
import { isConversationTooBigToRing } from '../../conversations/isConversationTooBigToRing';
describe('isConversationTooBigToRing', () => {
let sinonSandbox: sinon.SinonSandbox;
let getMaxGroupCallRingSizeStub: sinon.SinonStub;
beforeEach(() => {
sinonSandbox = sinon.createSandbox();
const getValueStub = sinonSandbox.stub(remoteConfig, 'getValue');
getMaxGroupCallRingSizeStub = getValueStub.withArgs(
'global.calling.maxGroupCallRingSize'
);
});
const fakeMemberships = (count: number) =>
times(count, () => ({ conversationId: uuid(), isAdmin: false }));
afterEach(() => {
sinonSandbox.restore();
});
it('returns false if there are no memberships (i.e., for a direct conversation)', () => {
assert.isFalse(isConversationTooBigToRing({}));
assert.isFalse(isConversationTooBigToRing({ memberships: [] }));
});
const textMaximum = (max: number): void => {
for (let count = 1; count < max; count += 1) {
const memberships = fakeMemberships(count);
assert.isFalse(isConversationTooBigToRing({ memberships }));
}
for (let count = max; count < max + 5; count += 1) {
const memberships = fakeMemberships(count);
assert.isTrue(isConversationTooBigToRing({ memberships }));
}
};
it('returns whether there are 16 or more people in the group, if there is nothing in remote config', () => {
textMaximum(16);
});
it('returns whether there are 16 or more people in the group, if the remote config value is bogus', () => {
getMaxGroupCallRingSizeStub.returns('uh oh');
textMaximum(16);
});
it('returns whether there are 9 or more people in the group, if the remote config value is 9', () => {
getMaxGroupCallRingSizeStub.returns('9');
textMaximum(9);
});
});