import { faker } from '@faker-js/faker';
import type { IMessage } from '@rocket.chat/core-typings';
import { mockAppRoot } from '@rocket.chat/mock-providers';
import { Random } from '@rocket.chat/random';
import { render, screen } from '@testing-library/react';
import SystemMessage from './SystemMessage';
jest.mock('../content/Attachments', () => ({
default: () =>
attachments
,
}));
jest.mock('../content/MessageActions', () => ({
default: () => message actions
,
}));
jest.mock('meteor/meteor', () => {
const actual = jest.requireActual('meteor/meteor');
return {
...actual,
Meteor: {
...actual.Meteor,
startup: (callback: () => void) => callback(),
},
};
});
const wrapper = mockAppRoot().withTranslations('en', 'core', {
changed_room_description_to__room_description_: 'changed room description to: {{room_description}}',
});
const createBaseMessage = (msg: string): IMessage => ({
_id: Random.id(),
t: 'room_changed_description',
rid: Random.id(),
ts: new Date(),
msg,
u: {
_id: Random.id(),
username: faker.person.firstName().toLocaleLowerCase(),
name: faker.person.fullName(),
},
groupable: false,
_updatedAt: new Date(),
});
describe('SystemMessage', () => {
it('should render system message', () => {
const message = createBaseMessage('& test &');
render(, { wrapper: wrapper.build() });
expect(screen.getByText('changed room description to: & test &')).toBeInTheDocument();
});
it('should not show escaped html while rendering system message', () => {
const message = createBaseMessage('& test &');
render(, { wrapper: wrapper.build() });
expect(screen.getByText('changed room description to: & test &')).toBeInTheDocument();
expect(screen.queryByText('changed room description to: & test &')).not.toBeInTheDocument();
});
it('should not inject html', () => {
const message = createBaseMessage('');
render(, { wrapper: wrapper.build() });
expect(screen.queryByTitle('test-title')).not.toBeInTheDocument();
expect(screen.getByText('changed room description to: ')).toBeInTheDocument();
});
});