import { DyNTS_App_Params } from './app-params.control-model'; import { DyNTS_global_settings } from '../../_collections/global-settings.const'; import { DyFM_EnvironmentFlag } from '@futdevpro/fsm-dynamo'; describe('| DyNTS_App_Params', () => { let originalEnv: any; // Ensure env_settings exists before tests beforeAll(() => { if (!DyNTS_global_settings.env_settings) { (DyNTS_global_settings as any).env_settings = { environment: DyFM_EnvironmentFlag.local, discord: {}, mongoUri: undefined, openAi: {}, }; } }); beforeEach(() => { originalEnv = DyNTS_global_settings.env_settings?.environment; DyNTS_global_settings.env_settings.environment = DyFM_EnvironmentFlag.local; }); afterEach(() => { if (DyNTS_global_settings.env_settings) { DyNTS_global_settings.env_settings.environment = originalEnv; } }); it('| should initialize with provided values', () => { const params: DyNTS_App_Params = { name: 'TestApp', title: 'Test Application', version: '1.0.0', dbName: 'testdb', dbUri: 'mongodb://0.0.0.0:29017/testdb', systemName: 'Test-App', systemShortCodeName: 'TA' }; const appParams = new DyNTS_App_Params(params); expect(appParams.name).toBe('TestApp'); expect(appParams.title).toBe('Test Application'); expect(appParams.version).toBe('1.0.0'); expect(appParams.dbName).toBe('testdb'); expect(appParams.dbUri).toBe('mongodb://0.0.0.0:29017/testdb'); expect(appParams.systemName).toBe('Test-App'); expect(appParams.systemShortCodeName).toBe('TA_LOCAL'); }); it('| should set default values when optional parameters are not provided', () => { (DyNTS_global_settings.env_settings as any).mongoUri = undefined; const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', }; const appParams = new DyNTS_App_Params(params); expect(appParams.name).toBe('TestApp'); expect(appParams.title).toBe(''); expect(appParams.version).toBe('1.0.0'); expect(appParams.dbName).toBe('testdb'); expect(appParams.dbUri).toBe('mongodb://0.0.0.0:27017/testdb'); expect(appParams.systemName).toBe('TestApp'); expect(appParams.systemShortCodeName).toBe('TA_LOCAL'); }); it('| should generate systemShortCodeName from systemName if not provided', () => { const params: DyNTS_App_Params = { name: 'Test Application', version: '1.0.0', dbName: 'testdb', systemName: 'Test-App', }; const appParams = new DyNTS_App_Params(params); expect(appParams.systemShortCodeName).toBe('TA_LOCAL'); }); it('| should generate systemName from name if not provided', () => { const params: DyNTS_App_Params = { name: 'Test Application', version: '1.0.0', dbName: 'testdb' }; const appParams = new DyNTS_App_Params(params); expect(appParams.systemName).toBe('Test-Application'); }); it('| should generate dbUri from global mongoUri when dbUri is not provided', () => { // This test assumes global settings have mongoUri set const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', }; const appParams = new DyNTS_App_Params(params); expect(appParams.dbUri).toBeDefined(); expect(appParams.dbName).toBe('testdb'); }); it('| should use provided dbUri when set', () => { const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', dbUri: 'mongodb://custom:27017/testdb', }; const appParams = new DyNTS_App_Params(params); expect(appParams.dbUri).toBe('mongodb://custom:27017/testdb'); }); it('| should set default dbOptions when not provided', () => { const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', }; const appParams = new DyNTS_App_Params(params); expect(appParams.dbOptions).toBeDefined(); expect(appParams.dbOptions?.directConnection).toBe(true); }); it('| should use provided dbOptions', () => { const customOptions = { directConnection: false, maxPoolSize: 10, }; const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', dbOptions: customOptions, }; const appParams = new DyNTS_App_Params(params); expect(appParams.dbOptions).toEqual(customOptions); }); it('| should set default openHost and secureHost', () => { const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', }; const appParams = new DyNTS_App_Params(params); expect(appParams.openHost).toBe('0.0.0.0'); expect(appParams.secureHost).toBe('0.0.0.0'); }); it('| should set default expressBacklog', () => { const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', }; const appParams = new DyNTS_App_Params(params); expect(appParams.expressBacklog).toBe(0); }); it('| should log error when dbName is not set', () => { const { DyFM_Log } = require('@futdevpro/fsm-dynamo'); const logSpy = spyOn(DyFM_Log, 'error'); const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', } as any; new DyNTS_App_Params(params); expect(logSpy).toHaveBeenCalled(); }); it('| should log warning when dbName contains uppercase letters', () => { const { DyFM_Log } = require('@futdevpro/fsm-dynamo'); const logSpy = spyOn(DyFM_Log, 'warn'); const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'TestDB', }; new DyNTS_App_Params(params); expect(logSpy).toHaveBeenCalled(); }); it('| should log warning when dbUri contains multiple //', () => { const { DyFM_Log } = require('@futdevpro/fsm-dynamo'); const logSpy = spyOn(DyFM_Log, 'warn'); const params: DyNTS_App_Params = { name: 'TestApp', version: '1.0.0', dbName: 'testdb', dbUri: 'mongodb://localhost:27017//testdb', }; new DyNTS_App_Params(params); expect(logSpy).toHaveBeenCalled(); }); });