import {mountWithTheme} from 'sentry-test/enzyme';
import KeyValueList from 'sentry/components/events/interfaces/keyValueList';
describe('KeyValueList', function () {
describe('render', function () {
it('should render a definition list of key/value pairs', function () {
const data = [
{key: 'a', value: 'x', subject: 'a'},
{key: 'b', value: 'y', subject: 'b'},
];
const wrapper = mountWithTheme();
expect(wrapper.find('td.key').at(0).text()).toEqual('a');
expect(wrapper.find('td.key').at(1).text()).toEqual('b');
expect(wrapper.find('td.val').at(0).text()).toEqual('x');
expect(wrapper.find('td.val').at(1).text()).toEqual('y');
});
it('should sort sort key/value pairs', function () {
const data = [
{key: 'b', value: 'y', subject: 'b'},
{key: 'a', value: 'x', subject: 'a'},
];
const wrapper = mountWithTheme();
expect(wrapper.find('td.key').at(0).text()).toEqual('a');
expect(wrapper.find('td.key').at(1).text()).toEqual('b');
expect(wrapper.find('td.val').at(0).text()).toEqual('x');
expect(wrapper.find('td.val').at(1).text()).toEqual('y');
});
it('should use a single space for values that are an empty string', function () {
const data = [
{key: 'b', value: 'y', subject: 'b'},
{key: 'a', value: '', subject: 'a'}, // empty string
];
const wrapper = mountWithTheme();
expect(wrapper.find('td.key').at(0).text()).toEqual('a');
expect(wrapper.find('td.key').at(1).text()).toEqual('b');
expect(wrapper.find('td.val').at(0).text()).toEqual('');
expect(wrapper.find('td.val').at(1).text()).toEqual('y');
});
it('can sort key/value pairs with non-string values', function () {
const data = [
{key: 'b', value: {foo: 'bar'}, subject: 'b'},
{key: 'a', value: [3, 2, 1], subject: 'a'},
];
const wrapper = mountWithTheme();
// Ignore values, more interested in if keys rendered + are sorted
expect(wrapper.find('td.key').at(0).text()).toEqual('a');
expect(wrapper.find('td.key').at(1).text()).toEqual('b');
});
it('should coerce non-strings into strings', function () {
const data = [{key: 'a', value: false, subject: 'a'}];
const wrapper = mountWithTheme();
expect(wrapper.find('td.key').at(0).text()).toEqual('a');
expect(wrapper.find('td.val').at(0).text()).toEqual('false');
});
it("shouldn't blow up on null", function () {
const data = [{key: 'a', value: null, subject: 'a'}];
const wrapper = mountWithTheme();
expect(wrapper.find('td.key').at(0).text()).toEqual('a');
expect(wrapper.find('td.val').at(0).text()).toEqual('null');
});
});
});