import { describe, expect, it } from 'vitest'; import { parseGpoBackupMetadataXml } from '../../server/gpo/gpo-metadata-parser'; import type { VerifiedZipFile } from '../../server/gpo/zip-inventory'; const guid = '11111111-1111-4111-8111-111111111111'; function parse(xml: string) { return parseGpoBackupMetadataXml({ bytes: Buffer.from(xml), entry: { relativePath: 'synthetic/Backup.xml', sha256: 'a'.repeat(64) } } as unknown as VerifiedZipFile); } describe('GPMC metadata field paths', () => { it('reads the GPMC core identity without interpreting unrelated IDs as a GPO', () => { const result = parse(` 22222222-2222-4222-8222-222222222222unrelated.example {${guid}}synthetic.example `); expect(result).toMatchObject({ gpoId: guid, domainKey: 'dns:synthetic.example', status: 'partial' }); expect(result.backupId).toBeUndefined(); expect(result.backupCreatedAt).toBeUndefined(); }); it('reads a nested GPReport Identifier and preserves missing backup-specific evidence', () => { const result = parse(`{${guid}} synthetic.example`); expect(result.gpoId).toBe(guid); expect(result.domainKey).toBe('dns:synthetic.example'); expect(result.diagnosticCodes).not.toContain('gpo-metadata-field-shape-invalid'); expect(result.diagnosticCodes).toContain('gpo-metadata-backup-id-missing'); }); it('keeps depth limits and rejects external entities', () => { expect(() => parse(''.repeat(129) + ''.repeat(129))).toThrow(); expect(() => parse(']>&e;')).toThrow(); }); });