/*
* Wire
* Copyright (C) 2022 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
*/
import {render} from '@testing-library/react';
import {Conversation} from 'src/script/entity/Conversation';
import {ContentMessage} from 'src/script/entity/message/ContentMessage';
import {FileAsset} from 'src/script/entity/message/FileAsset';
import {LinkPreview} from 'src/script/entity/message/LinkPreview';
import {MediumImage} from 'src/script/entity/message/MediumImage';
import {MessageCategory} from 'src/script/message/MessageCategory';
import {createUuid} from 'Util/uuid';
import {CollectionDetails} from './CollectionDetails';
import {Text} from '../../../../entity/message/Text';
jest.mock('Components/Image', () => ({
AssetImage: () =>
Image
,
__esModule: true,
}));
jest.mock('Components/MessagesList/Message/ContentMessage/asset/AudioAsset', () => ({
AudioAsset: () => Audio
,
__esModule: true,
}));
jest.mock('Components/MessagesList/Message/ContentMessage/asset/FileAssetComponent', () => ({
FileAsset: () => File
,
__esModule: true,
}));
jest.mock('Components/MessagesList/Message/ContentMessage/asset/LinkPreviewAssetComponent', () => ({
LinkPreviewAsset: () => Link Preview
,
__esModule: true,
}));
const createImageMessage = (timestamp: number = Date.now()) => {
const message = new ContentMessage(createUuid());
message.timestamp(timestamp);
const image = new MediumImage(createUuid());
image.resource({} as any);
message.assets.push(image);
message.category = MessageCategory.IMAGE;
return message;
};
const createFileMessage = () => {
const message = new ContentMessage(createUuid());
const file = new FileAsset(createUuid());
message.assets.push(file);
message.category = MessageCategory.FILE;
return message;
};
const createLinkMessage = () => {
const message = new ContentMessage(createUuid());
const link = new Text(createUuid());
link.previews.push(new LinkPreview({}));
message.assets.push(link);
message.category = MessageCategory.LINK_PREVIEW;
return message;
};
const createAudioMessage = () => {
const message = new ContentMessage(createUuid());
const audio = new FileAsset(createUuid());
spyOn(audio, 'isAudio').and.returnValue(true);
message.assets.push(audio);
message.category = MessageCategory.FILE;
return message;
};
describe('CollectionDetails', () => {
const conversation = new Conversation();
it('displays all image assets', async () => {
const messages = [createImageMessage(), createImageMessage()];
const {getAllByText} = render();
expect(getAllByText('Image')).toHaveLength(messages.length);
});
it('displays all file assets', async () => {
const messages = [createFileMessage(), createFileMessage()];
const {getAllByText} = render();
expect(getAllByText('File')).toHaveLength(messages.length);
});
it('displays all link preview assets', async () => {
const messages = [createLinkMessage(), createLinkMessage()];
const {getAllByText} = render();
expect(getAllByText('Link Preview')).toHaveLength(messages.length);
});
it('displays all audio assets', async () => {
const messages = [createAudioMessage(), createAudioMessage()];
const {getAllByText} = render();
expect(getAllByText('Audio')).toHaveLength(messages.length);
});
it('groups assets by month', async () => {
jest.useFakeTimers();
jest.setSystemTime(1647298800000); // March 15 2022 00:00:00
const ONE_DAY = 24 * 60 * 60 * 1000;
const ONE_MONTH = 30 * ONE_DAY;
const ONE_YEAR = 12 * ONE_MONTH;
const now = Date.now();
const messages = [
createImageMessage(),
createImageMessage(now - ONE_DAY),
createImageMessage(now - ONE_MONTH),
createImageMessage(now - ONE_YEAR),
];
const {getAllByText} = render();
expect(getAllByText('Image')).toHaveLength(messages.length);
expect(getAllByText('conversationToday')).toHaveLength(1);
expect(getAllByText('March')).toHaveLength(1);
expect(getAllByText('February')).toHaveLength(1);
expect(getAllByText('March 2021')).toHaveLength(1);
});
});