import { tap, expect } from '@git.zone/tstest/tapbundle'; import { SpfVerifier, SpfQualifier, SpfMechanismType } from '../ts/mail/security/classes.spfverifier.js'; /** * Test email authentication systems: SPF parsing */ // SPF Verifier Tests tap.test('SPF Verifier - should parse SPF record', async () => { const spfVerifier = new SpfVerifier(); // Test valid SPF record parsing const record = 'v=spf1 a mx ip4:192.168.0.1/24 include:example.org ~all'; const parsedRecord = spfVerifier.parseSpfRecord(record); expect(parsedRecord).toBeTruthy(); expect(parsedRecord.version).toEqual('spf1'); expect(parsedRecord.mechanisms.length).toEqual(5); // Check specific mechanisms expect(parsedRecord.mechanisms[0].type).toEqual(SpfMechanismType.A); expect(parsedRecord.mechanisms[0].qualifier).toEqual(SpfQualifier.PASS); expect(parsedRecord.mechanisms[1].type).toEqual(SpfMechanismType.MX); expect(parsedRecord.mechanisms[1].qualifier).toEqual(SpfQualifier.PASS); expect(parsedRecord.mechanisms[2].type).toEqual(SpfMechanismType.IP4); expect(parsedRecord.mechanisms[2].value).toEqual('192.168.0.1/24'); expect(parsedRecord.mechanisms[3].type).toEqual(SpfMechanismType.INCLUDE); expect(parsedRecord.mechanisms[3].value).toEqual('example.org'); expect(parsedRecord.mechanisms[4].type).toEqual(SpfMechanismType.ALL); expect(parsedRecord.mechanisms[4].qualifier).toEqual(SpfQualifier.SOFTFAIL); // Test invalid record const invalidRecord = 'not-a-spf-record'; const invalidParsed = spfVerifier.parseSpfRecord(invalidRecord); expect(invalidParsed).toBeNull(); }); tap.test('stop', async () => { await tap.stopForcefully(); }); export default tap.start();