import { DyFM_Error, DyFM_EnvironmentFlag } from '@futdevpro/fsm-dynamo'; import { DyNTS_EmailService, DyNTS_EmailService_Settings, DyNTS_EmailTemplateComponent, DyNTS_SendEmail_Settings } from './email.service'; import { DyNTS_global_settings } from '../../_collections/global-settings.const'; describe('| DyNTS_EmailService', () => { let emailService: DyNTS_EmailService; const settings: DyNTS_EmailService_Settings = { host: 'smtp.example.com', port: 587, email: 'test@example.com', pass: 'password', senderName: 'Test Sender', rootPath: '/path/to/templates', templateComponents: [ new DyNTS_EmailTemplateComponent({ name: 'testComponent', selector: 'test-selector', template: '
{{property}}
', properties: [ 'property' ], }), ], }; beforeAll(() => { if (!DyNTS_global_settings.systemShortCodeName) (DyNTS_global_settings as { systemShortCodeName?: string }).systemShortCodeName = 'TEST'; if (!DyNTS_global_settings.env_settings) (DyNTS_global_settings as { env_settings?: unknown }).env_settings = { environment: DyFM_EnvironmentFlag.local }; }); beforeEach(() => { (DyNTS_global_settings as { env_settings: unknown }).env_settings = { environment: DyFM_EnvironmentFlag.local, mongoUri: 'mongodb://localhost:27017/test', discord: undefined, openAi: undefined, }; emailService = new DyNTS_EmailService(settings); }); it('| should initialize with correct settings', () => { expect(emailService.serviceName).toBe('DyNTS_EmailService'); expect(emailService['senderName']).toBe(settings.senderName); expect(emailService['senderNEmail']).toBe(`${settings.senderName} <${settings.email}>`); }); it('| should load email template components', async () => { await emailService.asyncPostConstruct(); expect(emailService['componentsByName']['testComponent']).toBeDefined(); expect(emailService['componentsBySelector']['test-selector']).toBeDefined(); }); it('| should throw error if no template component name is provided', async () => { const sendEmailSettings: DyNTS_SendEmail_Settings = { to: 'recipient@example.com', subject: 'Test Subject', }; await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer')) .toBeRejectedWith(jasmine.any(DyFM_Error)); }); it('| should throw error if template component is not found', async () => { const sendEmailSettings: DyNTS_SendEmail_Settings = { to: 'recipient@example.com', subject: 'Test Subject', templateComponentName: 'nonExistentComponent', }; await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer')) .toBeRejectedWith(jasmine.any(DyFM_Error)); }); it('| should throw error if template property is missing', async () => { const component = new DyNTS_EmailTemplateComponent({ name: 'testComponent', selector: 'test-selector', template: '
{{missingProperty}}
', properties: [ 'missingProperty' ], }); await expectAsync(emailService['compileComponentProperties'](component, {}, '', 'testIssuer')) .toBeRejectedWith(jasmine.any(DyFM_Error)); }); });