mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
Data views - saved object client use resolve
instead of get
(#108637)
* so client - use resolve instead of get Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
b1d6779d43
commit
119c742185
7 changed files with 139 additions and 4 deletions
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
export class DataViewSavedObjectConflictError extends Error {
|
||||
constructor(savedObjectId: string) {
|
||||
super(`Conflict loading DataView saved object, id: ${savedObjectId}`);
|
||||
this.name = 'DataViewSavedObjectConflictError';
|
||||
}
|
||||
}
|
|
@ -7,3 +7,4 @@
|
|||
*/
|
||||
|
||||
export * from './duplicate_index_pattern';
|
||||
export * from './data_view_saved_object_conflict';
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { SavedObjectsClientPublicToCommon } from './saved_objects_client_wrapper';
|
||||
import { savedObjectsServiceMock } from 'src/core/public/mocks';
|
||||
|
||||
import { DataViewSavedObjectConflictError } from '../../common/data_views';
|
||||
|
||||
describe('SavedObjectsClientPublicToCommon', () => {
|
||||
const soClient = savedObjectsServiceMock.createStartContract().client;
|
||||
|
||||
test('get saved object - exactMatch', async () => {
|
||||
const mockedSavedObject = {
|
||||
version: 'abc',
|
||||
};
|
||||
soClient.resolve = jest
|
||||
.fn()
|
||||
.mockResolvedValue({ outcome: 'exactMatch', saved_object: mockedSavedObject });
|
||||
const service = new SavedObjectsClientPublicToCommon(soClient);
|
||||
const result = await service.get('index-pattern', '1');
|
||||
expect(result).toStrictEqual(mockedSavedObject);
|
||||
});
|
||||
|
||||
test('get saved object - aliasMatch', async () => {
|
||||
const mockedSavedObject = {
|
||||
version: 'def',
|
||||
};
|
||||
soClient.resolve = jest
|
||||
.fn()
|
||||
.mockResolvedValue({ outcome: 'aliasMatch', saved_object: mockedSavedObject });
|
||||
const service = new SavedObjectsClientPublicToCommon(soClient);
|
||||
const result = await service.get('index-pattern', '1');
|
||||
expect(result).toStrictEqual(mockedSavedObject);
|
||||
});
|
||||
|
||||
test('get saved object - conflict', async () => {
|
||||
const mockedSavedObject = {
|
||||
version: 'ghi',
|
||||
};
|
||||
|
||||
soClient.resolve = jest
|
||||
.fn()
|
||||
.mockResolvedValue({ outcome: 'conflict', saved_object: mockedSavedObject });
|
||||
const service = new SavedObjectsClientPublicToCommon(soClient);
|
||||
|
||||
await expect(service.get('index-pattern', '1')).rejects.toThrow(
|
||||
DataViewSavedObjectConflictError
|
||||
);
|
||||
});
|
||||
});
|
|
@ -12,9 +12,10 @@ import {
|
|||
SavedObjectsClientCommon,
|
||||
SavedObjectsClientCommonFindArgs,
|
||||
SavedObject,
|
||||
DataViewSavedObjectConflictError,
|
||||
} from '../../common/data_views';
|
||||
|
||||
type SOClient = Pick<SavedObjectsClient, 'find' | 'get' | 'update' | 'create' | 'delete'>;
|
||||
type SOClient = Pick<SavedObjectsClient, 'find' | 'resolve' | 'update' | 'create' | 'delete'>;
|
||||
|
||||
const simpleSavedObjectToSavedObject = <T>(simpleSavedObject: SimpleSavedObject): SavedObject<T> =>
|
||||
({
|
||||
|
@ -33,8 +34,11 @@ export class SavedObjectsClientPublicToCommon implements SavedObjectsClientCommo
|
|||
}
|
||||
|
||||
async get<T = unknown>(type: string, id: string) {
|
||||
const response = await this.savedObjectClient.get<T>(type, id);
|
||||
return simpleSavedObjectToSavedObject<T>(response);
|
||||
const response = await this.savedObjectClient.resolve<T>(type, id);
|
||||
if (response.outcome === 'conflict') {
|
||||
throw new DataViewSavedObjectConflictError(id);
|
||||
}
|
||||
return simpleSavedObjectToSavedObject<T>(response.saved_object);
|
||||
}
|
||||
async update(
|
||||
type: string,
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { SavedObjectsClientServerToCommon } from './saved_objects_client_wrapper';
|
||||
import { SavedObjectsClientContract } from 'src/core/server';
|
||||
|
||||
import { DataViewSavedObjectConflictError } from '../../common/data_views';
|
||||
|
||||
describe('SavedObjectsClientPublicToCommon', () => {
|
||||
const soClient = ({ resolve: jest.fn() } as unknown) as SavedObjectsClientContract;
|
||||
|
||||
test('get saved object - exactMatch', async () => {
|
||||
const mockedSavedObject = {
|
||||
version: 'abc',
|
||||
};
|
||||
soClient.resolve = jest
|
||||
.fn()
|
||||
.mockResolvedValue({ outcome: 'exactMatch', saved_object: mockedSavedObject });
|
||||
const service = new SavedObjectsClientServerToCommon(soClient);
|
||||
const result = await service.get('index-pattern', '1');
|
||||
expect(result).toStrictEqual(mockedSavedObject);
|
||||
});
|
||||
|
||||
test('get saved object - aliasMatch', async () => {
|
||||
const mockedSavedObject = {
|
||||
version: 'def',
|
||||
};
|
||||
soClient.resolve = jest
|
||||
.fn()
|
||||
.mockResolvedValue({ outcome: 'aliasMatch', saved_object: mockedSavedObject });
|
||||
const service = new SavedObjectsClientServerToCommon(soClient);
|
||||
const result = await service.get('index-pattern', '1');
|
||||
expect(result).toStrictEqual(mockedSavedObject);
|
||||
});
|
||||
|
||||
test('get saved object - conflict', async () => {
|
||||
const mockedSavedObject = {
|
||||
version: 'ghi',
|
||||
};
|
||||
|
||||
soClient.resolve = jest
|
||||
.fn()
|
||||
.mockResolvedValue({ outcome: 'conflict', saved_object: mockedSavedObject });
|
||||
const service = new SavedObjectsClientServerToCommon(soClient);
|
||||
|
||||
await expect(service.get('index-pattern', '1')).rejects.toThrow(
|
||||
DataViewSavedObjectConflictError
|
||||
);
|
||||
});
|
||||
});
|
|
@ -10,6 +10,7 @@ import { SavedObjectsClientContract, SavedObject } from 'src/core/server';
|
|||
import {
|
||||
SavedObjectsClientCommon,
|
||||
SavedObjectsClientCommonFindArgs,
|
||||
DataViewSavedObjectConflictError,
|
||||
} from '../../common/data_views';
|
||||
|
||||
export class SavedObjectsClientServerToCommon implements SavedObjectsClientCommon {
|
||||
|
@ -23,7 +24,11 @@ export class SavedObjectsClientServerToCommon implements SavedObjectsClientCommo
|
|||
}
|
||||
|
||||
async get<T = unknown>(type: string, id: string) {
|
||||
return await this.savedObjectClient.get<T>(type, id);
|
||||
const response = await this.savedObjectClient.resolve<T>(type, id);
|
||||
if (response.outcome === 'conflict') {
|
||||
throw new DataViewSavedObjectConflictError(id);
|
||||
}
|
||||
return response.saved_object;
|
||||
}
|
||||
async update(
|
||||
type: string,
|
||||
|
|
|
@ -54,6 +54,7 @@ export {
|
|||
IndexPattern,
|
||||
IndexPatternsService,
|
||||
IndexPatternsService as IndexPatternsCommonService,
|
||||
DataView,
|
||||
} from '../common';
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue