[Discover] Fix "Unsaved changes" badge for ES|QL (#174645)

## Summary

This PR fixes a bug where "Unsaved changes" badge would appear after
page refresh for an ES|QL saved search.

To reproduce on main:
- Create a new ES|QL saved search
- Reload the page => Notice that the badge appeared

With this PR the issue should be resolved. It was caused by the fact
that adhoc data view id might change internally.


### Checklist

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
This commit is contained in:
Julia Rechkunova 2024-01-15 12:12:56 +01:00 committed by GitHub
parent f8a54a5c82
commit 900ab217a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 1 deletions

View file

@ -318,7 +318,9 @@ function getSearchSourceFieldValueForComparison(
searchSourceFieldName: keyof SearchSourceFields
) {
if (searchSourceFieldName === 'index') {
return searchSource.getField('index')?.id;
const query = searchSource.getField('query');
// ad-hoc data view id can change, so we rather compare the ES|QL query itself here
return query && 'esql' in query ? query.esql : searchSource.getField('index')?.id;
}
if (searchSourceFieldName === 'filter') {

View file

@ -11,6 +11,7 @@ import { FtrProviderContext } from '../ftr_provider_context';
const SAVED_SEARCH_NAME = 'test saved search';
const SAVED_SEARCH_WITH_FILTERS_NAME = 'test saved search with filters';
const SAVED_SEARCH_ESQL = 'test saved search ES|QL';
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const esArchiver = getService('esArchiver');
@ -18,6 +19,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const testSubjects = getService('testSubjects');
const dataGrid = getService('dataGrid');
const filterBar = getService('filterBar');
const monacoEditor = getService('monacoEditor');
const browser = getService('browser');
const PageObjects = getPageObjects([
'settings',
'common',
@ -194,5 +197,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
expect(await filterBar.isFilterNegated('bytes')).to.be(false);
expect(await PageObjects.discover.getHitCount()).to.be('1,373');
});
it('should not show a badge after loading an ES|QL saved search, only after changes', async () => {
await PageObjects.discover.selectTextBaseLang();
await monacoEditor.setCodeEditorValue('from logstash-* | limit 10');
await testSubjects.click('querySubmitButton');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.discover.waitUntilSearchingHasFinished();
await PageObjects.discover.saveSearch(SAVED_SEARCH_ESQL);
await PageObjects.discover.waitUntilSearchingHasFinished();
await testSubjects.missingOrFail('unsavedChangesBadge');
await browser.refresh();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.discover.waitUntilSearchingHasFinished();
await testSubjects.missingOrFail('unsavedChangesBadge');
await monacoEditor.setCodeEditorValue('from logstash-* | limit 100');
await testSubjects.click('querySubmitButton');
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.discover.waitUntilSearchingHasFinished();
await testSubjects.existOrFail('unsavedChangesBadge');
});
});
}