kibana/test/functional/apps/management/_import_objects.js
Chris Roberson 43ea098107
[Management] Fix importing objects connected to saved searches that contain conflicts (#16004) (#16492)
* Handle cases of importing objects that are connected to searches, but error out due to the searches index pattern not found

* Add tests and fix flaky ones
2018-02-02 16:17:35 -05:00

128 lines
5.4 KiB
JavaScript

import expect from 'expect.js';
import path from 'path';
export default function ({ getService, getPageObjects }) {
const retry = getService('retry');
const kibanaServer = getService('kibanaServer');
const esArchiver = getService('esArchiver');
const PageObjects = getPageObjects(['common', 'settings', 'header']);
describe('import objects', function describeIndexTests() {
beforeEach(async function () {
// delete .kibana index and then wait for Kibana to re-create it
await kibanaServer.uiSettings.replace({});
await PageObjects.settings.navigateTo();
await esArchiver.load('management');
});
afterEach(async function () {
await esArchiver.unload('management');
});
it('should import saved objects normally', async function () {
await PageObjects.settings.clickKibanaSavedObjects();
await PageObjects.settings.importFile(path.join(__dirname, 'exports', '_import_objects.json'));
await PageObjects.common.clickConfirmOnModal();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.settings.clickVisualizationsTab();
const rowCount = await retry.try(async () => {
const rows = await PageObjects.settings.getVisualizationRows();
return rows.length;
});
expect(rowCount).to.be(2);
});
it('should import conflicts using a confirm modal', async function () {
await PageObjects.settings.clickKibanaSavedObjects();
await PageObjects.settings.importFile(path.join(__dirname, 'exports', '_import_objects-conflicts.json'));
await PageObjects.common.clickConfirmOnModal();
await PageObjects.settings.setImportIndexFieldOption(2);
await PageObjects.settings.clickChangeIndexConfirmButton();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.settings.clickVisualizationsTab();
const rowCount = await retry.try(async () => {
const rows = await PageObjects.settings.getVisualizationRows();
return rows.length;
});
expect(rowCount).to.be(2);
});
it('should allow for overrides', async function () {
await PageObjects.settings.clickKibanaSavedObjects();
// Put in data which already exists
await PageObjects.settings.importFile(path.join(__dirname, 'exports', '_import_objects_exists.json'));
// Say we want to be asked
await PageObjects.common.clickCancelOnModal();
// Interact with the conflict modal
await PageObjects.settings.setImportIndexFieldOption(2);
await PageObjects.settings.clickChangeIndexConfirmButton();
// Now confirm we want to override
await PageObjects.common.clickConfirmOnModal();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.settings.clickVisualizationsTab();
const rowCount = await retry.try(async () => {
const rows = await PageObjects.settings.getVisualizationRows();
return rows.length;
});
expect(rowCount).to.be(1);
});
it('should allow for cancelling overrides', async function () {
await PageObjects.settings.clickKibanaSavedObjects();
// Put in data which already exists
await PageObjects.settings.importFile(path.join(__dirname, 'exports', '_import_objects_exists.json'));
// Say we want to be asked
await PageObjects.common.clickCancelOnModal();
// Interact with the conflict modal
await PageObjects.settings.setImportIndexFieldOption(2);
await PageObjects.settings.clickChangeIndexConfirmButton();
// Now cancel the override
await PageObjects.common.clickCancelOnModal();
await PageObjects.settings.clickVisualizationsTab();
const rowCount = await retry.try(async () => {
const rows = await PageObjects.settings.getVisualizationRows();
return rows.length;
});
expect(rowCount).to.be(1);
});
it('should handle saved searches and objects with saved searches properly', async function () {
// First, import the saved search
await PageObjects.settings.clickKibanaSavedObjects();
await PageObjects.settings.importFile(path.join(__dirname, 'exports', '_import_objects_saved_search.json'));
await PageObjects.common.clickConfirmOnModal();
// Second, we need to delete the index pattern
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaIndices();
await PageObjects.settings.clickOnOnlyIndexPattern();
await PageObjects.settings.removeIndexPattern();
// Last, import a saved object connected to the saved search
// This should NOT show the modal
await PageObjects.settings.navigateTo();
await PageObjects.settings.clickKibanaSavedObjects();
await PageObjects.settings.importFile(path.join(__dirname, 'exports', '_import_objects_connected_to_saved_search.json'));
await PageObjects.common.clickConfirmOnModal();
await PageObjects.header.waitUntilLoadingHasFinished();
await PageObjects.settings.clickVisualizationsTab();
const vizRowCount = await retry.try(async () => {
const rows = await PageObjects.settings.getVisualizationRows();
return rows.length;
});
expect(vizRowCount).to.be(1);
await PageObjects.settings.clickSearchesTab();
const searchRowCount = await retry.try(async () => {
const rows = await PageObjects.settings.getVisualizationRows();
return rows.length;
});
expect(searchRowCount).to.be(1);
});
});
}