Download api/server/services/Config/loadCustomConfig.spec.js from Zhitomir/chat: direct link, hf CLI and curl.
- Browser
- Download file 4.82 kB
-
https://huggingface.co/spaces/Zhitomir/chat/resolve/main/api/server/services/Config/loadCustomConfig.spec.js
- Command line
-
hf download hf://spaces/Zhitomir/chat/api/server/services/Config/loadCustomConfig.spec.js
-
curl -L -o loadCustomConfig.spec.js https://huggingface.co/spaces/Zhitomir/chat/resolve/main/api/server/services/Config/loadCustomConfig.spec.js
4.82 kB
| jest.mock('axios'); | |
| jest.mock('~/cache/getLogStores'); | |
| jest.mock('~/utils/loadYaml'); | |
| const axios = require('axios'); | |
| const loadCustomConfig = require('./loadCustomConfig'); | |
| const getLogStores = require('~/cache/getLogStores'); | |
| const loadYaml = require('~/utils/loadYaml'); | |
| const { logger } = require('~/config'); | |
| describe('loadCustomConfig', () => { | |
| const mockSet = jest.fn(); | |
| const mockCache = { set: mockSet }; | |
| beforeEach(() => { | |
| jest.resetAllMocks(); | |
| delete process.env.CONFIG_PATH; | |
| getLogStores.mockReturnValue(mockCache); | |
| }); | |
| it('should return null and log error if remote config fetch fails', async () => { | |
| process.env.CONFIG_PATH = 'http://example.com/config.yaml'; | |
| axios.get.mockRejectedValue(new Error('Network error')); | |
| const result = await loadCustomConfig(); | |
| expect(logger.error).toHaveBeenCalledTimes(1); | |
| expect(result).toBeNull(); | |
| }); | |
| it('should return null for an invalid local config file', async () => { | |
| process.env.CONFIG_PATH = 'localConfig.yaml'; | |
| loadYaml.mockReturnValueOnce(null); | |
| const result = await loadCustomConfig(); | |
| expect(result).toBeNull(); | |
| }); | |
| it('should parse, validate, and cache a valid local configuration', async () => { | |
| const mockConfig = { | |
| version: '1.0', | |
| cache: true, | |
| endpoints: { | |
| custom: [ | |
| { | |
| name: 'mistral', | |
| apiKey: 'user_provided', | |
| baseURL: 'https://api.mistral.ai/v1', | |
| }, | |
| ], | |
| }, | |
| }; | |
| process.env.CONFIG_PATH = 'validConfig.yaml'; | |
| loadYaml.mockReturnValueOnce(mockConfig); | |
| const result = await loadCustomConfig(); | |
| expect(result).toEqual(mockConfig); | |
| expect(mockSet).toHaveBeenCalledWith(expect.anything(), mockConfig); | |
| }); | |
| it('should return null and log if config schema validation fails', async () => { | |
| const invalidConfig = { invalidField: true }; | |
| process.env.CONFIG_PATH = 'invalidConfig.yaml'; | |
| loadYaml.mockReturnValueOnce(invalidConfig); | |
| const result = await loadCustomConfig(); | |
| expect(result).toBeNull(); | |
| }); | |
| it('should handle and return null on YAML parse error for a string response from remote', async () => { | |
| process.env.CONFIG_PATH = 'http://example.com/config.yaml'; | |
| axios.get.mockResolvedValue({ data: 'invalidYAMLContent' }); | |
| const result = await loadCustomConfig(); | |
| expect(result).toBeNull(); | |
| }); | |
| it('should return the custom config object for a valid remote config file', async () => { | |
| const mockConfig = { | |
| version: '1.0', | |
| cache: true, | |
| endpoints: { | |
| custom: [ | |
| { | |
| name: 'mistral', | |
| apiKey: 'user_provided', | |
| baseURL: 'https://api.mistral.ai/v1', | |
| }, | |
| ], | |
| }, | |
| }; | |
| process.env.CONFIG_PATH = 'http://example.com/config.yaml'; | |
| axios.get.mockResolvedValue({ data: mockConfig }); | |
| const result = await loadCustomConfig(); | |
| expect(result).toEqual(mockConfig); | |
| expect(mockSet).toHaveBeenCalledWith(expect.anything(), mockConfig); | |
| }); | |
| it('should return null if the remote config file is not found', async () => { | |
| process.env.CONFIG_PATH = 'http://example.com/config.yaml'; | |
| axios.get.mockRejectedValue({ response: { status: 404 } }); | |
| const result = await loadCustomConfig(); | |
| expect(result).toBeNull(); | |
| }); | |
| it('should return null if the local config file is not found', async () => { | |
| process.env.CONFIG_PATH = 'nonExistentConfig.yaml'; | |
| loadYaml.mockReturnValueOnce(null); | |
| const result = await loadCustomConfig(); | |
| expect(result).toBeNull(); | |
| }); | |
| it('should not cache the config if cache is set to false', async () => { | |
| const mockConfig = { | |
| version: '1.0', | |
| cache: false, | |
| endpoints: { | |
| custom: [ | |
| { | |
| name: 'mistral', | |
| apiKey: 'user_provided', | |
| baseURL: 'https://api.mistral.ai/v1', | |
| }, | |
| ], | |
| }, | |
| }; | |
| process.env.CONFIG_PATH = 'validConfig.yaml'; | |
| loadYaml.mockReturnValueOnce(mockConfig); | |
| await loadCustomConfig(); | |
| expect(mockSet).not.toHaveBeenCalled(); | |
| }); | |
| it('should log the loaded custom config', async () => { | |
| const mockConfig = { | |
| version: '1.0', | |
| cache: true, | |
| endpoints: { | |
| custom: [ | |
| { | |
| name: 'mistral', | |
| apiKey: 'user_provided', | |
| baseURL: 'https://api.mistral.ai/v1', | |
| }, | |
| ], | |
| }, | |
| }; | |
| process.env.CONFIG_PATH = 'validConfig.yaml'; | |
| loadYaml.mockReturnValueOnce(mockConfig); | |
| await loadCustomConfig(); | |
| expect(logger.info).toHaveBeenCalledWith('Custom config file loaded:'); | |
| expect(logger.info).toHaveBeenCalledWith(JSON.stringify(mockConfig, null, 2)); | |
| expect(logger.debug).toHaveBeenCalledWith('Custom config:', mockConfig); | |
| }); | |
| }); | |