mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-27 16:33:49 +00:00
test: Add unit test for projects/app/src/pages/api/core/dataset/collection/paths.ts (#4350)
* Add unit tests for getDatasetCollectionPaths function and modify paths.ts to export handler. * Update paths.ts --------- Co-authored-by: gru-agent[bot] <185149714+gru-agent[bot]@users.noreply.github.com> Co-authored-by: Archer <545436317@qq.com>
This commit is contained in:
87
test/cases/pages/api/core/dataset/collection/paths.test.ts
Normal file
87
test/cases/pages/api/core/dataset/collection/paths.test.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { getDatasetCollectionPaths } from '@/pages/api/core/dataset/collection/paths';
|
||||
import { MongoDatasetCollection } from '@fastgpt/service/core/dataset/collection/schema';
|
||||
|
||||
vi.mock('@fastgpt/service/core/dataset/collection/schema', () => ({
|
||||
MongoDatasetCollection: {
|
||||
findOne: vi.fn()
|
||||
},
|
||||
DatasetColCollectionName: 'dataset_collections'
|
||||
}));
|
||||
|
||||
describe('getDatasetCollectionPaths', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it('should return empty array for empty parentId', async () => {
|
||||
const result = await getDatasetCollectionPaths({});
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
|
||||
it('should return empty array if collection not found', async () => {
|
||||
vi.mocked(MongoDatasetCollection.findOne).mockResolvedValueOnce(null);
|
||||
|
||||
const result = await getDatasetCollectionPaths({ parentId: 'nonexistent-id' });
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
|
||||
it('should return single path for collection without parent', async () => {
|
||||
vi.mocked(MongoDatasetCollection.findOne).mockResolvedValueOnce({
|
||||
_id: 'col1',
|
||||
name: 'Collection 1',
|
||||
parentId: ''
|
||||
});
|
||||
|
||||
const result = await getDatasetCollectionPaths({ parentId: 'col1' });
|
||||
expect(result).toEqual([{ parentId: 'col1', parentName: 'Collection 1' }]);
|
||||
});
|
||||
|
||||
it('should return full path for nested collections', async () => {
|
||||
vi.mocked(MongoDatasetCollection.findOne)
|
||||
.mockResolvedValueOnce({
|
||||
_id: 'col3',
|
||||
name: 'Collection 3',
|
||||
parentId: 'col2'
|
||||
})
|
||||
.mockResolvedValueOnce({
|
||||
_id: 'col2',
|
||||
name: 'Collection 2',
|
||||
parentId: 'col1'
|
||||
})
|
||||
.mockResolvedValueOnce({
|
||||
_id: 'col1',
|
||||
name: 'Collection 1',
|
||||
parentId: ''
|
||||
});
|
||||
|
||||
const result = await getDatasetCollectionPaths({ parentId: 'col3' });
|
||||
|
||||
expect(result).toEqual([
|
||||
{ parentId: 'col1', parentName: 'Collection 1' },
|
||||
{ parentId: 'col2', parentName: 'Collection 2' },
|
||||
{ parentId: 'col3', parentName: 'Collection 3' }
|
||||
]);
|
||||
});
|
||||
|
||||
it('should handle circular references gracefully', async () => {
|
||||
vi.mocked(MongoDatasetCollection.findOne)
|
||||
.mockResolvedValueOnce({
|
||||
_id: 'col1',
|
||||
name: 'Collection 1',
|
||||
parentId: 'col2'
|
||||
})
|
||||
.mockResolvedValueOnce({
|
||||
_id: 'col2',
|
||||
name: 'Collection 2',
|
||||
parentId: 'col1'
|
||||
});
|
||||
|
||||
const result = await getDatasetCollectionPaths({ parentId: 'col1' });
|
||||
|
||||
expect(result).toEqual([
|
||||
{ parentId: 'col2', parentName: 'Collection 2' },
|
||||
{ parentId: 'col1', parentName: 'Collection 1' }
|
||||
]);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user