Skip to content

Commit

Permalink
Add unit test for save objects find route
Browse files Browse the repository at this point in the history
Signed-off-by: Owen Wang <[email protected]>
  • Loading branch information
FriedhelmWS committed Feb 22, 2025
1 parent b621703 commit d164062
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 5 deletions.
158 changes: 158 additions & 0 deletions src/plugins/saved_objects_management/server/routes/find.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*
* Any modifications Copyright OpenSearch Contributors. See
* GitHub history for details.
*/

import { registerFindRoute } from './find';
import { ISavedObjectsManagement } from '../services';
import { managementMock } from '../services/management.mock';
import { IRouter } from 'src/core/server';
import { httpServiceMock } from '../../../../core/server/mocks';

describe('Find route', () => {
let router: jest.Mocked<IRouter>;
let managementService: jest.Mocked<ISavedObjectsManagement>;
let context: any;
let req: any;
let res: any;

beforeAll(() => {
router = httpServiceMock.createRouter();

// Mock management service
managementService = managementMock.create();

// Mock context with savedObjects client
const savedObjectsClient = {
find: jest.fn(),
get: jest.fn(),
};

context = {
core: {
savedObjects: {
client: savedObjectsClient,
},
},
};

// Mock request
req = {
query: {
perPage: 20,
page: 1,
type: 'test-type',
fields: ['field1', 'field2'],
},
};

// Mock response
res = {
ok: jest.fn(),
};
});

it('should register GET route with correct path', () => {
registerFindRoute(router, Promise.resolve(managementService));

expect(router.get).toHaveBeenCalledWith(
expect.objectContaining({
path: '/api/opensearch-dashboards/management/saved_objects/_find',
}),
expect.any(Function)
);
});

it('should handle basic find request', async () => {
registerFindRoute(router, Promise.resolve(managementService));

const findResponse = {
saved_objects: [
{
type: 'test-type',
id: '1',
attributes: {
field1: 'value1',
field2: 'value2',
},
},
],
total: 1,
per_page: 20,
page: 1,
};

context.core.savedObjects.client.find.mockResolvedValue(findResponse);

const handler = router.get.mock.calls[0][1];
await handler(context, req, res);

expect(context.core.savedObjects.client.find).toHaveBeenCalledWith(
expect.objectContaining({
perPage: 20,
page: 1,
type: 'test-type',
})
);
expect(res.ok).toHaveBeenCalled();
});

it('should handle index-pattern type correctly', async () => {
registerFindRoute(router, Promise.resolve(managementService));

const findResponse = {
saved_objects: [
{
type: 'index-pattern',
id: '1',
attributes: {
title: 'test-pattern',
},
references: [],
},
],
total: 1,
per_page: 20,
page: 1,
};

context.core.savedObjects.client.find.mockResolvedValue(findResponse);
context.core.savedObjects.client.get.mockResolvedValue({ attributes: {} });

const handler = router.get.mock.calls[0][1];
await handler(context, req, res);

expect(context.core.savedObjects.client.find).toHaveBeenCalled();
expect(res.ok).toHaveBeenCalled();
});

it('should handle workspace filtering', async () => {
registerFindRoute(router, Promise.resolve(managementService));

req.query.workspaces = ['workspace1'];

const findResponse = {
saved_objects: [],
total: 0,
per_page: 20,
page: 1,
};

context.core.savedObjects.client.find.mockResolvedValue(findResponse);

const handler = router.get.mock.calls[0][1];
await handler(context, req, res);

expect(context.core.savedObjects.client.find).toHaveBeenCalledWith(
expect.objectContaining({
workspaces: ['workspace1'],
})
);
});
});
10 changes: 5 additions & 5 deletions src/plugins/workspace/server/integration_tests/routes.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const testWorkspace: WorkspaceAttribute = {
features: ['use-case-all'],
};

const cleanWorkspaces = async (
const clearWorkspaces = async (
root: ReturnType<typeof osdTestServer.createRoot>,
osd: osdTestServer.TestOpenSearchDashboardsUtils
) => {
Expand Down Expand Up @@ -70,7 +70,7 @@ describe('workspace service api integration test', () => {
await opensearchServer.stop();
});
describe('Workspace CRUD APIs', () => {
afterEach(async () => cleanWorkspaces(root, osd));
afterEach(async () => clearWorkspaces(root, osd));

it('create', async () => {
await osdTestServer.request
Expand Down Expand Up @@ -458,7 +458,7 @@ describe('workspace service api integration test', () => {
references: [],
};

afterAll(async () => cleanWorkspaces(root, osd));
afterAll(async () => clearWorkspaces(root, osd));

it('requires objects', async () => {
const result = await osdTestServer.request
Expand Down Expand Up @@ -605,7 +605,7 @@ describe('workspace service api integration test when savedObjects.permission.en
await opensearchServer.stop();
});
describe('Workspace CRUD APIs', () => {
afterEach(async () => cleanWorkspaces(root, osd));
afterEach(async () => clearWorkspaces(root, osd));

it('create', async () => {
await osdTestServer.request
Expand Down Expand Up @@ -673,7 +673,7 @@ describe('workspace service api integration test when savedObjects.permission.en
});

describe('Saved Object Management APIs', () => {
afterEach(async () => cleanWorkspaces(root, osd));
afterEach(async () => clearWorkspaces(root, osd));

const findUrl = '/api/opensearch-dashboards/management/saved_objects/_find?type=index-pattern';

Expand Down

0 comments on commit d164062

Please sign in to comment.