RED: covers all three selection tiers plus ambiguous/no-eml/empty edge cases. lib/services/eml-parser.ts does not exist yet — tests fail to resolve the module import.
57 lines
2.2 KiB
TypeScript
57 lines
2.2 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { selectOriginalMessage } from './eml-parser';
|
|
import {
|
|
RFC_EML_TIER_ATTACHMENTS,
|
|
RFC_EML_TIER_ATTACHMENTS_UPPERCASE,
|
|
KNOWBE4_TIER_ATTACHMENTS,
|
|
ORIGINATING_ONLY_ATTACHMENTS,
|
|
AMBIGUOUS_WITH_FALLBACK_ATTACHMENTS,
|
|
AMBIGUOUS_NO_FALLBACK_ATTACHMENTS,
|
|
NO_EML_ATTACHMENTS,
|
|
EMPTY_ATTACHMENTS,
|
|
} from './eml-parser.fixtures';
|
|
|
|
describe('selectOriginalMessage', () => {
|
|
it('selects rfc.eml over OriginatingEmail.eml when both are present', () => {
|
|
const result = selectOriginalMessage(RFC_EML_TIER_ATTACHMENTS);
|
|
expect(result?.id).toBe(1);
|
|
expect(result?.title).toBe('rfc.eml');
|
|
});
|
|
|
|
it('selects rfc.eml case-insensitively (RFC.EML / OriginatingEmail.EML)', () => {
|
|
const result = selectOriginalMessage(RFC_EML_TIER_ATTACHMENTS_UPPERCASE);
|
|
expect(result?.id).toBe(1);
|
|
});
|
|
|
|
it('selects the KnowBe4-named attachment when OriginatingEmail.eml is also present', () => {
|
|
const result = selectOriginalMessage(KNOWBE4_TIER_ATTACHMENTS);
|
|
expect(result?.id).toBe(10);
|
|
expect(result?.title).toBe('phish_alert_sp2_2.0.0.0.eml');
|
|
});
|
|
|
|
it('falls back to OriginatingEmail.eml when it is the only attachment', () => {
|
|
const result = selectOriginalMessage(ORIGINATING_ONLY_ATTACHMENTS);
|
|
expect(result?.id).toBe(20);
|
|
expect(result?.title).toBe('OriginatingEmail.eml');
|
|
});
|
|
|
|
it('falls back to OriginatingEmail.eml when there are 2+ ambiguous non-OriginatingEmail candidates', () => {
|
|
const result = selectOriginalMessage(AMBIGUOUS_WITH_FALLBACK_ATTACHMENTS);
|
|
expect(result?.id).toBe(32);
|
|
expect(result?.title).toBe('OriginatingEmail.eml');
|
|
});
|
|
|
|
it('returns null when candidates are ambiguous and no OriginatingEmail.eml fallback exists', () => {
|
|
const result = selectOriginalMessage(AMBIGUOUS_NO_FALLBACK_ATTACHMENTS);
|
|
expect(result).toBeNull();
|
|
});
|
|
|
|
it('returns null (not throws) for a list with no .eml / message-rfc822 attachments', () => {
|
|
expect(() => selectOriginalMessage(NO_EML_ATTACHMENTS)).not.toThrow();
|
|
expect(selectOriginalMessage(NO_EML_ATTACHMENTS)).toBeNull();
|
|
});
|
|
|
|
it('returns null for an empty attachment list', () => {
|
|
expect(selectOriginalMessage(EMPTY_ATTACHMENTS)).toBeNull();
|
|
});
|
|
});
|