Avatar defaults and colors

This commit is contained in:
Josh Perez 2021-08-05 20:17:05 -04:00 committed by GitHub
parent a001882d58
commit 12d2b1bf7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
140 changed files with 4212 additions and 1084 deletions

View file

@ -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,

View 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];
}

View file

@ -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,

View 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);
});
});
});

View 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' }));
});
});