[8.17] [Automatic Import] Fix generated name for integration title (#210916) (#211151)

# Backport

This will backport the following commits from `main` to `8.17`:
- [[Automatic Import] Fix generated name for integration title
(#210916)](https://github.com/elastic/kibana/pull/210916)

<!--- Backport version: 9.6.4 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Bharat
Pasupula","email":"123897612+bhapas@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-02-13T16:02:03Z","message":"[Automatic
Import] Fix generated name for integration title (#210916)\n\n##
Summary\r\n\r\nA bug was introduced with #210770 and this PR fixes that.
The Package\r\nname generated is
validated.","sha":"cf0f338d8749c90024b2409fbb7b036469bfab6e","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","v9.0.0","backport:prev-minor","backport:prev-major","Team:Security-Scalability","Feature:AutomaticImport","v9.1.0"],"title":"[Automatic
Import] Fix generated name for integration
title","number":210916,"url":"https://github.com/elastic/kibana/pull/210916","mergeCommit":{"message":"[Automatic
Import] Fix generated name for integration title (#210916)\n\n##
Summary\r\n\r\nA bug was introduced with #210770 and this PR fixes that.
The Package\r\nname generated is
validated.","sha":"cf0f338d8749c90024b2409fbb7b036469bfab6e"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"9.0","label":"v9.0.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/211037","number":211037,"state":"MERGED","mergeCommit":{"sha":"badb523efc6e567dc33136f84bae6c240de7ab4c","message":"[9.0]
[Automatic Import] Fix generated name for integration title (#210916)
(#211037)\n\n# Backport\n\nThis will backport the following commits from
`main` to `9.0`:\n- [[Automatic Import] Fix generated name for
integration
title\n(#210916)](https://github.com/elastic/kibana/pull/210916)\n\n<!---
Backport version: 9.4.3 -->\n\n### Questions ?\nPlease refer to the
[Backport
tool\ndocumentation](https://github.com/sqren/backport)\n\n<!--BACKPORT
[{\"author\":{\"name\":\"Bharat\nPasupula\",\"email\":\"123897612+bhapas@users.noreply.github.com\"},\"sourceCommit\":{\"committedDate\":\"2025-02-13T16:02:03Z\",\"message\":\"[Automatic\nImport]
Fix generated name for integration title
(#210916)\\n\\n##\nSummary\\r\\n\\r\\nA bug was introduced with #210770
and this PR fixes that.\nThe Package\\r\\nname generated
is\nvalidated.\",\"sha\":\"cf0f338d8749c90024b2409fbb7b036469bfab6e\",\"branchLabelMapping\":{\"^v9.1.0$\":\"main\",\"^v8.19.0$\":\"8.x\",\"^v(\\\\d+).(\\\\d+).\\\\d+$\":\"$1.$2\"}},\"sourcePullRequest\":{\"labels\":[\"release_note:fix\",\"backport:prev-minor\",\"Team:Security-Scalability\",\"Feature:AutomaticImport\",\"v9.1.0\"],\"title\":\"[Automatic\nImport]
Fix generated name for
integration\ntitle\",\"number\":210916,\"url\":\"https://github.com/elastic/kibana/pull/210916\",\"mergeCommit\":{\"message\":\"[Automatic\nImport]
Fix generated name for integration title
(#210916)\\n\\n##\nSummary\\r\\n\\r\\nA bug was introduced with #210770
and this PR fixes that.\nThe Package\\r\\nname generated
is\nvalidated.\",\"sha\":\"cf0f338d8749c90024b2409fbb7b036469bfab6e\"}},\"sourceBranch\":\"main\",\"suggestedTargetBranches\":[],\"targetPullRequestStates\":[{\"branch\":\"main\",\"label\":\"v9.1.0\",\"branchLabelMappingKey\":\"^v9.1.0$\",\"isSourceBranch\":true,\"state\":\"MERGED\",\"url\":\"https://github.com/elastic/kibana/pull/210916\",\"number\":210916,\"mergeCommit\":{\"message\":\"[Automatic\nImport]
Fix generated name for integration title
(#210916)\\n\\n##\nSummary\\r\\n\\r\\nA bug was introduced with #210770
and this PR fixes that.\nThe Package\\r\\nname generated
is\nvalidated.\",\"sha\":\"cf0f338d8749c90024b2409fbb7b036469bfab6e\"}}]}]\nBACKPORT-->\n\nCo-authored-by:
Bharat Pasupula
<123897612+bhapas@users.noreply.github.com>"}},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/210916","number":210916,"mergeCommit":{"message":"[Automatic
Import] Fix generated name for integration title (#210916)\n\n##
Summary\r\n\r\nA bug was introduced with #210770 and this PR fixes that.
The Package\r\nname generated is
validated.","sha":"cf0f338d8749c90024b2409fbb7b036469bfab6e"}}]}]
BACKPORT-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Bharat Pasupula 2025-02-14 11:25:51 +01:00 committed by GitHub
parent 276752e8b1
commit 3367949254
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 56 additions and 4 deletions

View file

@ -8,7 +8,7 @@
import React from 'react';
import { render, act, type RenderResult, fireEvent } from '@testing-library/react';
import { TestProvider } from '../../../../../mocks/test_provider';
import { DataStreamStep } from './data_stream_step';
import { DataStreamStep, getNameFromTitle } from './data_stream_step';
import { ActionsProvider } from '../../state';
import { mockActions, mockState } from '../../mocks/state';
@ -243,4 +243,55 @@ describe('DataStreamStep', () => {
expect(result.queryByTestId('generationModal')).toBeInTheDocument();
});
});
describe('when integrationSettings has an invalid generated name from title', () => {
describe.each(['123 abc', '1a'])('should render error for %s', (invalidTitle) => {
let result: RenderResult;
beforeEach(() => {
jest.clearAllMocks();
result = render(
<DataStreamStep
integrationSettings={{ title: invalidTitle }}
connector={mockState.connector}
isGenerating={false}
/>,
{ wrapper }
);
});
it('should set empty name for invalid title', () => {
const input = result.getByTestId('nameInput');
expect(input).toHaveValue(''); // name is not set
});
});
});
describe('when integrationSettings has an valid generated name from title', () => {
describe.each(['abc 123', '$abc123', 'abc 123 abc', 'abc_123', 'abc_123_abc'])(
'should render error for %s',
(validTitle) => {
let result: RenderResult;
beforeEach(() => {
jest.clearAllMocks();
result = render(
<DataStreamStep
integrationSettings={{ title: validTitle }}
connector={mockState.connector}
isGenerating={false}
/>,
{ wrapper }
);
});
it('should auto-generate name from title', () => {
const input = result.getByTestId('nameInput');
expect(input).toHaveValue(getNameFromTitle(validTitle));
expect(mockActions.setIntegrationSettings).toHaveBeenCalledWith({
name: getNameFromTitle(validTitle),
title: validTitle,
});
});
}
);
});
});

View file

@ -45,7 +45,8 @@ export const InputTypeOptions: Array<EuiComboBoxOptionOption<InputType>> = [
];
const isValidName = (name: string) => NAME_REGEX_PATTERN.test(name);
const getNameFromTitle = (title: string) => title.toLowerCase().replaceAll(/[^a-z0-9]/g, '_');
export const getNameFromTitle = (title: string) =>
title.toLowerCase().replaceAll(/[^a-z0-9]/g, '_');
interface DataStreamStepProps {
integrationSettings: State['integrationSettings'];
@ -114,7 +115,7 @@ export const DataStreamStep = React.memo<DataStreamStepProps>(
// Only executed once when the packageNames are loaded
if (packageNames != null && integrationSettings?.name == null && integrationSettings?.title) {
const generatedName = getNameFromTitle(integrationSettings.title);
if (!packageNames.has(generatedName)) {
if (!packageNames.has(generatedName) && isValidName(generatedName)) {
setName(generatedName);
setIntegrationValues({ name: generatedName });
}
@ -170,7 +171,7 @@ export const DataStreamStep = React.memo<DataStreamStepProps>(
<EuiFieldText
name="name"
data-test-subj="nameInput"
value={isValidName(name) ? name : ''}
value={name}
onChange={onChange.name}
isInvalid={invalidFields.name}
isLoading={isLoadingPackageNames}