Export saved objects based on search criteria (#44723) (#45004)

* export all saved objects returned from search, not all saved objects that exist

* remove unused mock
This commit is contained in:
Larry Gregory 2019-09-06 12:55:32 -04:00 committed by GitHub
parent 31e8461aa1
commit 3eb888bd8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 9 additions and 56 deletions

View file

@ -20,7 +20,7 @@
import React from 'react';
import { shallowWithIntl } from 'test_utils/enzyme_helpers';
import { ObjectsTable, POSSIBLE_TYPES } from '../objects_table';
import { ObjectsTable } from '../objects_table';
import { Flyout } from '../components/flyout/';
import { Relationships } from '../components/relationships/';
import { findObjects } from '../../../lib';
@ -57,10 +57,6 @@ jest.mock('../../../lib/fetch_export_objects', () => ({
fetchExportObjects: jest.fn(),
}));
jest.mock('../../../lib/fetch_export_by_type', () => ({
fetchExportByType: jest.fn(),
}));
jest.mock('../../../lib/get_saved_object_counts', () => ({
getSavedObjectCounts: jest.fn().mockImplementation(() => {
return {
@ -320,7 +316,7 @@ describe('ObjectsTable', () => {
});
it('should export all', async () => {
const { fetchExportByType } = require('../../../lib/fetch_export_by_type');
const { fetchExportObjects } = require('../../../lib/fetch_export_objects');
const { saveAs } = require('@elastic/filesaver');
const component = shallowWithIntl(
<ObjectsTable.WrappedComponent
@ -335,11 +331,11 @@ describe('ObjectsTable', () => {
// Set up mocks
const blob = new Blob([JSON.stringify(allSavedObjects)], { type: 'application/ndjson' });
fetchExportByType.mockImplementation(() => blob);
fetchExportObjects.mockImplementation(() => blob);
await component.instance().onExportAll();
expect(fetchExportByType).toHaveBeenCalledWith(POSSIBLE_TYPES, true);
expect(fetchExportObjects).toHaveBeenCalledWith(allSavedObjects.map(so => ({ type: so.type, id: so.id })), true);
expect(saveAs).toHaveBeenCalledWith(blob, 'export.ndjson');
expect(addSuccessMock).toHaveBeenCalledWith({ title: 'Your file is downloading in the background' });
});

View file

@ -39,10 +39,6 @@ jest.mock('ui/chrome', () => ({
addBasePath: () => ''
}));
jest.mock('../../../../../lib/fetch_export_by_type', () => ({
fetchExportByType: jest.fn(),
}));
jest.mock('../../../../../lib/fetch_export_objects', () => ({
fetchExportObjects: jest.fn(),
}));

View file

@ -58,7 +58,6 @@ import {
getRelationships,
getSavedObjectLabel,
fetchExportObjects,
fetchExportByType,
findObjects,
} from '../../lib';
import { FormattedMessage, injectI18n } from '@kbn/i18n/react';
@ -303,20 +302,14 @@ class ObjectsTableUI extends Component {
onExportAll = async () => {
const { intl } = this.props;
const { exportAllSelectedOptions, isIncludeReferencesDeepChecked } = this.state;
const exportTypes = Object.entries(exportAllSelectedOptions).reduce(
(accum, [id, selected]) => {
if (selected) {
accum.push(id);
}
return accum;
},
[]
);
const { exportAllSelectedOptions, isIncludeReferencesDeepChecked, savedObjects } = this.state;
const exportObjects = savedObjects.filter(so => exportAllSelectedOptions[so.type]).map(so => ({ type: so.type, id: so.id }));
let blob;
try {
blob = await fetchExportByType(exportTypes, isIncludeReferencesDeepChecked);
blob = await fetchExportObjects(exportObjects, isIncludeReferencesDeepChecked);
} catch (e) {
toastNotifications.addDanger({
title: intl.formatMessage({

View file

@ -1,31 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { kfetch } from 'ui/kfetch';
export async function fetchExportByType(types, includeReferencesDeep = false) {
return await kfetch({
method: 'POST',
pathname: '/api/saved_objects/_export',
body: JSON.stringify({
type: types,
includeReferencesDeep,
}),
});
}

View file

@ -17,7 +17,6 @@
* under the License.
*/
export * from './fetch_export_by_type';
export * from './fetch_export_objects';
export * from './in_app_url';
export * from './get_relationships';