import {render, screen} from 'sentry-test/reactTestingLibrary'; import { BreadcrumbLevelType, BreadcrumbType, BreadcrumbTypeDefault, } from 'sentry/types/breadcrumbs'; import {MessageFormatter} from 'sentry/views/replays/detail/console/consoleMessage'; const breadcrumbs: BreadcrumbTypeDefault[] = [ { type: BreadcrumbType.DEBUG, category: 'console', data: { arguments: ['This is a %s', 'test'], logger: 'console', }, level: BreadcrumbLevelType.LOG, message: 'This is a %s test', timestamp: '2022-06-22T20:00:39.959Z', }, { type: BreadcrumbType.DEBUG, category: 'console', data: { arguments: ['test', 1, false, {}], logger: 'console', }, level: BreadcrumbLevelType.LOG, message: 'test 1 false [object Object]', timestamp: '2022-06-22T16:49:11.198Z', }, { type: BreadcrumbType.DEBUG, category: 'console', data: { arguments: [{}], logger: 'console', }, level: BreadcrumbLevelType.ERROR, message: 'Error: this is my error message', timestamp: '2022-06-22T20:00:39.958Z', }, { type: BreadcrumbType.DEBUG, category: 'console', data: { arguments: [{}], logger: 'console', }, level: BreadcrumbLevelType.ERROR, timestamp: '2022-06-22T20:00:39.958Z', }, { type: BreadcrumbType.DEBUG, category: 'console', data: { arguments: [ '%c prev state', 'color: #9E9E9E; font-weight: bold', { cart: [], }, ], logger: 'console', }, level: BreadcrumbLevelType.LOG, message: '%c prev state color: #9E9E9E; font-weight: bold [object Object]', timestamp: '2022-06-09T00:50:25.273Z', }, { type: BreadcrumbType.DEBUG, category: 'console', data: { arguments: ['test', ['foo', 'bar']], logger: 'console', }, level: BreadcrumbLevelType.LOG, message: 'test foo,bar', timestamp: '2022-06-23T17:09:31.158Z', }, ]; describe('MessageFormatter', () => { it('Should print console message with placeholders correctly', () => { render(); expect(screen.getByRole('text')).toHaveTextContent('This is a test'); }); it('Should print console message with objects correctly', () => { render(); expect(screen.getByRole('text')).toHaveTextContent('test 1 false {}'); }); it('Should print console message correctly when it is an Error object', () => { render(); expect(screen.getByRole('text')).toHaveTextContent('Error: this is my error message'); }); it('Should print empty object in case there is no message prop', () => { render(); expect(screen.getByRole('text')).toHaveTextContent('{}'); }); it('Should ignore the "%c" placheholder and print the console message correctly', () => { render(); expect(screen.getByRole('text')).toHaveTextContent('prev state {"cart":[]}'); }); it('Should print arrays correctly', () => { render(); expect(screen.getByRole('text')).toHaveTextContent('test ["foo","bar"]'); }); });