2021-06-25 16:08:16 +00:00
|
|
|
// Copyright 2021 Signal Messenger, LLC
|
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
|
|
|
import { assert } from 'chai';
|
2021-08-09 20:06:21 +00:00
|
|
|
import * as sinon from 'sinon';
|
2021-06-25 16:08:16 +00:00
|
|
|
|
|
|
|
import { actions, getEmptyState, reducer } from '../../../state/ducks/composer';
|
2021-08-09 20:06:21 +00:00
|
|
|
import { noopAction } from '../../../state/ducks/noop';
|
|
|
|
import { reducer as rootReducer } from '../../../state/reducer';
|
2021-06-25 16:08:16 +00:00
|
|
|
|
|
|
|
import { IMAGE_JPEG } from '../../../types/MIME';
|
2021-11-15 21:54:33 +00:00
|
|
|
import type { AttachmentDraftType } from '../../../types/Attachment';
|
|
|
|
import { fakeDraftAttachment } from '../../helpers/fakeAttachment';
|
2021-06-25 16:08:16 +00:00
|
|
|
|
|
|
|
describe('both/state/ducks/composer', () => {
|
|
|
|
const QUOTED_MESSAGE = {
|
|
|
|
conversationId: '123',
|
|
|
|
quote: {
|
|
|
|
attachments: [],
|
2021-07-09 19:36:10 +00:00
|
|
|
id: 456,
|
2021-06-25 16:08:16 +00:00
|
|
|
isViewOnce: false,
|
2022-05-11 20:59:58 +00:00
|
|
|
isGiftBadge: false,
|
2021-06-25 16:08:16 +00:00
|
|
|
messageId: '789',
|
|
|
|
referencedMessageNotFound: false,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2021-08-09 20:06:21 +00:00
|
|
|
const getRootStateFunction = (selectedConversationId?: string) => {
|
|
|
|
const state = rootReducer(undefined, noopAction());
|
|
|
|
return () => ({
|
|
|
|
...state,
|
|
|
|
conversations: {
|
|
|
|
...state.conversations,
|
|
|
|
selectedConversationId,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2021-06-25 16:08:16 +00:00
|
|
|
describe('replaceAttachments', () => {
|
|
|
|
it('replaces the attachments state', () => {
|
|
|
|
const { replaceAttachments } = actions;
|
2021-08-09 20:06:21 +00:00
|
|
|
const dispatch = sinon.spy();
|
|
|
|
|
2021-11-15 21:54:33 +00:00
|
|
|
const attachments: Array<AttachmentDraftType> = [
|
|
|
|
{
|
|
|
|
contentType: IMAGE_JPEG,
|
|
|
|
pending: true,
|
|
|
|
size: 2433,
|
|
|
|
path: 'image.jpg',
|
|
|
|
},
|
2021-09-24 20:02:30 +00:00
|
|
|
];
|
2021-08-09 20:06:21 +00:00
|
|
|
replaceAttachments('123', attachments)(
|
|
|
|
dispatch,
|
|
|
|
getRootStateFunction('123'),
|
|
|
|
null
|
|
|
|
);
|
2021-06-25 16:08:16 +00:00
|
|
|
|
2021-08-09 20:06:21 +00:00
|
|
|
const action = dispatch.getCall(0).args[0];
|
|
|
|
const state = reducer(getEmptyState(), action);
|
|
|
|
assert.deepEqual(state.attachments, attachments);
|
2021-06-25 16:08:16 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
it('sets the high quality setting to false when there are no attachments', () => {
|
|
|
|
const { replaceAttachments } = actions;
|
2021-08-09 20:06:21 +00:00
|
|
|
const dispatch = sinon.spy();
|
2021-11-15 21:54:33 +00:00
|
|
|
const attachments: Array<AttachmentDraftType> = [];
|
2021-08-09 20:06:21 +00:00
|
|
|
|
|
|
|
replaceAttachments('123', attachments)(
|
|
|
|
dispatch,
|
|
|
|
getRootStateFunction('123'),
|
|
|
|
null
|
|
|
|
);
|
|
|
|
|
|
|
|
const action = dispatch.getCall(0).args[0];
|
|
|
|
const state = reducer(
|
|
|
|
{
|
|
|
|
...getEmptyState(),
|
|
|
|
shouldSendHighQualityAttachments: true,
|
|
|
|
},
|
|
|
|
action
|
|
|
|
);
|
|
|
|
assert.deepEqual(state.attachments, attachments);
|
|
|
|
|
|
|
|
assert.deepEqual(state.attachments, attachments);
|
2022-12-02 23:54:37 +00:00
|
|
|
assert.isUndefined(state.shouldSendHighQualityAttachments);
|
2021-08-09 20:06:21 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
it('does not update redux if the conversation is not selected', () => {
|
|
|
|
const { replaceAttachments } = actions;
|
|
|
|
const dispatch = sinon.spy();
|
|
|
|
|
2021-11-15 21:54:33 +00:00
|
|
|
const attachments = [fakeDraftAttachment()];
|
2021-08-09 20:06:21 +00:00
|
|
|
replaceAttachments('123', attachments)(
|
|
|
|
dispatch,
|
|
|
|
getRootStateFunction('456'),
|
|
|
|
null
|
2021-06-25 16:08:16 +00:00
|
|
|
);
|
|
|
|
|
2021-08-09 20:06:21 +00:00
|
|
|
assert.isNull(dispatch.getCall(0));
|
2021-06-25 16:08:16 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('resetComposer', () => {
|
|
|
|
it('returns composer back to empty state', () => {
|
|
|
|
const { resetComposer } = actions;
|
2022-12-08 07:43:48 +00:00
|
|
|
const emptyState = getEmptyState();
|
2021-06-25 16:08:16 +00:00
|
|
|
const nextState = reducer(
|
|
|
|
{
|
|
|
|
attachments: [],
|
2022-12-08 23:56:17 +00:00
|
|
|
focusCounter: 0,
|
2022-12-08 07:43:48 +00:00
|
|
|
isDisabled: false,
|
2021-06-25 16:08:16 +00:00
|
|
|
linkPreviewLoading: true,
|
2022-12-08 07:43:48 +00:00
|
|
|
messageCompositionId: emptyState.messageCompositionId,
|
2021-06-25 16:08:16 +00:00
|
|
|
quotedMessage: QUOTED_MESSAGE,
|
|
|
|
shouldSendHighQualityAttachments: true,
|
|
|
|
},
|
|
|
|
resetComposer()
|
|
|
|
);
|
|
|
|
|
2022-12-08 07:43:48 +00:00
|
|
|
assert.deepEqual(nextState, {
|
|
|
|
...getEmptyState(),
|
|
|
|
messageCompositionId: nextState.messageCompositionId,
|
|
|
|
});
|
2021-06-25 16:08:16 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('setMediaQualitySetting', () => {
|
|
|
|
it('toggles the media quality setting', () => {
|
|
|
|
const { setMediaQualitySetting } = actions;
|
|
|
|
const state = getEmptyState();
|
|
|
|
|
2022-12-02 23:54:37 +00:00
|
|
|
assert.isUndefined(state.shouldSendHighQualityAttachments);
|
2021-06-25 16:08:16 +00:00
|
|
|
|
|
|
|
const nextState = reducer(state, setMediaQualitySetting(true));
|
|
|
|
|
|
|
|
assert.isTrue(nextState.shouldSendHighQualityAttachments);
|
|
|
|
|
|
|
|
const nextNextState = reducer(nextState, setMediaQualitySetting(false));
|
|
|
|
|
|
|
|
assert.isFalse(nextNextState.shouldSendHighQualityAttachments);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('setQuotedMessage', () => {
|
|
|
|
it('sets the quoted message', () => {
|
|
|
|
const { setQuotedMessage } = actions;
|
|
|
|
const state = getEmptyState();
|
|
|
|
const nextState = reducer(state, setQuotedMessage(QUOTED_MESSAGE));
|
|
|
|
|
|
|
|
assert.equal(nextState.quotedMessage?.conversationId, '123');
|
2021-07-09 19:36:10 +00:00
|
|
|
assert.equal(nextState.quotedMessage?.quote?.id, 456);
|
2021-06-25 16:08:16 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|