[SIEM] Add missing i18n keys (#37400)

## Summary
  * Added missing i18n keys
  * Added linter rule to catch mistakes
  * Updated code and tests and other areas to work with new linter rule
  * Changed linter rule to be an error now
  * Fixed other i18n keys
  * Added spacer and removed the   that the linter did not like

### Checklist

Use ~~strikethroughs~~ to remove checklist items you don't feel are applicable to this PR.

~~- [ ] This was checked for cross-browser compatibility, [including a check against IE11](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md#cross-browser-compatibility)~~

- [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/master/packages/kbn-i18n/README.md)

~~- [ ] [Documentation](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md#writing-documentation) was added for features that require explanation or tutorials~~

- [x] [Unit or functional tests](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md#cross-browser-compatibility) were updated or added to match the most common scenarios

~~- [ ] This was checked for [keyboard-only and screenreader accessibility](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility#Accessibility_testing_checklist)~~

### For maintainers

~~- [ ] This was checked for breaking API changes and was [labeled appropriately](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md#release-notes-process)~~
~~- [ ] This includes a feature addition or change that requires a release note and was [labeled appropriately](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md#release-notes-process)~~
This commit is contained in:
Frank Hassanabad 2019-05-30 14:17:29 -06:00 committed by GitHub
parent 8dd30f6efc
commit 76bdae1073
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
37 changed files with 210 additions and 107 deletions

View file

@ -568,8 +568,7 @@ module.exports = {
// will introduced after the other warns are fixed
// 'react/jsx-no-bind': 'error',
'react/jsx-no-comment-textnodes': 'error',
// will be introduced to fix missing i18n keys
// 'react/jsx-no-literals': 'warn',
'react/jsx-no-literals': 'error',
'react/jsx-no-target-blank': 'error',
'react/jsx-fragments': 'error',
'react/jsx-sort-default-props': 'error',

View file

@ -29,7 +29,7 @@ describe('draggables', () => {
value="some-value"
queryValue="some-query-value"
>
<span>A child of this</span>
<span>{'A child of this'}</span>
</DefaultDraggable>
);
expect(toJson(wrapper)).toMatchSnapshot();
@ -45,7 +45,7 @@ describe('draggables', () => {
queryValue="some-query-value"
iconType="number"
>
<span>A child of this</span>
<span>{'A child of this'}</span>
</DraggableBadge>
);
expect(toJson(wrapper)).toMatchSnapshot();
@ -62,7 +62,7 @@ describe('draggables', () => {
});
test('returns false if the tooltip is a ReactNode', () => {
expect(tooltipContentIsExplicitlyNull(<span>be a good node</span>)).toBe(false);
expect(tooltipContentIsExplicitlyNull(<span>{'be a good node'}</span>)).toBe(false);
});
test('returns true if the tooltip is null', () => {
@ -91,9 +91,9 @@ describe('draggables', () => {
expect(
getDefaultWhenTooltipIsUnspecified({
field: 'source.bytes',
tooltipContent: <span>the universe</span>,
tooltipContent: <span>{'the universe'}</span>,
})
).toEqual(<span>the universe</span>);
).toEqual(<span>{'the universe'}</span>);
});
});
@ -166,7 +166,7 @@ describe('draggables', () => {
<DefaultDraggable
id="draggable-id"
field="source.bytes"
tooltipContent={<span>default draggable tooltip</span>}
tooltipContent={<span>{'default draggable tooltip'}</span>}
value="a default draggable"
/>
</TestProviders>
@ -177,7 +177,7 @@ describe('draggables', () => {
.find('[data-test-subj="source.bytes-tooltip"]')
.first()
.props().content
).toEqual(<span>default draggable tooltip</span>);
).toEqual(<span>{'default draggable tooltip'}</span>);
});
test('it does NOT render a tooltip when tooltipContent is null', () => {
@ -314,7 +314,7 @@ describe('draggables', () => {
field="some-field"
value="some value"
iconType="number"
tooltipContent={<span>draggable badge tooltip</span>}
tooltipContent={<span>{'draggable badge tooltip'}</span>}
/>
</TestProviders>
);
@ -324,7 +324,7 @@ describe('draggables', () => {
.find('[data-test-subj="some-field-tooltip"]')
.first()
.props().content
).toEqual(<span>draggable badge tooltip</span>);
).toEqual(<span>{'draggable badge tooltip'}</span>);
});
test('it does NOT render a tooltip when tooltipContent is null', () => {

View file

@ -14,8 +14,7 @@ exports[`Field Renderers #autonomousSystemRenderer it renders correctly against
id="ip-overview-source.autonomous_system.as_org"
value="Test Org"
/>
/
/
<pure(Component)
field="source.autonomous_system.asn"
id="ip-overview-source.autonomous_system.asn"
@ -228,10 +227,17 @@ exports[`Field Renderers #reputationRenderer it renders correctly against snapsh
}
}
>
<pure(Component)
link="10.10.10.10"
>
View at virustotal.com
</pure(Component)>
<pure(Component) />
<br />
<pure(Component)
domain="10.10.10.10"
>
View at iana.org
View at talosIntelligence.com
</pure(Component)>
<pure(Component) />
</Component>

View file

@ -7,7 +7,7 @@
import { mount, shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import * as React from 'react';
import { shallowWithIntl } from 'test_utils/enzyme_helpers';
import { shallowWithIntl, mountWithIntl } from 'test_utils/enzyme_helpers';
import { FlowTarget, GetIpOverviewQuery, HostEcsFields } from '../../graphql/types';
import { TestProviders } from '../../mock';
@ -19,6 +19,8 @@ import {
hostNameRenderer,
locationRenderer,
whoisRenderer,
reputationRenderer,
DefaultFieldRenderer,
} from './field_renderers';
import { mockData } from '../page/network/ip_overview/mock';
@ -211,10 +213,35 @@ describe('Field Renderers', () => {
describe('#reputationRenderer', () => {
test('it renders correctly against snapshot', () => {
const wrapper = shallowWithIntl(
<TestProviders>{whoisRenderer('10.10.10.10')}</TestProviders>
<TestProviders>{reputationRenderer('10.10.10.10')}</TestProviders>
);
expect(toJson(wrapper)).toMatchSnapshot();
});
});
describe('DefaultFieldRenderer', () => {
test('it should render a single item', () => {
const wrapper = mountWithIntl(
<TestProviders>
<DefaultFieldRenderer rowItems={['item1']} attrName={'item1'} idPrefix={'prefix-1'} />
</TestProviders>
);
expect(wrapper.text()).toEqual('item1 ');
});
test('it should render two items', () => {
const wrapper = mountWithIntl(
<TestProviders>
<DefaultFieldRenderer
displayCount={5}
rowItems={['item1', 'item2']}
attrName={'item1'}
idPrefix={'prefix-1'}
/>
</TestProviders>
);
expect(wrapper.text()).toEqual('item1,item2 ');
});
});
});

View file

@ -25,6 +25,7 @@ import { HostDetailsLink, ReputationLink, VirusTotalLink, WhoIsLink } from '../l
import * as i18n from '../page/network/ip_overview/translations';
import { escapeDataProviderId } from '../drag_and_drop/helpers';
import { Spacer } from '../page';
export const IpOverviewId = 'ip-overview';
@ -66,8 +67,8 @@ export const autonomousSystemRenderer = (
id={`${IpOverviewId}-${flowTarget}.autonomous_system.as_org`}
field={`${flowTarget}.autonomous_system.as_org`}
value={as.as_org}
/>{' '}
/
/>
{' /'}
<DefaultDraggable
id={`${IpOverviewId}-${flowTarget}.autonomous_system.asn`}
field={`${flowTarget}.autonomous_system.asn`}
@ -137,6 +138,8 @@ interface DefaultFieldRendererProps {
maxOverflow?: number;
}
// TODO: This causes breaks between elements until the ticket below is fixed
// https://github.com/elastic/ingest-dev/issues/474
export const DefaultFieldRenderer = pure<DefaultFieldRendererProps>(
({ rowItems, attrName, idPrefix, render, displayCount = 1, maxOverflow = 5 }) => {
if (rowItems != null && rowItems.length > 0) {
@ -144,7 +147,12 @@ export const DefaultFieldRenderer = pure<DefaultFieldRendererProps>(
const id = escapeDataProviderId(`${idPrefix}-${attrName}-${rowItem}`);
return (
<EuiFlexItem key={id} grow={false}>
{index !== 0 && <>,&nbsp;</>}
{index !== 0 && (
<>
{','}
<Spacer />
</>
)}
<DefaultDraggable id={id} field={attrName} value={rowItem}>
{render ? render(rowItem) : rowItem}
</DefaultDraggable>

View file

@ -15,7 +15,7 @@ describe('rendering', () => {
test('renders correctly', () => {
const wrapper = shallow(
<FiltersGlobal>
<p>Additional filters here.</p>
<p>{'Additional filters here.'}</p>
</FiltersGlobal>
);
expect(toJson(wrapper)).toMatchSnapshot();

View file

@ -111,7 +111,7 @@ describe('Flyout', () => {
timelineId="test"
usersViewing={usersViewing}
>
<p>Fake flyout body</p>
<p>{'Fake flyout body'}</p>
</Flyout>
</TestProviders>
);

View file

@ -17,7 +17,6 @@ exports[`Pane renders correctly against snapshot 1`] = `
<span>
I am a child of flyout
</span>
,
</Connect(FlyoutPaneComponent)>
</Component>
`;

View file

@ -30,7 +30,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a child of flyout</span>,
<span>{'I am a child of flyout'}</span>
</Pane>
</TestProviders>
);
@ -48,7 +48,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a child of flyout</span>,
<span>{'I am a child of flyout'}</span>
</Pane>
</TestProviders>
);
@ -67,7 +67,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a child of flyout</span>,
<span>{'I am a child of flyout'}</span>
</Pane>
</TestProviders>
);
@ -91,7 +91,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a child of flyout</span>,
<span>{'I am a child of flyout'}</span>
</Pane>
</TestProviders>
);
@ -115,7 +115,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a child of flyout</span>,
<span>{'I am a child of flyout'}</span>
</Pane>
</TestProviders>
);
@ -139,7 +139,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a child of flyout</span>,
<span>{'I am a child of flyout'}</span>
</Pane>
</TestProviders>
);
@ -163,7 +163,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a child of flyout</span>,
<span>{'I am a child of flyout'}</span>
</Pane>
</TestProviders>
);
@ -187,7 +187,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a mock body</span>,
<span>{'I am a mock body'}</span>
</Pane>
</TestProviders>
);
@ -211,7 +211,7 @@ describe('Pane', () => {
usersViewing={usersViewing}
width={testWidth}
>
<span>I am a mock child</span>,
<span>{'I am a mock child'}</span>
</Pane>
</TestProviders>
);

View file

@ -7,6 +7,7 @@
import { EuiToolTip } from '@elastic/eui';
import * as React from 'react';
import { pure } from 'recompose';
import { FormattedMessage } from '@kbn/i18n/react';
import styled from 'styled-components';
import { getHumanizedDuration } from '../helpers';
@ -22,7 +23,11 @@ export const FormattedDurationTooltipContent = pure<{
<>
{tooltipTitle != null ? <P data-test-subj="title">{tooltipTitle}</P> : null}
<P data-test-subj="humanized">{getHumanizedDuration(maybeDurationNanoseconds)}</P>
<P data-test-subj="raw-value">raw: {maybeDurationNanoseconds}</P>
<P data-test-subj="raw-value">
<FormattedMessage id="xpack.siem.formattedDuration.tooltipLabel" defaultMessage="raw" />
{': '}
{maybeDurationNanoseconds}
</P>
</>
));

View file

@ -14,7 +14,7 @@ describe('rendering', () => {
test('renders correctly', () => {
const wrapper = shallow(
<HeaderPage subtitle="My Test Subtitle" title="My Test Title">
<p>My test supplement.</p>
<p>{'My test supplement.'}</p>
</HeaderPage>
);
expect(toJson(wrapper)).toMatchSnapshot();

View file

@ -14,7 +14,7 @@ describe('rendering', () => {
test('renders correctly', () => {
const wrapper = shallow(
<HeaderPanel subtitle="My Test Subtitle" title="My Test Title" tooltip="My test tooltip.">
<p>My test supplement.</p>
<p>{'My test supplement.'}</p>
</HeaderPanel>
);
expect(toJson(wrapper)).toMatchSnapshot();

View file

@ -27,7 +27,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={mockData.Hosts.pageInfo.hasNextPage!}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -52,7 +52,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={mockData.Hosts.pageInfo.hasNextPage!}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -79,7 +79,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={mockData.Hosts.pageInfo.hasNextPage!}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -104,7 +104,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={mockData.Hosts.pageInfo.hasNextPage!}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -134,7 +134,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={mockData.Hosts.pageInfo.hasNextPage!}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -167,7 +167,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={false}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -192,7 +192,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={true}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -221,7 +221,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={true}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -247,7 +247,7 @@ describe('Load More Table Component', () => {
columns={sortedHosts}
hasNextPage={true}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -276,7 +276,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={mockData.Hosts.pageInfo.hasNextPage!}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -306,7 +306,7 @@ describe('Load More Table Component', () => {
columns={getHostsColumns()}
hasNextPage={true}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"
@ -341,7 +341,7 @@ describe('Load More Table Component', () => {
columns={sortedHosts}
hasNextPage={true}
headerCount={1}
headerSupplement={<p>My test supplement.</p>}
headerSupplement={<p>{'My test supplement.'}</p>}
headerTitle="Hosts"
headerTooltip="My test tooltip"
headerUnit="Test Unit"

View file

@ -171,7 +171,7 @@ export class LoadMoreTable<T, U, V, W, X, Y, Z, AA, AB> extends React.PureCompon
iconSide="right"
onClick={this.onButtonClick}
>
Rows: {limit}
{`${i18n.ROWS}: ${limit}`}
</EuiButtonEmpty>
);

View file

@ -17,3 +17,7 @@ export const LOAD_MORE = i18n.translate('xpack.siem.loadingMoreTable.loadMoreDes
export const SHOWING = i18n.translate('xpack.siem.loadingMoreTable.showing', {
defaultMessage: 'Showing',
});
export const ROWS = i18n.translate('xpack.siem.loadingMoreTable.rows', {
defaultMessage: 'Rows',
});

View file

@ -61,11 +61,11 @@ export const MarkdownHint = pure<{ show: boolean }>(({ show }) => (
<TrailingWhitespace>{i18n.MARKDOWN_HINT_BULLET}</TrailingWhitespace>
<Code data-test-subj="preformatted-hint">{i18n.MARKDOWN_HINT_PREFORMATTED}</Code>
<TrailingWhitespace>{i18n.MARKDOWN_HINT_QUOTE}</TrailingWhitespace>
~~
{'~~'}
<Strikethrough data-test-subj="strikethrough-hint">
{i18n.MARKDOWN_HINT_STRIKETHROUGH}
</Strikethrough>
~~
{'~~'}
<ImageUrl>{i18n.MARKDOWN_HINT_IMAGE_URL}</ImageUrl>
</MarkdownHintContainer>
));

View file

@ -36,7 +36,7 @@ describe('AddToKql Component', async () => {
componentFilterType="hosts"
type={hostsModel.HostsType.page}
>
<>siem-kibana</>
<>{'siem-kibana'}</>
</AddToKql>
</TestProviders>
);
@ -53,7 +53,7 @@ describe('AddToKql Component', async () => {
componentFilterType="hosts"
type={hostsModel.HostsType.page}
>
<>siem-kibana</>
<>{'siem-kibana'}</>
</AddToKql>
</TestProviders>
);
@ -72,7 +72,7 @@ describe('AddToKql Component', async () => {
componentFilterType="hosts"
type={hostsModel.HostsType.page}
>
<>siem-kibana</>
<>{'siem-kibana'}</>
</AddToKql>
</TestProviders>
);
@ -125,7 +125,7 @@ describe('AddToKql Component', async () => {
componentFilterType="network"
type={networkModel.NetworkType.page}
>
<>siem-kibana</>
<>{'siem-kibana'}</>
</AddToKql>
</TestProviders>
);

View file

@ -160,7 +160,7 @@ const getEventsColumns = (
attrName: 'event.module',
idPrefix: `host-${pageType}-events-table-${node._id}`,
})}
/
{'/'}
{getRowItemDraggables({
rowItems: getOr(null, 'event.dataset', node),
attrName: 'event.dataset',
@ -203,7 +203,8 @@ const getEventsColumns = (
idPrefix: `host-${pageType}-events-table-${node._id}`,
render: item => <IPDetailsLink ip={item} />,
})}
:{getOrEmptyTag('source.port', node)}
{':'}
{getOrEmptyTag('source.port', node)}
</>
),
},
@ -219,7 +220,8 @@ const getEventsColumns = (
idPrefix: `host-${pageType}-events-table-${node._id}`,
render: item => <IPDetailsLink ip={item} />,
})}
:{getOrEmptyTag('destination.port', node)}
{':'}
{getOrEmptyTag('destination.port', node)}
</>
),
},

View file

@ -109,7 +109,7 @@ describe('UncommonProcess Table Component', () => {
.find('.euiTableRowCell')
.at(5)
.text()
).toBe('Hostshello-world,\u00a0hello-world-2 ');
).toBe('Hostshello-world,hello-world-2 ');
});
test('it is empty when all hosts are invalid because they do not contain an id and a name', () => {
@ -157,7 +157,7 @@ describe('UncommonProcess Table Component', () => {
.find('.euiTableRowCell')
.at(5)
.text()
).toBe('Hostshello-world,\u00a0hello-world-2 ');
).toBe('Hostshello-world,hello-world-2 ');
});
});

View file

@ -96,6 +96,10 @@ export const CountBadge = styled(EuiBadge)`
margin-left: 5px;
`;
export const Spacer = styled.span`
margin-left: 5px;
`;
export const MoreRowItems = styled(EuiIcon)`
margin-left: 5px;
`;

View file

@ -13,12 +13,12 @@ import { SelectableText } from '.';
describe('SelectableText', () => {
test('renders correctly against snapshot', () => {
const wrapper = shallow(<SelectableText>You may select this text</SelectableText>);
const wrapper = shallow(<SelectableText>{'You may select this text'}</SelectableText>);
expect(toJson(wrapper)).toMatchSnapshot();
});
test('it applies the user-select: text style', () => {
const wrapper = mount(<SelectableText>You may select this text</SelectableText>);
const wrapper = mount(<SelectableText>{'You may select this text'}</SelectableText>);
expect(wrapper).toHaveStyleRule('user-select', 'text');
});

View file

@ -47,7 +47,8 @@ exports[`Table Helpers #getRowItemDraggables it returns correctly against snapsh
key="idPrefix-attrName-item1"
render={[Function]}
/>
, 
,
<styled.span />
<Connect(DraggableWrapperComponent)
dataProvider={
Object {
@ -68,7 +69,8 @@ exports[`Table Helpers #getRowItemDraggables it returns correctly against snapsh
key="idPrefix-attrName-item2"
render={[Function]}
/>
, 
,
<styled.span />
<Connect(DraggableWrapperComponent)
dataProvider={
Object {

View file

@ -13,7 +13,7 @@ import { DragEffects, DraggableWrapper } from '../drag_and_drop/draggable_wrappe
import { IS_OPERATOR } from '../timeline/data_providers/data_provider';
import { Provider } from '../timeline/data_providers/provider';
import { defaultToEmptyTag, getEmptyTagValue } from '../empty_value';
import { MoreRowItems } from '../page';
import { MoreRowItems, Spacer } from '../page';
export const getRowItemDraggable = ({
rowItem,
@ -87,7 +87,12 @@ export const getRowItemDraggables = ({
const id = escapeDataProviderId(`${idPrefix}-${attrName}-${rowItem}`);
return (
<React.Fragment key={id}>
{index !== 0 ? <>,&nbsp;</> : null}
{index !== 0 && (
<>
{','}
<Spacer />
</>
)}
<DraggableWrapper
key={id}
dataProvider={{

View file

@ -36,16 +36,25 @@ export const HeaderToolTipContent = pure<{ header: ColumnHeader }>(({ header })
<>
{!isEmpty(header.category) ? (
<P>
<ToolTipTableMetadata data-test-subj="category">{i18n.CATEGORY}:</ToolTipTableMetadata>
<ToolTipTableMetadata data-test-subj="category">
{i18n.CATEGORY}
{':'}
</ToolTipTableMetadata>
<ToolTipTableValue data-test-subj="category-value">{header.category}</ToolTipTableValue>
</P>
) : null}
<P>
<ToolTipTableMetadata data-test-subj="field">{i18n.FIELD}:</ToolTipTableMetadata>
<ToolTipTableMetadata data-test-subj="field">
{i18n.FIELD}
{':'}
</ToolTipTableMetadata>
<ToolTipTableValue data-test-subj="field-value">{header.id}</ToolTipTableValue>
</P>
<P>
<ToolTipTableMetadata data-test-subj="type">{i18n.TYPE}:</ToolTipTableMetadata>
<ToolTipTableMetadata data-test-subj="type">
{i18n.TYPE}
{':'}
</ToolTipTableMetadata>
<ToolTipTableValue>
<IconType data-test-subj="type-icon" type={getIconFromType(header.type!)} />
<span data-test-subj="type-value">{header.type}</span>
@ -54,7 +63,8 @@ export const HeaderToolTipContent = pure<{ header: ColumnHeader }>(({ header })
{!isEmpty(header.description) ? (
<P>
<ToolTipTableMetadata data-test-subj="description">
{i18n.DESCRIPTION}:
{i18n.DESCRIPTION}
{':'}
</ToolTipTableMetadata>
<ToolTipTableValue data-test-subj="description-value">
{header.description}

View file

@ -39,7 +39,7 @@ describe('GenericRowRenderer', () => {
browserFields,
data: auditd,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
@ -69,7 +69,7 @@ describe('GenericRowRenderer', () => {
browserFields: mockBrowserFields,
data: nonAuditd,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<TestProviders>
@ -84,7 +84,7 @@ describe('GenericRowRenderer', () => {
browserFields: mockBrowserFields,
data: auditd,
width: 100,
children: <span>some children </span>,
children: <span>{'some children '}</span>,
});
const wrapper = mount(
<TestProviders>
@ -118,7 +118,7 @@ describe('GenericRowRenderer', () => {
browserFields,
data: auditdFile,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
@ -148,7 +148,7 @@ describe('GenericRowRenderer', () => {
browserFields: mockBrowserFields,
data: nonAuditd,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<TestProviders>
@ -163,7 +163,7 @@ describe('GenericRowRenderer', () => {
browserFields: mockBrowserFields,
data: auditdFile,
width: 100,
children: <span>some children </span>,
children: <span>{'some children '}</span>,
});
const wrapper = mount(
<TestProviders>

View file

@ -51,7 +51,7 @@ export const SessionUserHostWorkingDir = pure<Props>(
</TokensFlexItem>
{hostName != null && (
<TokensFlexItem grow={false} component="span">
@
{'@'}
</TokensFlexItem>
)}
<HostWorkingDir

View file

@ -32,7 +32,7 @@ describe('get_column_renderer', () => {
browserFields: mockBrowserFields,
data: nonSuricata,
width: 100,
children: <span>some child</span>,
children: <span>{'some child'}</span>,
});
const wrapper = shallow(<span>{row}</span>);
@ -45,7 +45,7 @@ describe('get_column_renderer', () => {
browserFields: mockBrowserFields,
data: nonSuricata,
width: 100,
children: <span>some child</span>,
children: <span>{'some child'}</span>,
});
const wrapper = mount(
<TestProviders>
@ -61,7 +61,7 @@ describe('get_column_renderer', () => {
browserFields: mockBrowserFields,
data: suricata,
width: 100,
children: <span>some child </span>,
children: <span>{'some child '}</span>,
});
const wrapper = mount(
<TestProviders>

View file

@ -31,7 +31,7 @@ describe('netflowRowRenderer', () => {
browserFields,
data: getMockNetflowData(),
width: 500,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
@ -101,7 +101,7 @@ describe('netflowRowRenderer', () => {
browserFields: mockBrowserFields,
data: justIdAndTimestamp,
width: 500,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<TestProviders>
@ -116,7 +116,7 @@ describe('netflowRowRenderer', () => {
browserFields: mockBrowserFields,
data: getMockNetflowData(),
width: 500,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<TestProviders>

View file

@ -27,7 +27,7 @@ describe('plain_row_renderer', () => {
browserFields: mockBrowserFields,
data: mockDatum,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
expect(toJson(wrapper)).toMatchSnapshot();
@ -42,7 +42,7 @@ describe('plain_row_renderer', () => {
browserFields: mockBrowserFields,
data: mockDatum,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<ThemeProvider theme={() => ({ eui: euiDarkVars, darkMode: true })}>

View file

@ -29,7 +29,7 @@ describe('suricata_row_renderer', () => {
browserFields: mockBrowserFields,
data: nonSuricata,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
@ -49,7 +49,7 @@ describe('suricata_row_renderer', () => {
browserFields: mockBrowserFields,
data: nonSuricata,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<TestProviders>
@ -64,7 +64,7 @@ describe('suricata_row_renderer', () => {
browserFields: mockBrowserFields,
data: suricata,
width: 100,
children: <span>some children </span>,
children: <span>{'some children '}</span>,
});
const wrapper = mount(
<TestProviders>
@ -82,7 +82,7 @@ describe('suricata_row_renderer', () => {
browserFields: mockBrowserFields,
data: suricata,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<TestProviders>

View file

@ -39,7 +39,7 @@ describe('GenericRowRenderer', () => {
browserFields,
data: system,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
@ -69,7 +69,7 @@ describe('GenericRowRenderer', () => {
browserFields: mockBrowserFields,
data: system,
width: 100,
children: <span>some children </span>,
children: <span>{'some children '}</span>,
});
const wrapper = mount(
<TestProviders>
@ -103,7 +103,7 @@ describe('GenericRowRenderer', () => {
browserFields,
data: systemFile,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
@ -132,7 +132,7 @@ describe('GenericRowRenderer', () => {
browserFields: mockBrowserFields,
data: systemFile,
width: 100,
children: <span>some children </span>,
children: <span>{'some children '}</span>,
});
const wrapper = mount(
<TestProviders>

View file

@ -34,7 +34,7 @@ export const UserHostWorkingDir = pure<Props>(
</TokensFlexItem>
{hostName != null && userName != null && (
<TokensFlexItem grow={false} component="span">
@
{'@'}
</TokensFlexItem>
)}
<HostWorkingDir

View file

@ -28,7 +28,7 @@ describe('zeek_row_renderer', () => {
browserFields: mockBrowserFields,
data: nonZeek,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = shallow(<span>{children}</span>);
@ -48,7 +48,7 @@ describe('zeek_row_renderer', () => {
browserFields: mockBrowserFields,
data: nonZeek,
width: 100,
children: <span>some children</span>,
children: <span>{'some children'}</span>,
});
const wrapper = mount(
<TestProviders>
@ -63,7 +63,7 @@ describe('zeek_row_renderer', () => {
browserFields: mockBrowserFields,
data: zeek,
width: 100,
children: <span>some children </span>,
children: <span>{'some children '}</span>,
});
const wrapper = mount(
<TestProviders>

View file

@ -88,8 +88,8 @@ export const ProviderBadge = pure<ProviderBadgeProps>(
{prefix}
{operator !== EXISTS_OPERATOR ? (
<>
<span className="field-value">{field}: </span>
<span className="field-value">&quot;{val}&quot;</span>
<span className="field-value">{`${field}: `}</span>
<span className="field-value">{`"${val}"`}</span>
</>
) : (
<span className="field-value">

View file

@ -15,30 +15,38 @@ describe('TruncatableText', () => {
const width = '50px';
test('renders correctly against snapshot', () => {
const wrapper = shallow(<TruncatableText width={width}>Hiding in plain sight</TruncatableText>);
const wrapper = shallow(
<TruncatableText width={width}>{'Hiding in plain sight'}</TruncatableText>
);
expect(toJson(wrapper)).toMatchSnapshot();
});
test('it adds the hidden overflow style', () => {
const wrapper = mount(<TruncatableText width={width}>Hiding in plain sight</TruncatableText>);
const wrapper = mount(
<TruncatableText width={width}>{'Hiding in plain sight'}</TruncatableText>
);
expect(wrapper).toHaveStyleRule('overflow', 'hidden');
});
test('it adds the ellipsis text-overflow style', () => {
const wrapper = mount(<TruncatableText width={width}>Dramatic pause</TruncatableText>);
const wrapper = mount(<TruncatableText width={width}>{'Dramatic pause'}</TruncatableText>);
expect(wrapper).toHaveStyleRule('text-overflow', 'ellipsis');
});
test('it adds the nowrap white-space style', () => {
const wrapper = mount(<TruncatableText width={width}>Who stopped the beats?</TruncatableText>);
const wrapper = mount(
<TruncatableText width={width}>{'Who stopped the beats?'}</TruncatableText>
);
expect(wrapper).toHaveStyleRule('white-space', 'nowrap');
});
test('it forwards the width prop as a style', () => {
const wrapper = mount(<TruncatableText width={width}>width or without you</TruncatableText>);
const wrapper = mount(
<TruncatableText width={width}>{'width or without you'}</TruncatableText>
);
expect(wrapper).toHaveStyleRule('width', width);
});

View file

@ -6,5 +6,13 @@
import React from 'react';
import { pure } from 'recompose';
import { FormattedMessage } from '@kbn/i18n/react';
export const NotFoundPage = pure(() => <div>No content found</div>);
export const NotFoundPage = pure(() => (
<div>
<FormattedMessage
id="xpack.siem.pages.fourohfour.noContentFoundDescription"
defaultMessage="No content found"
/>
</div>
));

View file

@ -24,13 +24,26 @@ export const Summary = pure(() => (
values={{
docs: (
<EuiLink href={documentationLinks.siem} target="blank">
documentation
<FormattedMessage
id="xpack.siem.overview.startedText.docsLinkText"
defaultMessage="documentation"
/>
</EuiLink>
),
data: (
<EuiLink href="kibana#home/tutorial_directory/security">
<FormattedMessage
id="xpack.siem.overview.startedText.dataLinkText"
defaultMessage="ingesting data"
/>
</EuiLink>
),
data: <EuiLink href="kibana#home/tutorial_directory/security">ingesting data</EuiLink>,
siemSolution: (
<EuiLink href="https://www.elastic.co/solutions/security-analytics" target="blank">
Security Analytics
<FormattedMessage
id="xpack.siem.overview.startedText.siemSolutionLinkText"
defaultMessage="Security Analytics"
/>
</EuiLink>
),
}}
@ -48,7 +61,10 @@ export const Summary = pure(() => (
values={{
feedback: (
<EuiLink href="https://discuss.elastic.co/c/siem" target="blank">
submit feedback online
<FormattedMessage
id="xpack.siem.overview.feedbackText.feedbackLinkText"
defaultMessage="submit feedback online"
/>
</EuiLink>
),
}}