[8.12] [DataViews] Unskip and stabilize functional tests of dataviews management (#173900) (#174046)

# Backport

This will backport the following commits from `main` to `8.12`:
- [[DataViews] Unskip and stabilize functional tests of dataviews
management (#173900)](https://github.com/elastic/kibana/pull/173900)

<!--- Backport version: 9.4.3 -->

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

<!--BACKPORT [{"author":{"name":"Matthias
Wilhelm","email":"matthias.wilhelm@elastic.co"},"sourceCommit":{"committedDate":"2023-12-28T20:52:11Z","message":"[DataViews]
Unskip and stabilize functional tests of dataviews management
(#173900)\n\nImproving data view related functional test code to reduce
flakiness","sha":"d67c0eff2f304075cf57fd5e2c466e565e098426","branchLabelMapping":{"^v8.13.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["test_ui_functional","Feature:Data
Views","release_note:skip","Team:DataDiscovery","backport:prev-minor","v8.13.0"],"title":"[DataViews]
Unskip and stabilize functional tests of dataviews
management","number":173900,"url":"https://github.com/elastic/kibana/pull/173900","mergeCommit":{"message":"[DataViews]
Unskip and stabilize functional tests of dataviews management
(#173900)\n\nImproving data view related functional test code to reduce
flakiness","sha":"d67c0eff2f304075cf57fd5e2c466e565e098426"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v8.13.0","branchLabelMappingKey":"^v8.13.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/173900","number":173900,"mergeCommit":{"message":"[DataViews]
Unskip and stabilize functional tests of dataviews management
(#173900)\n\nImproving data view related functional test code to reduce
flakiness","sha":"d67c0eff2f304075cf57fd5e2c466e565e098426"}}]}]
BACKPORT-->

Co-authored-by: Matthias Wilhelm <matthias.wilhelm@elastic.co>
This commit is contained in:
Kibana Machine 2023-12-28 16:58:02 -05:00 committed by GitHub
parent 5326b14e68
commit a8bbcd7a20
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 60 additions and 20 deletions

View file

@ -257,6 +257,8 @@ const IndexPatternEditorFlyoutContentComponent = ({
className="indexPatternEditor__form"
error={form.getErrors()}
isInvalid={form.isSubmitted && !form.isValid && form.getErrors().length}
data-validation-error={form.getErrors().length ? '1' : '0'}
data-test-subj="indexPatternEditorForm"
>
<UseField path="isAdHoc" />
{indexPatternTypeSelect}

View file

@ -197,6 +197,7 @@ export const TitleField = ({
data-test-subj="createIndexPatternTitleInput"
append={<TitleDocsPopover />}
placeholder="example-*"
data-is-validating={field.isValidating ? '1' : '0'}
/>
</EuiFormRow>
);

View file

@ -308,8 +308,12 @@ export class DataViewEditorService {
getFieldsOptions: GetFieldsOptions,
requireTimestampField: boolean
) => {
const fields = await ensureMinimumTime(this.dataViews.getFieldsForWildcard(getFieldsOptions));
return extractTimeFields(fields as DataViewField[], requireTimestampField);
try {
const fields = await ensureMinimumTime(this.dataViews.getFieldsForWildcard(getFieldsOptions));
return extractTimeFields(fields as DataViewField[], requireTimestampField);
} catch (e) {
return [];
}
};
private getTimestampOptionsForWildcardCached = async (
@ -374,7 +378,7 @@ export class DataViewEditorService {
);
// necessary to get new observable value if the field hasn't changed
this.loadIndices();
await this.loadIndices();
// Wait until we have fetched the indices.
// The result will then be sent to the field validator(s) (when calling await provider(););

View file

@ -187,8 +187,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
});
});
// FLAKY: https://github.com/elastic/kibana/issues/173625
describe.skip('index pattern edit', function () {
describe('index pattern edit', function () {
it('should update field list', async function () {
await PageObjects.settings.editIndexPattern(
'kibana_sample_data_flights',

View file

@ -24,13 +24,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await PageObjects.settings.clickKibanaIndexPatterns();
});
after(async function () {
await kibanaServer.savedObjects.cleanStandardList();
});
beforeEach(async function () {
await PageObjects.settings.createIndexPattern('logstash-*');
});
afterEach(async function () {
await PageObjects.settings.removeIndexPattern();
await kibanaServer.savedObjects.cleanStandardList();
});
it('should filter indexed fields by type', async function () {

View file

@ -61,6 +61,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
it('should modify runtime field', async function () {
await PageObjects.settings.filterField(fieldName);
await testSubjects.click('editFieldFormat');
await retry.try(async () => {
await testSubjects.existOrFail('flyoutTitle');
});
await PageObjects.settings.setFieldType('Long');
await PageObjects.settings.setFieldScriptWithoutToggle('emit(6);');
await PageObjects.settings.toggleRow('formatRow');

View file

@ -177,9 +177,20 @@ export class SettingsPageObject extends FtrService {
async selectTimeFieldOption(selection: string) {
// open dropdown
const timefield = await this.getTimeFieldNameField();
await timefield.click();
await this.browser.pressKeys(selection);
await this.browser.pressKeys(this.browser.keys.TAB);
const prevValue = await timefield.getAttribute('value');
const enabled = await timefield.isEnabled();
if (prevValue === selection || !enabled) {
return;
}
await this.retry.waitFor('time field dropdown have the right value', async () => {
await timefield.click();
await timefield.type(this.browser.keys.DELETE, { charByChar: true });
await this.browser.pressKeys(selection);
await this.browser.pressKeys(this.browser.keys.TAB);
const value = await timefield.getAttribute('value');
return value === selection;
});
}
async getTimeFieldOption(selection: string) {
@ -192,7 +203,7 @@ export class SettingsPageObject extends FtrService {
async setNameField(dataViewName: string) {
const field = await this.getNameField();
await field.clearValue();
await field.clearValueWithKeyboard();
await field.type(dataViewName);
}
@ -486,7 +497,7 @@ export class SettingsPageObject extends FtrService {
async allowHiddenClick() {
await this.testSubjects.click('toggleAdvancedSetting');
const allowHiddenField = await this.testSubjects.find('allowHiddenField');
(await allowHiddenField.findByTagName('button')).click();
await (await allowHiddenField.findByTagName('button')).click();
}
async createIndexPattern(
@ -567,19 +578,26 @@ export class SettingsPageObject extends FtrService {
throw new Error('No Data View name provided for edit');
}
this.clickEditIndexButton();
await this.clickEditIndexButton();
await this.header.waitUntilLoadingHasFinished();
await this.retry.try(async () => {
if (dataViewName) {
await this.setNameField(dataViewName);
}
await this.setIndexPatternField(indexPatternName);
await this.header.waitUntilLoadingHasFinished();
if (timefield) {
await this.selectTimeFieldOption(timefield);
}
const indexPatternSaveBtn = await this.getSaveIndexPatternButton();
await indexPatternSaveBtn.click();
const form = await this.testSubjects.findAll('indexPatternEditorForm');
const hasValidationErrors =
form.length !== 0 && (await form[0].getAttribute('data-validation-error')) === '1';
expect(hasValidationErrors).to.eql(false);
});
if (dataViewName) {
await this.setNameField(dataViewName);
}
if (timefield) {
await this.selectTimeFieldOption(timefield);
}
await (await this.getSaveIndexPatternButton()).click();
if (errorCheck) {
await this.retry.try(async () => {
@ -653,6 +671,10 @@ export class SettingsPageObject extends FtrService {
const currentName = await field.getAttribute('value');
this.log.debug(`setIndexPatternField set to ${currentName}`);
expect(currentName).to.eql(indexPatternName);
await this.retry.waitFor('validating the given index pattern should be finished', async () => {
const isValidating = await field.getAttribute('data-is-validating');
return isValidating === '0';
});
}
async getCreateIndexPatternGoToStep2Button() {

View file

@ -24,13 +24,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await testSubjects.click('app-card-dataViews');
});
after(async function () {
await kibanaServer.savedObjects.cleanStandardList();
});
beforeEach(async function () {
await PageObjects.settings.createIndexPattern('logstash-*');
});
afterEach(async function () {
await PageObjects.settings.removeIndexPattern();
await kibanaServer.savedObjects.cleanStandardList();
});
it('should filter indexed fields by type', async function () {

View file

@ -61,6 +61,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
it('should modify runtime field', async function () {
await PageObjects.settings.filterField(fieldName);
await testSubjects.click('editFieldFormat');
await retry.try(async () => {
await testSubjects.existOrFail('flyoutTitle');
});
await PageObjects.settings.setFieldType('Long');
await PageObjects.settings.setFieldScriptWithoutToggle('emit(6);');
await PageObjects.settings.toggleRow('formatRow');