mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-06-27 09:51:33 +00:00
* fix: add basePath pattern to support login/register and image paths * Fix linter errors * refactor: Update import statements for getBasePath and isEnabled, and add path utility functions with tests - Refactored imports in addImages.js and StableDiffusion.js to use getBasePath from '@librechat/api'. - Consolidated isEnabled and getBasePath imports in validateImageRequest.js. - Introduced new path utility functions in path.ts and corresponding unit tests in path.spec.ts to validate base path extraction logic. * fix: Update domain server base URL in MarkdownComponents and refactor authentication redirection logic - Changed the domain server base URL in MarkdownComponents.tsx to use the API base URL. - Refactored the useAuthRedirect hook to utilize React Router's navigate for redirection instead of window.location, ensuring a smoother SPA experience. - Added unit tests for the useAuthRedirect hook to verify authentication redirection behavior. * test: Mock isEnabled in validateImages.spec.js for improved test isolation - Updated validateImages.spec.js to mock the isEnabled function from @librechat/api, ensuring that tests can run independently of the actual implementation. - Cleared the DOMAIN_CLIENT environment variable before tests to avoid interference with basePath resolution. --------- Co-authored-by: Danny Avila <danny@librechat.ai>
97 lines
3.1 KiB
TypeScript
97 lines
3.1 KiB
TypeScript
import { logger } from '@librechat/data-schemas';
|
|
import type { Logger } from '@librechat/agents';
|
|
import { getBasePath } from './path';
|
|
|
|
describe('getBasePath', () => {
|
|
let originalDomainClient: string | undefined;
|
|
|
|
beforeEach(() => {
|
|
originalDomainClient = process.env.DOMAIN_CLIENT;
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env.DOMAIN_CLIENT = originalDomainClient;
|
|
});
|
|
|
|
it('should return empty string when DOMAIN_CLIENT is not set', () => {
|
|
delete process.env.DOMAIN_CLIENT;
|
|
expect(getBasePath()).toBe('');
|
|
});
|
|
|
|
it('should return empty string when DOMAIN_CLIENT is root path', () => {
|
|
process.env.DOMAIN_CLIENT = 'http://localhost:3080/';
|
|
expect(getBasePath()).toBe('');
|
|
});
|
|
|
|
it('should return base path for subdirectory deployment', () => {
|
|
process.env.DOMAIN_CLIENT = 'http://localhost:3080/librechat';
|
|
expect(getBasePath()).toBe('/librechat');
|
|
});
|
|
|
|
it('should return base path without trailing slash', () => {
|
|
process.env.DOMAIN_CLIENT = 'http://localhost:3080/librechat/';
|
|
expect(getBasePath()).toBe('/librechat');
|
|
});
|
|
|
|
it('should handle nested subdirectories', () => {
|
|
process.env.DOMAIN_CLIENT = 'http://localhost:3080/apps/librechat';
|
|
expect(getBasePath()).toBe('/apps/librechat');
|
|
});
|
|
|
|
it('should handle HTTPS URLs', () => {
|
|
process.env.DOMAIN_CLIENT = 'https://example.com/librechat';
|
|
expect(getBasePath()).toBe('/librechat');
|
|
});
|
|
|
|
it('should handle URLs with query parameters', () => {
|
|
process.env.DOMAIN_CLIENT = 'http://localhost:3080/librechat?param=value';
|
|
expect(getBasePath()).toBe('/librechat');
|
|
});
|
|
|
|
it('should handle URLs with fragments', () => {
|
|
process.env.DOMAIN_CLIENT = 'http://localhost:3080/librechat#section';
|
|
expect(getBasePath()).toBe('/librechat');
|
|
});
|
|
|
|
it('should return empty string for invalid URL', () => {
|
|
process.env.DOMAIN_CLIENT = 'not-a-valid-url';
|
|
// Accepts (infoObject: object), return value is not used
|
|
const loggerSpy = jest.spyOn(logger, 'warn').mockImplementation(() => {
|
|
return logger as unknown as Logger;
|
|
});
|
|
expect(getBasePath()).toBe('');
|
|
expect(loggerSpy).toHaveBeenCalledWith(
|
|
'Error parsing DOMAIN_CLIENT for base path:',
|
|
expect.objectContaining({
|
|
message: 'Invalid URL',
|
|
}),
|
|
);
|
|
loggerSpy.mockRestore();
|
|
});
|
|
|
|
it('should handle empty string DOMAIN_CLIENT', () => {
|
|
process.env.DOMAIN_CLIENT = '';
|
|
expect(getBasePath()).toBe('');
|
|
});
|
|
|
|
it('should handle undefined DOMAIN_CLIENT', () => {
|
|
process.env.DOMAIN_CLIENT = undefined;
|
|
expect(getBasePath()).toBe('');
|
|
});
|
|
|
|
it('should handle null DOMAIN_CLIENT', () => {
|
|
// @ts-expect-error Testing null case
|
|
process.env.DOMAIN_CLIENT = null;
|
|
expect(getBasePath()).toBe('');
|
|
});
|
|
|
|
it('should handle URLs with ports', () => {
|
|
process.env.DOMAIN_CLIENT = 'http://localhost:8080/librechat';
|
|
expect(getBasePath()).toBe('/librechat');
|
|
});
|
|
|
|
it('should handle URLs with subdomains', () => {
|
|
process.env.DOMAIN_CLIENT = 'https://app.example.com/librechat';
|
|
expect(getBasePath()).toBe('/librechat');
|
|
});
|
|
});
|