import { expect } from 'chai' import React from 'react' import { screen, render } from '@testing-library/react' import Message from '../../../../../frontend/js/features/chat/components/message' import { stubGlobalUser, stubMathJax, stubUIConfig, tearDownGlobalUserStub, tearDownMathJaxStubs, tearDownUIConfigStubs } from './stubs' describe('', function() { const currentUser = { id: 'fake_user', first_name: 'fake_user_first_name', email: 'fake@example.com' } before(function() { stubGlobalUser(currentUser) // required by ColorManager stubUIConfig() stubMathJax() }) after(function() { tearDownGlobalUserStub() tearDownUIConfigStubs() tearDownMathJaxStubs() }) it('renders a basic message', function() { const message = { contents: ['a message'], user: currentUser } render() screen.getByText('a message') }) it('renders a message with multiple contents', function() { const message = { contents: ['a message', 'another message'], user: currentUser } render() screen.getByText('a message') screen.getByText('another message') }) it('renders HTML links within messages', function() { const message = { contents: [ 'a message with a link to Overleaf' ], user: currentUser } render() screen.getByRole('link', { name: 'https://overleaf.com' }) }) describe('when the message is from the user themselves', function() { const message = { contents: ['a message'], user: currentUser } it('does not render the user name nor the email', function() { render() expect(screen.queryByText(currentUser.first_name)).to.not.exist expect(screen.queryByText(currentUser.email)).to.not.exist }) }) describe('when the message is from other user', function() { const otherUser = { id: 'other_user', first_name: 'other_user_first_name' } const message = { contents: ['a message'], user: otherUser } it('should render the other user name', function() { render() screen.getByText(otherUser.first_name) }) it('should render the other user email when their name is not available', function() { const msg = { contents: message.contents, user: { id: otherUser.id, email: 'other@example.com' } } render() expect(screen.queryByText(otherUser.first_name)).to.not.exist screen.getByText(msg.user.email) }) }) })