From 077d05d5be853fafcd695339c3aba3414011f17b Mon Sep 17 00:00:00 2001 From: Angela Chuang Date: Tue, 24 Jun 2025 10:24:24 +0100 Subject: [PATCH 1/7] add space id provider --- .../stack_management/management_settings.tsx | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx index 8427d2ee59170..806e80d432c6a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx @@ -11,6 +11,7 @@ import type { Conversation } from '@kbn/elastic-assistant'; import { useSearchParams } from 'react-router-dom-v5-compat'; import { i18n } from '@kbn/i18n'; import { + AssistantSpaceIdProvider, mergeBaseWithPersistedConversations, useAssistantContext, useFetchCurrentUserConversations, @@ -23,6 +24,7 @@ import { CONVERSATIONS_TAB } from '@kbn/elastic-assistant/impl/assistant/setting import type { SettingsTabs } from '@kbn/elastic-assistant/impl/assistant/settings/types'; import { useKibana } from '../../common/lib/kibana'; +import { useSpaceId } from '../../common/hooks/use_space_id'; const defaultSelectedConversationId = WELCOME_CONVERSATION_TITLE; @@ -32,7 +34,7 @@ export const ManagementSettings = React.memo(() => { http, assistantAvailability: { isAssistantEnabled }, } = useAssistantContext(); - + const spaceId = useSpaceId(); const { application: { navigateToApp, @@ -131,14 +133,16 @@ export const ManagementSettings = React.memo(() => { } if (conversations) { - return ( - - ); + return spaceId ? ( + + + + ) : null; } return <>; From 53e3255302695b8335cdfe958f84c9c590ddbfac Mon Sep 17 00:00:00 2001 From: Angela Chuang Date: Tue, 24 Jun 2025 12:20:40 +0100 Subject: [PATCH 2/7] unit tests --- .../assistant/stack_management/management_settings.test.tsx | 4 ++++ .../assistant/stack_management/management_settings.tsx | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx index a3c14b9154c3f..12ee6e0b7dc52 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx @@ -21,6 +21,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; // Mock the necessary hooks and components jest.mock('@kbn/elastic-assistant', () => ({ + AssistantSpaceIdProvider: jest.fn(({children}) =>
{children}
), useAssistantContext: jest.fn(), useFetchCurrentUserConversations: jest.fn(), mergeBaseWithPersistedConversations: jest.fn(), @@ -35,6 +36,9 @@ jest.mock('@kbn/elastic-assistant/impl/assistant/use_conversation', () => ({ jest.mock('../../common/lib/kibana', () => ({ useKibana: jest.fn(), })); +jest.mock('../../common/hooks/use_space_id', () => ({ + useSpaceId: jest.fn().mockReturnValue('default'), +})); const useAssistantContextMock = useAssistantContext as jest.Mock; const useFetchCurrentUserConversationsMock = useFetchCurrentUserConversations as jest.Mock; diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx index 806e80d432c6a..33a33586cdd24 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx @@ -132,8 +132,8 @@ export const ManagementSettings = React.memo(() => { navigateToApp('home'); } - if (conversations) { - return spaceId ? ( + if (conversations && spaceId) { + return ( { currentTab={currentTab} /> - ) : null; + ); } return <>; From 9db92d6b0fabc85bc7d15a4ee27ce67be6c1ce83 Mon Sep 17 00:00:00 2001 From: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 24 Jun 2025 11:45:22 +0000 Subject: [PATCH 3/7] [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' --- .../assistant/stack_management/management_settings.test.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx index 12ee6e0b7dc52..d3e104ea4f70b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx @@ -21,7 +21,9 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; // Mock the necessary hooks and components jest.mock('@kbn/elastic-assistant', () => ({ - AssistantSpaceIdProvider: jest.fn(({children}) =>
{children}
), + AssistantSpaceIdProvider: jest.fn(({ children }) => ( +
{children}
+ )), useAssistantContext: jest.fn(), useFetchCurrentUserConversations: jest.fn(), mergeBaseWithPersistedConversations: jest.fn(), From cb1677802c4dfee8e5213c830ce1ce1a97e37b58 Mon Sep 17 00:00:00 2001 From: Angela Chuang Date: Wed, 25 Jun 2025 10:49:02 +0100 Subject: [PATCH 4/7] update unit tests --- .../management_settings.test.tsx | 22 ++++++++++++++----- .../stack_management/management_settings.tsx | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx index d3e104ea4f70b..4f4c8f2f10f80 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx @@ -18,12 +18,10 @@ import { import { useKibana } from '../../common/lib/kibana'; import { useConversation } from '@kbn/elastic-assistant/impl/assistant/use_conversation'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { useSpaceId } from '../../common/hooks/use_space_id'; // Mock the necessary hooks and components jest.mock('@kbn/elastic-assistant', () => ({ - AssistantSpaceIdProvider: jest.fn(({ children }) => ( -
{children}
- )), useAssistantContext: jest.fn(), useFetchCurrentUserConversations: jest.fn(), mergeBaseWithPersistedConversations: jest.fn(), @@ -39,13 +37,14 @@ jest.mock('../../common/lib/kibana', () => ({ useKibana: jest.fn(), })); jest.mock('../../common/hooks/use_space_id', () => ({ - useSpaceId: jest.fn().mockReturnValue('default'), + useSpaceId: jest.fn(), })); const useAssistantContextMock = useAssistantContext as jest.Mock; const useFetchCurrentUserConversationsMock = useFetchCurrentUserConversations as jest.Mock; const useKibanaMock = useKibana as jest.Mock; const useConversationMock = useConversation as jest.Mock; +const useSpaceIdMock = useSpaceId as jest.Mock; describe('ManagementSettings', () => { const queryClient = new QueryClient(); @@ -61,9 +60,11 @@ describe('ManagementSettings', () => { const renderComponent = ({ isAssistantEnabled = true, conversations, + spaceId, }: { isAssistantEnabled?: boolean; conversations: Record; + spaceId?: string; }) => { useAssistantContextMock.mockReturnValue({ baseConversations, @@ -107,6 +108,8 @@ describe('ManagementSettings', () => { getDefaultConversation, }); + useSpaceIdMock.mockReturnValue(spaceId); + return render( @@ -123,14 +126,23 @@ describe('ManagementSettings', () => { it('navigates to home if securityAIAssistant is disabled', () => { renderComponent({ conversations: mockConversations, + spaceId: 'default', }); expect(navigateToApp).toHaveBeenCalledWith('home'); }); - it('renders AssistantSettingsManagement when conversations are available and securityAIAssistant is enabled', () => { + it.only('renders AssistantSettingsManagement when conversations are available and securityAIAssistant is enabled', () => { renderComponent({ conversations: mockConversations, + spaceId: 'default', }); expect(screen.getByTestId('AssistantSettingsManagement')).toBeInTheDocument(); }); + + it('does not render AssistantSettingsManagement when spaceId is not available', () => { + renderComponent({ + conversations: mockConversations, + }); + expect(screen.queryByTestId('AssistantSettingsManagement')).not.toBeInTheDocument(); + }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx index 33a33586cdd24..ca81058238a8e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx @@ -11,12 +11,12 @@ import type { Conversation } from '@kbn/elastic-assistant'; import { useSearchParams } from 'react-router-dom-v5-compat'; import { i18n } from '@kbn/i18n'; import { - AssistantSpaceIdProvider, mergeBaseWithPersistedConversations, useAssistantContext, useFetchCurrentUserConversations, WELCOME_CONVERSATION_TITLE, } from '@kbn/elastic-assistant'; +import { AssistantSpaceIdProvider } from '@kbn/elastic-assistant/impl/assistant/use_space_aware_context'; import { useConversation } from '@kbn/elastic-assistant/impl/assistant/use_conversation'; import type { FetchConversationsResponse } from '@kbn/elastic-assistant/impl/assistant/api'; import { SECURITY_AI_SETTINGS } from '@kbn/elastic-assistant/impl/assistant/settings/translations'; From 829f0b8efe418379ec8a5d4ce14f3955ad4125f6 Mon Sep 17 00:00:00 2001 From: Angela Chuang Date: Wed, 25 Jun 2025 10:52:58 +0100 Subject: [PATCH 5/7] unit tests --- .../assistant/stack_management/management_settings.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx index 4f4c8f2f10f80..57af0fea8478b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx @@ -131,7 +131,7 @@ describe('ManagementSettings', () => { expect(navigateToApp).toHaveBeenCalledWith('home'); }); - it.only('renders AssistantSettingsManagement when conversations are available and securityAIAssistant is enabled', () => { + it('renders AssistantSettingsManagement when conversations are available and securityAIAssistant is enabled', () => { renderComponent({ conversations: mockConversations, spaceId: 'default', From 856f7b13d64072b3bb7577b5e13c098d05dd2e50 Mon Sep 17 00:00:00 2001 From: Angela Chuang Date: Wed, 25 Jun 2025 11:01:18 +0100 Subject: [PATCH 6/7] unit tests --- .../assistant/stack_management/management_settings.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx index 57af0fea8478b..97e27ce098288 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.test.tsx @@ -131,7 +131,7 @@ describe('ManagementSettings', () => { expect(navigateToApp).toHaveBeenCalledWith('home'); }); - it('renders AssistantSettingsManagement when conversations are available and securityAIAssistant is enabled', () => { + it('renders AssistantSettingsManagement when spaceId, conversations are available and securityAIAssistant is enabled', () => { renderComponent({ conversations: mockConversations, spaceId: 'default', From 270b0cbdbbc51849743687340a1180289eee2f84 Mon Sep 17 00:00:00 2001 From: Angela Chuang Date: Wed, 25 Jun 2025 11:29:35 +0100 Subject: [PATCH 7/7] align code with main --- .../assistant/stack_management/management_settings.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx index ca81058238a8e..5b09f532b16d9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/stack_management/management_settings.tsx @@ -132,8 +132,8 @@ export const ManagementSettings = React.memo(() => { navigateToApp('home'); } - if (conversations && spaceId) { - return ( + if (conversations) { + return spaceId ? ( { currentTab={currentTab} /> - ); + ) : null; } return <>;