/*
* 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 {act, render} from '@testing-library/react';
import type {QualifiedUserClients} from '@wireapp/api-client/lib/conversation';
import {QualifiedId} from '@wireapp/api-client/lib/user';
import en from 'I18n/en-US.json';
import {generateQualifiedIds, generateUserClients, generateUsers, withTheme} from 'src/script/auth/util/test/TestUtil';
import {setStrings} from 'Util/LocalizerUtil';
import {PartialFailureToSendWarning} from './PartialFailureToSend';
setStrings({en});
describe('PartialFailureToSendWarning', () => {
it('displays the number of users that did not get the message', () => {
const nbUsers = Math.floor(Math.random() * 100) + 2;
const users = generateUsers(nbUsers, 'domain');
const queued = generateUserClients(users);
const {container} = render(
withTheme(),
);
expect(container.textContent).toContain(`${nbUsers} participants didn't get your message`);
});
it('displays the number of named users that did not get the message across multiple domains', () => {
const nbUsersDomain1 = Math.floor(Math.random() * 100) + 2;
const nbUsersDomain2 = Math.floor(Math.random() * 100);
const users1 = generateUsers(nbUsersDomain1, 'domain1');
const users2 = generateUsers(nbUsersDomain2, 'domain2');
const queued = {
...generateUserClients(users1),
...generateUserClients(users2),
};
const {container} = render(
withTheme(),
);
expect(container.textContent).toContain(`${nbUsersDomain1 + nbUsersDomain2} participants didn't get your message`);
});
it('displays the number of unreachable users that did not get the message across multiple domains', () => {
const nbUsersDomain1 = Math.floor(Math.random() * 100) + 2;
const nbUsersDomain2 = Math.floor(Math.random() * 100);
const users1 = generateQualifiedIds(nbUsersDomain1, 'domain1');
const users2 = generateQualifiedIds(nbUsersDomain2, 'domain2');
const failed = [...users1, ...users2];
const {container} = render(
withTheme(),
);
expect(container.textContent).toContain(`${nbUsersDomain1 + nbUsersDomain2} participants didn't get your message`);
});
it('displays the number of users, named or unreachable that did not get the message across multiple domains', () => {
const nbUsersDomain1 = Math.floor(Math.random() * 100) + 2;
const nbUsersDomain2 = Math.floor(Math.random() * 100);
const users1 = generateUsers(nbUsersDomain1, 'domain1');
const users2 = generateUsers(nbUsersDomain2, 'domain2');
const queued = {
...generateUserClients(users1),
...generateUserClients(users2),
};
const nbUnreachableUsersDomain1 = Math.floor(Math.random() * 100);
const nbUnreachableUsersDomain2 = Math.floor(Math.random() * 100);
const unreachableUsers1 = generateQualifiedIds(nbUnreachableUsersDomain1, 'domain1');
const unreachableUsers2 = generateQualifiedIds(nbUnreachableUsersDomain2, 'domain2');
const failed = [...unreachableUsers1, ...unreachableUsers2];
const {container} = render(
withTheme(),
);
expect(container.textContent).toContain(
`${
nbUsersDomain1 + nbUsersDomain2 + nbUnreachableUsersDomain1 + nbUnreachableUsersDomain2
} participants didn't get your message`,
);
});
it('does not show the extra info toggle if there is only a single named user', () => {
const users = generateUsers(1, 'domain');
const queued = generateUserClients(users);
const {queryByText, container} = render(
withTheme(),
);
expect(queryByText('Show details')).toBeNull();
expect(container.textContent).toContain(`${users[0].name()} will get your message later`);
});
it('does not show the extra info toggle if there is only a single unreachable user', () => {
const users = generateQualifiedIds(1, 'domain');
const failed = users;
const {queryByText, container} = render(
withTheme(),
);
expect(queryByText('Show details')).toBeNull();
expect(container.textContent).toContain(`1 participant from domain won't get your message`);
});
it('toggles the extra info', () => {
const queued = generateUserClients(generateUsers(2, 'domain'));
const {getByText} = render(
withTheme(),
);
act(() => {
getByText('Show details').click();
});
expect(getByText('Hide details')).not.toBeNull();
act(() => {
getByText('Hide details').click();
});
expect(getByText('Show details')).not.toBeNull();
});
it('displays the username of participant that could not receive the message', () => {
const nbUsers = Math.floor(Math.random() * 10) + 2;
const users = generateUsers(nbUsers, 'domain');
const queued = generateUserClients(users);
const {getByText, getAllByTestId} = render(
withTheme(),
);
act(() => {
getByText('Show details').click();
});
expect(getAllByTestId('named-user')).toHaveLength(nbUsers);
expect(getByText('Hide details')).not.toBeNull();
});
it('displays both the username of named participants and the correct domain of unreachable users when applicable', () => {
const nbNamedUsers = Math.floor(Math.random() * 10) + 2;
const namedUsers = generateUsers(nbNamedUsers, 'domain');
const queued = generateUserClients(namedUsers);
const nbUsersDomain1 = Math.floor(Math.random() * 10) + 2;
const nbUsersDomain2 = Math.floor(Math.random() * 10) + 2;
const failed = [
...generateQualifiedIds(nbUsersDomain1, 'domain1'),
...generateQualifiedIds(nbUsersDomain2, 'domain2'),
];
const {getByText, getAllByTestId, container} = render(
withTheme(
,
),
);
act(() => {
getByText('Show details').click();
});
expect(getAllByTestId('named-user')).toHaveLength(nbNamedUsers);
expect(container.textContent).toContain(
`${nbUsersDomain1} participants from domain1, ${nbUsersDomain2} participants from domain2 won't get your message`,
);
});
it('displays the info toggle when there is a single named user and a single unreachable user', () => {
const namedUsers = generateUsers(1, 'domain1');
const queued = generateUserClients(namedUsers);
const failed = [...generateQualifiedIds(1, 'domain2')];
const {getByText} = render(
withTheme(
,
),
);
act(() => {
getByText('Show details').click();
});
expect(getByText('Hide details')).not.toBeNull();
act(() => {
getByText('Hide details').click();
});
expect(getByText('Show details')).not.toBeNull();
});
it('does not display an unreachable user warning if there are no unreachable users', () => {
const namedUsers = generateUsers(2, 'domain1');
const queued = generateUserClients(namedUsers);
const failed = [] as QualifiedId[];
const {getByText, container} = render(
withTheme(
,
),
);
act(() => {
getByText('Show details').click();
});
expect(container.textContent).not.toContain(`won't get your message`);
});
it('does not display a named user warning if there are no named users', () => {
const failed = [...generateQualifiedIds(2, 'domain2')];
const queued = {} as QualifiedUserClients;
const {getByText, container} = render(
withTheme(),
);
act(() => {
getByText('Show details').click();
});
expect(container.textContent).not.toContain(`will get your message later`);
});
});