mattermost-mobile/app/components/post_body/system_message_helpers.test.js

140 lines
5.2 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {Posts} from '@mm-redux/constants';
import {renderWithRedux} from 'test/testing_library';
import * as SystemMessageHelpers from './system_message_helpers';
const basePostBodyProps = {
postProps: {
username: 'username',
},
onPress: jest.fn(),
};
const mockStyles = {
messageStyle: {},
textStyles: {},
};
const mockIntl = {
formatMessage: ({defaultMessage}) => defaultMessage,
};
describe('renderSystemMessage', () => {
test('uses renderer for Channel Header update', () => {
const postBodyProps = {
...basePostBodyProps,
postProps: {
...basePostBodyProps.postProps,
old_header: 'old header',
new_header: 'new header',
},
postType: Posts.POST_TYPES.HEADER_CHANGE,
};
const renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl);
const {getByText, toJSON} = renderWithRedux(renderedMessage);
expect(toJSON()).toMatchSnapshot();
expect(getByText('{username} updated the channel header from: {oldHeader} to: {newHeader}')).toBeTruthy();
});
test('uses renderer for Channel Display Name update', () => {
const postBodyProps = {
...basePostBodyProps,
postProps: {
...basePostBodyProps.postProps,
old_displayname: 'old displayname',
new_displayname: 'new displayname',
},
postType: Posts.POST_TYPES.DISPLAYNAME_CHANGE,
};
const renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl);
const {getByText, toJSON} = renderWithRedux(renderedMessage);
expect(toJSON()).toMatchSnapshot();
expect(getByText('{username} updated the channel display name from: {oldDisplayName} to: {newDisplayName}')).toBeTruthy();
});
test('uses renderer for Channel Purpose update', () => {
const postBodyProps = {
...basePostBodyProps,
postProps: {
...basePostBodyProps.postProps,
old_purpose: 'old purpose',
new_purpose: 'new purpose',
},
postType: Posts.POST_TYPES.PURPOSE_CHANGE,
};
const renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl);
const {getByText, toJSON} = renderWithRedux(renderedMessage);
expect(toJSON()).toMatchSnapshot();
expect(getByText('{username} updated the channel purpose from: {oldPurpose} to: {newPurpose}')).toBeTruthy();
});
test('uses renderer for archived channel', () => {
const postBodyProps = {
...basePostBodyProps,
postProps: {
...basePostBodyProps.postProps,
},
postType: Posts.POST_TYPES.CHANNEL_DELETED,
};
const renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl);
expect(renderedMessage).toMatchSnapshot();
const {getByText, toJSON} = renderWithRedux(renderedMessage);
expect(toJSON()).toMatchSnapshot();
expect(getByText('{username} archived the channel')).toBeTruthy();
});
test('uses renderer for OLD archived channel without a username', () => {
const postBodyProps = {
...basePostBodyProps,
postProps: {},
postType: Posts.POST_TYPES.CHANNEL_DELETED,
};
const renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl);
const {getByText, toJSON} = renderWithRedux(renderedMessage);
expect(toJSON()).toMatchSnapshot();
expect(getByText('{username} archived the channel')).toBeTruthy();
});
test('uses renderer for unarchived channel', () => {
const postBodyProps = {
...basePostBodyProps,
postProps: {
...basePostBodyProps.postProps,
},
postType: Posts.POST_TYPES.CHANNEL_UNARCHIVED,
};
let renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl);
const viewOne = renderWithRedux(renderedMessage);
expect(viewOne.toJSON()).toMatchSnapshot();
expect(viewOne.getByText('{username} unarchived the channel')).toBeTruthy();
const noUserInPostBodyProps = {
...basePostBodyProps,
postProps: {},
postType: Posts.POST_TYPES.CHANNEL_UNARCHIVED,
};
renderedMessage = SystemMessageHelpers.renderSystemMessage(noUserInPostBodyProps, mockStyles, mockIntl);
const viewTwo = renderWithRedux(renderedMessage);
expect(viewTwo.toJSON()).toBeNull();
expect(viewTwo.queryByText('{username} archived the channel')).toBeFalsy();
});
test('is null for non-qualifying system messages', () => {
const postBodyProps = {
...basePostBodyProps,
postType: 'not_relevant',
};
const renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl);
expect(renderedMessage).toBeNull();
});
});