// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import renderer from 'react-test-renderer'; import {Posts} from '@mm-redux/constants'; 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); expect(renderedMessage).toMatchSnapshot(); }); 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); expect(renderedMessage).toMatchSnapshot(); }); 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 tree = renderer.create(renderedMessage).toJSON(); expect(tree).toMatchSnapshot(); expect(tree.type).toEqual('Text'); }); 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(); }); 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); expect(renderedMessage).toMatchSnapshot(); }); 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); expect(renderedMessage).toMatchSnapshot(); const noUserInPostBodyProps = { ...basePostBodyProps, postProps: {}, postType: Posts.POST_TYPES.CHANNEL_UNARCHIVED, }; renderedMessage = SystemMessageHelpers.renderSystemMessage(noUserInPostBodyProps, mockStyles, mockIntl); expect(renderedMessage).toMatchSnapshot(); }); test('is null for non-qualifying system messages', () => { const postBodyProps = { ...basePostBodyProps, postType: 'not_relevant', }; const renderedMessage = SystemMessageHelpers.renderSystemMessage(postBodyProps, mockStyles, mockIntl); expect(renderedMessage).toBeNull(); }); });