signal-desktop/ts/test/components/LeftPane_test.tsx

224 lines
6 KiB
TypeScript
Raw Normal View History

import { expect } from 'chai';
import {
LeftPane,
RowType,
PropsType,
HeaderType,
} from '../../components/LeftPane';
import { setup as setupI18n } from '../../../js/modules/i18n';
import enMessages from '../../../_locales/en/messages.json';
const i18n = setupI18n('en', enMessages);
describe('LeftPane', () => {
/* eslint-disable @typescript-eslint/no-explicit-any */
const defaultProps = {
archivedConversations: [],
conversations: [],
i18n,
openConversationInternal: () => null,
pinnedConversations: [],
renderExpiredBuildDialog: () => '<div />' as any,
renderMainHeader: () => '<div />' as any,
renderMessageSearchResult: () => '<div />' as any,
renderNetworkStatus: () => '<div />' as any,
renderRelinkDialog: () => '<div />' as any,
renderUpdateDialog: () => '<div />' as any,
showArchivedConversations: () => null,
showInbox: () => null,
startNewConversation: () => null,
};
/* eslint-enable @typescript-eslint/no-explicit-any */
describe('getRowFromIndex', () => {
let leftPane: LeftPane;
describe('given only pinned chats', () => {
beforeEach(function beforeEach() {
const props: PropsType = {
...defaultProps,
pinnedConversations: [
{
id: 'philly-convo',
isPinned: true,
isSelected: false,
lastUpdated: Date.now(),
title: 'Philip Glass',
type: 'direct',
},
{
id: 'robbo-convo',
isPinned: true,
isSelected: false,
lastUpdated: Date.now(),
title: 'Robert Moog',
type: 'direct',
},
],
};
leftPane = new LeftPane(props);
});
it('return pinned chats, not headers', () => {
expect(leftPane.getRowFromIndex(0)).to.eql({
index: 0,
type: RowType.PinnedConversation,
});
expect(leftPane.getRowFromIndex(1)).to.eql({
index: 1,
type: RowType.PinnedConversation,
});
});
});
describe('given only non-pinned chats', () => {
it('returns conversations, not headers', () => {
const props: PropsType = {
...defaultProps,
conversations: [
{
id: 'fred-convo',
isSelected: false,
lastUpdated: Date.now(),
title: 'Fred Willard',
type: 'direct',
},
{
id: 'robbo-convo',
isPinned: false,
isSelected: false,
lastUpdated: Date.now(),
title: 'Robert Moog',
type: 'direct',
},
],
};
leftPane = new LeftPane(props);
expect(leftPane.getRowFromIndex(0)).to.eql({
index: 0,
type: RowType.Conversation,
});
expect(leftPane.getRowFromIndex(1)).to.eql({
index: 1,
type: RowType.Conversation,
});
});
});
describe('given only pinned and non-pinned chats', () => {
beforeEach(function beforeEach() {
const props: PropsType = {
...defaultProps,
conversations: [
{
id: 'fred-convo',
isSelected: false,
lastUpdated: Date.now(),
title: 'Fred Willard',
type: 'direct',
},
],
pinnedConversations: [
{
id: 'philly-convo',
isPinned: true,
isSelected: false,
lastUpdated: Date.now(),
title: 'Philip Glass',
type: 'direct',
},
],
};
leftPane = new LeftPane(props);
});
it('returns headers and conversations', () => {
expect(leftPane.getRowFromIndex(0)).to.eql({
headerType: HeaderType.Pinned,
type: RowType.Header,
});
expect(leftPane.getRowFromIndex(1)).to.eql({
index: 0,
type: RowType.PinnedConversation,
});
expect(leftPane.getRowFromIndex(2)).to.eql({
headerType: HeaderType.Chats,
type: RowType.Header,
});
expect(leftPane.getRowFromIndex(3)).to.eql({
index: 0,
type: RowType.Conversation,
});
});
});
describe('given not showing archive with archived conversation', () => {
beforeEach(function beforeEach() {
const props: PropsType = {
...defaultProps,
archivedConversations: [
{
id: 'jerry-convo',
isSelected: false,
lastUpdated: Date.now(),
title: 'Jerry Jordan',
type: 'direct',
},
],
conversations: [
{
id: 'fred-convo',
isSelected: false,
lastUpdated: Date.now(),
title: 'Fred Willard',
type: 'direct',
},
],
showArchived: false,
};
leftPane = new LeftPane(props);
});
it('returns an archive button last', () => {
expect(leftPane.getRowFromIndex(1)).to.eql({
type: RowType.ArchiveButton,
});
});
});
describe('given showing archive and archive chats', () => {
beforeEach(function beforeEach() {
const props: PropsType = {
...defaultProps,
archivedConversations: [
{
id: 'fred-convo',
isSelected: false,
lastUpdated: Date.now(),
title: 'Fred Willard',
type: 'direct',
},
],
showArchived: true,
};
leftPane = new LeftPane(props);
});
it('returns archived conversations', () => {
expect(leftPane.getRowFromIndex(0)).to.eql({
index: 0,
type: RowType.ArchivedConversation,
});
});
});
});
});