import {mountWithTheme} from 'sentry-test/enzyme';
import Annotated from 'sentry/components/events/meta/annotated';
import {withMeta} from 'sentry/components/events/meta/metaProxy';
describe('Annotated', () => {
const mock = jest.fn(() => null);
const createEvent = (value, {err, rem, chunks} = {}) =>
withMeta({
value,
_meta: {
value: {
'': {
err: err || [],
rem: rem || [],
chunks: chunks || [],
},
},
},
});
beforeEach(function () {
mock.mockClear();
});
describe('without meta', () => {
it('renders a string', () => {
const obj = {
value: 'foo',
};
mountWithTheme(
{mock}
);
expect(mock.mock.calls[0][0].props).toEqual(
expect.objectContaining({
value: 'foo',
})
);
});
it('does not error if prop does not exist on object', () => {
const obj = {
value: 'foo',
};
mountWithTheme();
});
it('renders a number', () => {
const obj = {
value: 0,
};
mountWithTheme(
{mock}
);
expect(mock.mock.calls[0][0].props).toEqual(
expect.objectContaining({
value: 0,
})
);
});
it('renders a boolean', () => {
const obj = {
value: false,
};
mountWithTheme(
{mock}
);
expect(mock.mock.calls[0][0].props).toEqual(
expect.objectContaining({
value: false,
})
);
});
it('ignores empty meta data', () => {
const obj = withMeta({
value: 'foo',
_meta: {
value: {
'': {
err: [],
rem: [],
chunks: [],
},
},
},
});
mountWithTheme(
{mock}
);
expect(mock.mock.calls[0][0].props).toEqual(
expect.objectContaining({
value: 'foo',
})
);
});
it('does not call render prop if required and value is falsy and no meta', () => {
const obj = createEvent(null, {});
mountWithTheme(
{mock}
);
expect(mock).not.toHaveBeenCalled();
});
});
describe('with meta', () => {
it('annotates errors', () => {
const meta = {err: ['something']};
const obj = createEvent('foo', meta);
mountWithTheme(
{mock}
);
expect(mock.mock.calls[0][0].props).toEqual(
expect.objectContaining({
value: 'foo',
meta: {
chunks: [],
rem: [],
...meta,
},
})
);
});
it('annotates remarks and chunks', () => {
const meta = {rem: [{type: 't'}], chunks: [{text: 'foo'}]};
const obj = createEvent('foo', meta);
mountWithTheme(
{mock}
);
expect(mock.mock.calls[0][0].props).toEqual(
expect.objectContaining({
value: 'foo',
meta: {
err: [],
...meta,
},
})
);
});
it('annotates redacted text', () => {
const meta = {err: ['something']};
const obj = createEvent(null, meta);
mountWithTheme(
{mock}
);
expect(mock.mock.calls[0][0].props).toEqual(
expect.objectContaining({
value: null,
meta: {
rem: [],
chunks: [],
...meta,
},
})
);
});
});
});