mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00

* feat: Source Citations for file_search in Agents * Fix: Added citation limits and relevance score to app service. Removed duplicate tests * ✨ feat: implement Role-level toggle to optionally disable file Source Citation in Agents * 🐛 fix: update mock for librechat-data-provider to include PermissionTypes and SystemRoles --------- Co-authored-by: “Praneeth <praneeth.goparaju@slalom.com>
72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
const { getS3URL } = require('../../../../../server/services/Files/S3/crud');
|
|
|
|
// Mock AWS SDK
|
|
jest.mock('@aws-sdk/client-s3', () => ({
|
|
S3Client: jest.fn(() => ({
|
|
send: jest.fn(),
|
|
})),
|
|
GetObjectCommand: jest.fn(),
|
|
}));
|
|
|
|
jest.mock('@aws-sdk/s3-request-presigner', () => ({
|
|
getSignedUrl: jest.fn(),
|
|
}));
|
|
|
|
jest.mock('../../../../../config', () => ({
|
|
logger: {
|
|
error: jest.fn(),
|
|
},
|
|
}));
|
|
|
|
const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');
|
|
const { GetObjectCommand } = require('@aws-sdk/client-s3');
|
|
|
|
describe('S3 crud.js - test only new parameter changes', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
process.env.AWS_BUCKET_NAME = 'test-bucket';
|
|
});
|
|
|
|
// Test only the new customFilename parameter
|
|
it('should include customFilename in response headers when provided', async () => {
|
|
getSignedUrl.mockResolvedValue('https://test-presigned-url.com');
|
|
|
|
await getS3URL({
|
|
userId: 'user123',
|
|
fileName: 'test.pdf',
|
|
customFilename: 'cleaned_filename.pdf',
|
|
});
|
|
|
|
// Verify the new ResponseContentDisposition parameter is added to GetObjectCommand
|
|
const commandArgs = GetObjectCommand.mock.calls[0][0];
|
|
expect(commandArgs.ResponseContentDisposition).toBe(
|
|
'attachment; filename="cleaned_filename.pdf"',
|
|
);
|
|
});
|
|
|
|
// Test only the new contentType parameter
|
|
it('should include contentType in response headers when provided', async () => {
|
|
getSignedUrl.mockResolvedValue('https://test-presigned-url.com');
|
|
|
|
await getS3URL({
|
|
userId: 'user123',
|
|
fileName: 'test.pdf',
|
|
contentType: 'application/pdf',
|
|
});
|
|
|
|
// Verify the new ResponseContentType parameter is added to GetObjectCommand
|
|
const commandArgs = GetObjectCommand.mock.calls[0][0];
|
|
expect(commandArgs.ResponseContentType).toBe('application/pdf');
|
|
});
|
|
|
|
it('should work without new parameters (backward compatibility)', async () => {
|
|
getSignedUrl.mockResolvedValue('https://test-presigned-url.com');
|
|
|
|
const result = await getS3URL({
|
|
userId: 'user123',
|
|
fileName: 'test.pdf',
|
|
});
|
|
|
|
expect(result).toBe('https://test-presigned-url.com');
|
|
});
|
|
});
|