/*
* Wire
* Copyright (C) 2024 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 * as Icon from 'Components/Icon';
import {createLabel, LabelType} from 'src/script/conversation/ConversationLabelRepository';
import {Conversation} from 'src/script/entity/Conversation';
import {TestFactory} from 'test/helper/TestFactory';
import {ConversationFolderTab} from './ConversationFolderTab';
import {SidebarTabs} from '../useSidebarStore';
const getProps = async (conversations: Conversation[] = []) => {
const testFactory = new TestFactory();
const conversationRepository = await testFactory.exposeConversationActors();
conversationRepository['conversationState'].conversations(conversations);
return {
props: {
title: 'title',
label: 'label',
type: SidebarTabs.FOLDER,
conversationTabIndex: 0,
onChangeTab: () => {},
Icon: ,
conversationRepository,
unreadConversations: [] as Conversation[],
dataUieName: 'dataUieName',
},
conversationRepository,
};
};
describe('ConversationFolderTab', () => {
it('should render empty folders list', async () => {
const {props} = await getProps();
const {getByText} = render();
expect(getByText('conversationFoldersEmptyText')).toBeDefined();
});
it('should list custom folders only', async () => {
const favoriteConversation = new Conversation('id', 'domain');
favoriteConversation.name('favoriteConversation');
const customFolderConversation = new Conversation('id2', 'domain2');
customFolderConversation.name('customFolderConversation');
const {props, conversationRepository} = await getProps([favoriteConversation, customFolderConversation]);
conversationRepository['conversationLabelRepository'].addConversationToFavorites(favoriteConversation);
const customFolderName = 'customFolder';
const customFolder = createLabel(customFolderName, [customFolderConversation], 'id', LabelType.Custom);
const customFolderName2 = 'customFolder2';
const customFolder2 = createLabel(customFolderName2, [customFolderConversation], 'id', LabelType.Custom);
const customFavoriteFolderName = 'customFavoriteFolder';
const customFavoriteFolder = createLabel(
customFavoriteFolderName,
[favoriteConversation],
'id',
LabelType.Favorite,
);
conversationRepository['conversationLabelRepository'].labels([customFolder, customFolder2, customFavoriteFolder]);
conversationRepository['conversationLabelRepository'].addConversationToLabel(
customFolder,
customFolderConversation,
);
const {queryByText} = render();
expect(queryByText(customFolderName)).not.toBeNull();
expect(queryByText(customFolderName2)).not.toBeNull();
expect(queryByText(customFavoriteFolderName)).toBeNull();
});
});