signal-desktop/ts/test-node/components/leftPane/LeftPaneChooseGroupMembersHelper_test.ts

206 lines
6.3 KiB
TypeScript
Raw Normal View History

2023-01-03 19:55:46 +00:00
// Copyright 2021 Signal Messenger, LLC
2021-03-03 20:09:58 +00:00
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import * as sinon from 'sinon';
import { times } from 'lodash';
import { RowType, _testHeaderText } from '../../../components/ConversationList';
2021-03-03 20:09:58 +00:00
import { ContactCheckboxDisabledReason } from '../../../components/conversationList/ContactCheckbox';
2021-05-07 22:21:10 +00:00
import { getDefaultConversation } from '../../../test-both/helpers/getDefaultConversation';
2021-03-03 20:09:58 +00:00
import { LeftPaneChooseGroupMembersHelper } from '../../../components/leftPane/LeftPaneChooseGroupMembersHelper';
describe('LeftPaneChooseGroupMembersHelper', () => {
const defaults = {
uuidFetchState: {},
2021-03-03 20:09:58 +00:00
candidateContacts: [],
isShowingRecommendedGroupSizeModal: false,
isShowingMaximumGroupSizeModal: false,
2022-06-17 00:38:28 +00:00
isUsernamesEnabled: true,
groupSizeRecommendedLimit: 22,
groupSizeHardLimit: 33,
2021-03-03 20:09:58 +00:00
searchTerm: '',
regionCode: 'US',
2021-03-03 20:09:58 +00:00
selectedContacts: [],
};
describe('getBackAction', () => {
it('returns the "show composer" action', () => {
const startComposing = sinon.fake();
const helper = new LeftPaneChooseGroupMembersHelper(defaults);
assert.strictEqual(
helper.getBackAction({ startComposing }),
startComposing
);
});
});
2021-03-03 20:09:58 +00:00
describe('getRowCount', () => {
it('returns 0 if there are no contacts', () => {
assert.strictEqual(
new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts: [],
searchTerm: '',
2021-05-07 22:21:10 +00:00
selectedContacts: [getDefaultConversation()],
2021-03-03 20:09:58 +00:00
}).getRowCount(),
0
);
assert.strictEqual(
new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts: [],
searchTerm: 'foo bar',
2021-05-07 22:21:10 +00:00
selectedContacts: [getDefaultConversation()],
2022-06-17 00:38:28 +00:00
isUsernamesEnabled: false,
2021-03-03 20:09:58 +00:00
}).getRowCount(),
0
);
});
it('returns the number of candidate contacts + 2 if there are any', () => {
assert.strictEqual(
new LeftPaneChooseGroupMembersHelper({
...defaults,
2021-05-07 22:21:10 +00:00
candidateContacts: [
getDefaultConversation(),
getDefaultConversation(),
],
2021-03-03 20:09:58 +00:00
searchTerm: '',
2021-05-07 22:21:10 +00:00
selectedContacts: [getDefaultConversation()],
2021-03-03 20:09:58 +00:00
}).getRowCount(),
4
);
});
});
describe('getRow', () => {
it('returns undefined if there are no contacts', () => {
assert.isUndefined(
new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts: [],
searchTerm: '',
2021-05-07 22:21:10 +00:00
selectedContacts: [getDefaultConversation()],
2021-03-03 20:09:58 +00:00
}).getRow(0)
);
assert.isUndefined(
new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts: [],
searchTerm: '',
2021-05-07 22:21:10 +00:00
selectedContacts: [getDefaultConversation()],
2021-03-03 20:09:58 +00:00
}).getRow(99)
);
assert.isUndefined(
new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts: [],
searchTerm: 'foo bar',
2021-05-07 22:21:10 +00:00
selectedContacts: [getDefaultConversation()],
2022-06-17 00:38:28 +00:00
isUsernamesEnabled: false,
2021-03-03 20:09:58 +00:00
}).getRow(0)
);
});
it('returns a header, then the contacts, then a blank space if there are contacts', () => {
2021-05-07 22:21:10 +00:00
const candidateContacts = [
getDefaultConversation(),
getDefaultConversation(),
];
2021-03-03 20:09:58 +00:00
const helper = new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts,
searchTerm: 'foo bar',
2022-06-17 00:38:28 +00:00
isUsernamesEnabled: false,
2021-03-03 20:09:58 +00:00
selectedContacts: [candidateContacts[1]],
});
2023-03-30 00:03:25 +00:00
assert.deepEqual(_testHeaderText(helper.getRow(0)), 'icu:contactsHeader');
2021-03-03 20:09:58 +00:00
assert.deepEqual(helper.getRow(1), {
type: RowType.ContactCheckbox,
contact: candidateContacts[0],
isChecked: false,
disabledReason: undefined,
});
assert.deepEqual(helper.getRow(2), {
type: RowType.ContactCheckbox,
contact: candidateContacts[1],
isChecked: true,
disabledReason: undefined,
});
assert.deepEqual(helper.getRow(3), { type: RowType.Blank });
});
it("disables non-selected contact checkboxes if you've selected the maximum number of contacts", () => {
2021-05-07 22:21:10 +00:00
const candidateContacts = times(50, () => getDefaultConversation());
2021-03-03 20:09:58 +00:00
const helper = new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts,
searchTerm: 'foo bar',
selectedContacts: candidateContacts.slice(1, 33),
});
assert.deepEqual(helper.getRow(1), {
type: RowType.ContactCheckbox,
contact: candidateContacts[0],
isChecked: false,
disabledReason: ContactCheckboxDisabledReason.MaximumContactsSelected,
});
assert.deepEqual(helper.getRow(2), {
type: RowType.ContactCheckbox,
contact: candidateContacts[1],
isChecked: true,
disabledReason: undefined,
});
});
2022-06-17 00:38:28 +00:00
it('returns a header, then the phone number, then a blank space if there are contacts', () => {
const helper = new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts: [],
searchTerm: '212 555',
selectedContacts: [],
});
assert.deepEqual(
_testHeaderText(helper.getRow(0)),
2023-03-30 00:03:25 +00:00
'icu:findByPhoneNumberHeader'
);
2022-06-17 00:38:28 +00:00
assert.deepEqual(helper.getRow(1), {
type: RowType.PhoneNumberCheckbox,
phoneNumber: {
isValid: false,
userInput: '212 555',
e164: '+1212555',
},
isChecked: false,
isFetching: false,
});
assert.deepEqual(helper.getRow(2), { type: RowType.Blank });
});
it('returns a header, then the username, then a blank space if there are contacts', () => {
const helper = new LeftPaneChooseGroupMembersHelper({
...defaults,
candidateContacts: [],
searchTerm: 'signal',
selectedContacts: [],
});
assert.deepEqual(
_testHeaderText(helper.getRow(0)),
2023-03-30 00:03:25 +00:00
'icu:findByUsernameHeader'
);
2022-06-17 00:38:28 +00:00
assert.deepEqual(helper.getRow(1), {
type: RowType.UsernameCheckbox,
username: 'signal',
isChecked: false,
isFetching: false,
});
assert.deepEqual(helper.getRow(2), { type: RowType.Blank });
});
2021-03-03 20:09:58 +00:00
});
});