New Group administration: Add users

This commit is contained in:
Evan Hahn 2021-03-11 15:29:31 -06:00 committed by Josh Perez
parent e81c18e84c
commit b81a52bbdd
43 changed files with 1789 additions and 277 deletions

View file

@ -1,7 +1,8 @@
// Copyright 2020 Signal Messenger, LLC
// Copyright 2020-2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { v4 as generateUuid } from 'uuid';
import { sample } from 'lodash';
import { ConversationType } from '../../state/ducks/conversations';
const FIRST_NAMES = [
@ -310,21 +311,23 @@ const LAST_NAMES = [
'Jimenez',
];
export function getRandomTitle(): string {
const firstName = FIRST_NAMES[Math.floor(Math.random() * FIRST_NAMES.length)];
const lastName = LAST_NAMES[Math.floor(Math.random() * LAST_NAMES.length)];
return `${firstName} ${lastName}`;
}
const getFirstName = (): string => sample(FIRST_NAMES) || 'Test';
const getLastName = (): string => sample(LAST_NAMES) || 'Test';
export function getDefaultConversation(
overrideProps: Partial<ConversationType>
overrideProps: Partial<ConversationType> = {}
): ConversationType {
const firstName = getFirstName();
const lastName = getLastName();
return {
id: generateUuid(),
isGroupV2Capable: true,
lastUpdated: Date.now(),
markedUnread: Boolean(overrideProps.markedUnread),
e164: '+1300555000',
title: getRandomTitle(),
firstName,
title: `${firstName} ${lastName}`,
type: 'direct' as const,
uuid: generateUuid(),
...overrideProps,

View file

@ -13,7 +13,7 @@ import {
import {
_getConversationComparator,
_getLeftPaneLists,
getCandidateGroupContacts,
getCandidateContactsForNewGroup,
getCantAddContactForModal,
getComposeContacts,
getComposeGroupAvatar,
@ -555,7 +555,7 @@ describe('both/state/selectors/conversations', () => {
});
});
describe('#getCandidateGroupContacts', () => {
describe('#getCandidateContactsForNewGroup', () => {
const getRootState = (contactSearchTerm = ''): StateType => {
const rootState = getEmptyRootState();
return {
@ -574,7 +574,7 @@ describe('both/state/selectors/conversations', () => {
},
'convo-2': {
...getDefaultConversation('convo-2'),
title: 'B. Sorted Second',
title: 'Should be dropped (has no name)',
},
'convo-3': {
...getDefaultConversation('convo-3'),
@ -584,19 +584,17 @@ describe('both/state/selectors/conversations', () => {
'convo-4': {
...getDefaultConversation('convo-4'),
isBlocked: true,
name: 'My Name',
title: 'Should Be Dropped (blocked)',
},
'convo-5': {
...getDefaultConversation('convo-5'),
discoveredUnregisteredAt: new Date(1999, 3, 20).getTime(),
name: 'My Name',
title: 'Should Be Dropped (unregistered)',
},
'convo-6': {
...getDefaultConversation('convo-6'),
title: 'D. Sorted Last',
},
'convo-7': {
...getDefaultConversation('convo-7'),
discoveredUnregisteredAt: Date.now(),
name: 'In System Contacts (and only recently unregistered)',
title: 'C. Sorted Third',
@ -623,18 +621,18 @@ describe('both/state/selectors/conversations', () => {
it('returns sorted contacts when there is no search term', () => {
const state = getRootState();
const result = getCandidateGroupContacts(state);
const result = getCandidateContactsForNewGroup(state);
const ids = result.map(contact => contact.id);
assert.deepEqual(ids, ['convo-1', 'convo-2', 'convo-7', 'convo-6']);
assert.deepEqual(ids, ['convo-1', 'convo-6']);
});
it('can search for contacts', () => {
const state = getRootState('system contacts');
const result = getCandidateGroupContacts(state);
const result = getCandidateContactsForNewGroup(state);
const ids = result.map(contact => contact.id);
assert.deepEqual(ids, ['convo-1', 'convo-7']);
assert.deepEqual(ids, ['convo-1', 'convo-6']);
});
});

View file

@ -0,0 +1,41 @@
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { getDefaultConversation } from '../helpers/getDefaultConversation';
import { filterAndSortContacts } from '../../util/filterAndSortContacts';
describe('filterAndSortContacts', () => {
const conversations = [
getDefaultConversation({
title: '+16505551234',
firstName: undefined,
profileName: undefined,
}),
getDefaultConversation({ title: 'Carlos Santana' }),
getDefaultConversation({ title: 'Aaron Aardvark' }),
getDefaultConversation({ title: 'Belinda Beetle' }),
getDefaultConversation({ title: 'Belinda Zephyr' }),
];
it('without a search term, sorts conversations by title', () => {
const titles = filterAndSortContacts(conversations, '').map(
contact => contact.title
);
assert.deepEqual(titles, [
'+16505551234',
'Aaron Aardvark',
'Belinda Beetle',
'Belinda Zephyr',
'Carlos Santana',
]);
});
it('filters conversations a search terms', () => {
const titles = filterAndSortContacts(conversations, 'belind').map(
contact => contact.title
);
assert.deepEqual(titles, ['Belinda Beetle', 'Belinda Zephyr']);
});
});