diff --git a/api/server/services/AppService.js b/api/server/services/AppService.js index 63c136704f2..b62d274d53a 100644 --- a/api/server/services/AppService.js +++ b/api/server/services/AppService.js @@ -12,7 +12,7 @@ const paths = require('~/config/paths'); const AppService = async (app) => { /** @type {TCustomConfig}*/ const config = (await loadCustomConfig()) ?? {}; - const socialLogins = config.registration.socialLogins ?? [ + const socialLogins = config?.registration?.socialLogins ?? [ 'google', 'facebook', 'openid', diff --git a/api/server/services/AppService.spec.js b/api/server/services/AppService.spec.js new file mode 100644 index 00000000000..1f3f2245bec --- /dev/null +++ b/api/server/services/AppService.spec.js @@ -0,0 +1,51 @@ +const { FileSources } = require('librechat-data-provider'); + +const AppService = require('./AppService'); + +jest.mock('./Config/loadCustomConfig', () => { + return jest.fn(() => + Promise.resolve({ + registration: { socialLogins: ['testLogin'] }, + fileStrategy: 'testStrategy', + }), + ); +}); +jest.mock('./Files/Firebase/initialize', () => ({ + initializeFirebase: jest.fn(), +})); + +describe('AppService', () => { + let app; + + beforeEach(() => { + app = { locals: {} }; + process.env.CDN_PROVIDER = undefined; + }); + + it('should correctly assign process.env and app.locals based on custom config', async () => { + await AppService(app); + + expect(process.env.CDN_PROVIDER).toEqual('testStrategy'); + + expect(app.locals).toEqual({ + socialLogins: ['testLogin'], + fileStrategy: 'testStrategy', + paths: expect.anything(), + }); + }); + + it('should initialize Firebase when fileStrategy is firebase', async () => { + require('./Config/loadCustomConfig').mockImplementationOnce(() => + Promise.resolve({ + fileStrategy: FileSources.firebase, + }), + ); + + await AppService(app); + + const { initializeFirebase } = require('./Files/Firebase/initialize'); + expect(initializeFirebase).toHaveBeenCalled(); + + expect(process.env.CDN_PROVIDER).toEqual(FileSources.firebase); + }); +});