diff --git a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts index d072cc3777a7d..647f7cbcc3051 100644 --- a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts @@ -67,6 +67,8 @@ const pages = { 'management-settings-editField-observability:aiAssistantSearchConnectorIndexPattern', saveButton: 'observabilityAiAssistantManagementBottomBarActionsButton', aiAssistantCard: 'aiAssistantSelectionPageObservabilityCard', + resetToDefaultLink: + 'management-settings-resetField-observability:aiAssistantSearchConnectorIndexPattern', }, }; diff --git a/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/settings_security.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/settings_security.spec.ts index d466abfd552ea..1fd0d9d62fcf9 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/settings_security.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/settings_security.spec.ts @@ -8,17 +8,18 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; import { createAndLoginUserWithCustomRole, deleteAndLogoutUser } from './helpers'; +import { interceptRequest } from '../../common/intercept_request'; export default function ({ getPageObjects, getService }: FtrProviderContext) { - const browser = getService('browser'); const PageObjects = getPageObjects(['common', 'error', 'navigationalSearch', 'security']); const ui = getService('observabilityAIAssistantUI'); const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const toasts = getService('toasts'); + const driver = getService('__webdriver__'); - // Failing: See https://github.com/elastic/kibana/issues/191707 - describe.skip('ai assistant management privileges', () => { - // FLAKY: https://github.com/elastic/kibana/issues/191707 - describe.skip('all privileges', () => { + describe('ai assistant management privileges', () => { + describe('all privileges', () => { before(async () => { await createAndLoginUserWithCustomRole(getPageObjects, getService, { // we need all these privileges to view and modify Obs AI Assistant settings view @@ -60,22 +61,68 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await testSubjects.existOrFail(ui.pages.settings.settingsPage); }); it('allows updating of an advanced setting', async () => { - const testSearchConnectorIndexPattern = 'my-logs-index-pattern'; + await PageObjects.common.navigateToUrl('obsAIAssistantManagement', '', { + ensureCurrentUrl: false, + shouldLoginIfPrompted: false, + shouldUseHashForSubUrl: false, + }); + const testSearchConnectorIndexPattern = 'my-search-index-pattern'; const searchConnectorIndexPatternInput = await testSubjects.find( ui.pages.settings.searchConnectorIndexPatternInput ); + // make sure the input is empty (default value) await searchConnectorIndexPatternInput.clearValue(); await searchConnectorIndexPatternInput.type(testSearchConnectorIndexPattern); const saveButton = await testSubjects.find(ui.pages.settings.saveButton); await saveButton.click(); - await browser.refresh(); - const searchConnectorIndexPatternInputValue = - await searchConnectorIndexPatternInput.getAttribute('value'); - expect(searchConnectorIndexPatternInputValue).to.be(testSearchConnectorIndexPattern); - // reset the value - await searchConnectorIndexPatternInput.clearValue(); - await searchConnectorIndexPatternInput.type('logs-*'); + // wait for page to refrsh + await testSubjects.missingOrFail(ui.pages.settings.searchConnectorIndexPatternInput, { + timeout: 2000, + }); + // wait for the new page to fully load + await testSubjects.existOrFail(ui.pages.settings.searchConnectorIndexPatternInput, { + timeout: 2000, + }); + expect(await searchConnectorIndexPatternInput.getAttribute('value')).to.be( + testSearchConnectorIndexPattern + ); + // reset the value back to default + const resetToDefaultLink = await testSubjects.find(ui.pages.settings.resetToDefaultLink); + await resetToDefaultLink.click(); + + expect(await searchConnectorIndexPatternInput.getAttribute('value')).to.be(''); await saveButton.click(); + await testSubjects.missingOrFail(ui.pages.settings.searchConnectorIndexPatternInput, { + timeout: 2000, + }); + // wait for the new page to fully load + await testSubjects.existOrFail(ui.pages.settings.searchConnectorIndexPatternInput, { + timeout: 2000, + }); + expect(await searchConnectorIndexPatternInput.getAttribute('value')).to.be(''); + }); + it('displays failure toast on failed request', async () => { + const searchConnectorIndexPatternInput = await testSubjects.find( + ui.pages.settings.searchConnectorIndexPatternInput + ); + await searchConnectorIndexPatternInput.clearValue(); + await searchConnectorIndexPatternInput.type('test'); + + await interceptRequest( + driver.driver, + '*kibana\\/settings*', + (responseFactory) => { + return responseFactory.fail(); + }, + async () => { + await testSubjects.click(ui.pages.settings.saveButton); + } + ); + + await retry.waitFor('Error saving settings toast', async () => { + const count = await toasts.getCount(); + return count > 0; + }); }); }); describe('with advancedSettings read privilege', () => {