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"]');
});
});