Avatar defaults and colors
This commit is contained in:
parent
a001882d58
commit
12d2b1bf7c
140 changed files with 4212 additions and 1084 deletions
|
@ -4,6 +4,7 @@
|
|||
import { v4 as generateUuid } from 'uuid';
|
||||
import { sample } from 'lodash';
|
||||
import { ConversationType } from '../../state/ducks/conversations';
|
||||
import { getRandomColor } from './getRandomColor';
|
||||
|
||||
const FIRST_NAMES = [
|
||||
'James',
|
||||
|
@ -323,6 +324,7 @@ export function getDefaultConversation(
|
|||
return {
|
||||
acceptedMessageRequest: true,
|
||||
e164: '+1300555000',
|
||||
color: getRandomColor(),
|
||||
firstName,
|
||||
id: generateUuid(),
|
||||
isGroupV2Capable: true,
|
||||
|
|
9
ts/test-both/helpers/getRandomColor.ts
Normal file
9
ts/test-both/helpers/getRandomColor.ts
Normal file
|
@ -0,0 +1,9 @@
|
|||
// Copyright 2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import { sample } from 'lodash';
|
||||
import { AvatarColors, AvatarColorType } from '../../types/Colors';
|
||||
|
||||
export function getRandomColor(): AvatarColorType {
|
||||
return sample(AvatarColors) || AvatarColors[0];
|
||||
}
|
|
@ -45,6 +45,13 @@ import { setup as setupI18n } from '../../../../js/modules/i18n';
|
|||
import enMessages from '../../../../_locales/en/messages.json';
|
||||
import { getDefaultConversation } from '../../helpers/getDefaultConversation';
|
||||
|
||||
function getDefaultComposeState() {
|
||||
return {
|
||||
isEditingAvatar: false,
|
||||
userAvatarData: [],
|
||||
};
|
||||
}
|
||||
|
||||
describe('both/state/selectors/conversations', () => {
|
||||
const getEmptyRootState = (): StateType => {
|
||||
return rootReducer(undefined, noopAction());
|
||||
|
@ -317,6 +324,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.ChooseGroupMembers as const,
|
||||
searchTerm: 'foo',
|
||||
selectedConversationIds: ['abc'],
|
||||
|
@ -340,6 +348,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: ['abc'],
|
||||
cantAddContactIdForModal: undefined,
|
||||
|
@ -384,6 +393,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: [],
|
||||
recommendedGroupSizeModalState: OneTimeModalState.NeverShown,
|
||||
|
@ -406,6 +416,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: [],
|
||||
recommendedGroupSizeModalState: OneTimeModalState.NeverShown,
|
||||
|
@ -447,6 +458,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: [],
|
||||
recommendedGroupSizeModalState: OneTimeModalState.NeverShown,
|
||||
|
@ -469,6 +481,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: [],
|
||||
recommendedGroupSizeModalState: OneTimeModalState.NeverShown,
|
||||
|
@ -1078,6 +1091,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
},
|
||||
},
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.ChooseGroupMembers,
|
||||
searchTerm,
|
||||
selectedConversationIds: ['abc'],
|
||||
|
@ -1139,6 +1153,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
cantAddContactIdForModal: undefined,
|
||||
searchTerm: '',
|
||||
groupAvatar: undefined,
|
||||
|
@ -1164,6 +1179,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
...getEmptyState(),
|
||||
conversationLookup: { abc123: conversation },
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
cantAddContactIdForModal: 'abc123',
|
||||
searchTerm: '',
|
||||
groupAvatar: undefined,
|
||||
|
@ -1602,6 +1618,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
cantAddContactIdForModal: undefined,
|
||||
searchTerm: 'to be cleared',
|
||||
groupAvatar: undefined,
|
||||
|
@ -1628,6 +1645,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
cantAddContactIdForModal: undefined,
|
||||
searchTerm: 'to be cleared',
|
||||
groupAvatar: undefined,
|
||||
|
@ -1654,6 +1672,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: ['abc'],
|
||||
cantAddContactIdForModal: undefined,
|
||||
|
@ -1676,6 +1695,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: ['abc'],
|
||||
cantAddContactIdForModal: undefined,
|
||||
|
@ -1703,6 +1723,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
conversations: {
|
||||
...getEmptyState(),
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: ['abc'],
|
||||
cantAddContactIdForModal: undefined,
|
||||
|
@ -1737,6 +1758,7 @@ describe('both/state/selectors/conversations', () => {
|
|||
},
|
||||
},
|
||||
composer: {
|
||||
...getDefaultComposeState(),
|
||||
step: ComposerStep.SetGroupMetadata as const,
|
||||
selectedConversationIds: ['convo-2', 'convo-1'],
|
||||
cantAddContactIdForModal: undefined,
|
||||
|
|
27
ts/test-both/types/Avatar_test.ts
Normal file
27
ts/test-both/types/Avatar_test.ts
Normal file
|
@ -0,0 +1,27 @@
|
|||
// Copyright 2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import { assert } from 'chai';
|
||||
|
||||
import { getDefaultAvatars } from '../../types/Avatar';
|
||||
|
||||
describe('Avatar', () => {
|
||||
describe('getDefaultAvatars', () => {
|
||||
it('returns an array of valid avatars for direct conversations', () => {
|
||||
assert.isNotEmpty(getDefaultAvatars(false));
|
||||
});
|
||||
|
||||
it('returns an array of valid avatars for group conversations', () => {
|
||||
assert.isNotEmpty(getDefaultAvatars(true));
|
||||
});
|
||||
|
||||
it('defaults to returning avatars for direct conversations', () => {
|
||||
const defaultResult = getDefaultAvatars();
|
||||
const directResult = getDefaultAvatars(false);
|
||||
const groupResult = getDefaultAvatars(true);
|
||||
|
||||
assert.deepEqual(defaultResult, directResult);
|
||||
assert.notDeepEqual(defaultResult, groupResult);
|
||||
});
|
||||
});
|
||||
});
|
35
ts/test-both/util/getAvatarData_test.ts
Normal file
35
ts/test-both/util/getAvatarData_test.ts
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright 2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import { assert } from 'chai';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import { getRandomColor } from '../helpers/getRandomColor';
|
||||
|
||||
import { getAvatarData } from '../../util/getAvatarData';
|
||||
|
||||
describe('getAvatarData', () => {
|
||||
it('returns existing avatars if present', () => {
|
||||
const avatars = [
|
||||
{
|
||||
id: uuid(),
|
||||
color: getRandomColor(),
|
||||
text: 'Avatar A',
|
||||
},
|
||||
{
|
||||
id: uuid(),
|
||||
color: getRandomColor(),
|
||||
text: 'Avatar B',
|
||||
},
|
||||
];
|
||||
|
||||
assert.strictEqual(getAvatarData({ avatars, type: 'private' }), avatars);
|
||||
assert.strictEqual(getAvatarData({ avatars, type: 'group' }), avatars);
|
||||
});
|
||||
|
||||
it('returns a non-empty array if no avatars are provided', () => {
|
||||
assert.isNotEmpty(getAvatarData({ type: 'private' }));
|
||||
assert.isNotEmpty(getAvatarData({ type: 'group' }));
|
||||
assert.isNotEmpty(getAvatarData({ avatars: [], type: 'private' }));
|
||||
assert.isNotEmpty(getAvatarData({ avatars: [], type: 'group' }));
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue