mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 13:32:23 +00:00
42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { parseMatrix, validateAgainstCatalog } from '../../scripts/lib/coverage-matrix-parser.mjs';
|
|
|
|
describe('parseMatrix', () => {
|
|
it('parses three valid rows including a 4-component ID', () => {
|
|
const md = `Some intro text.
|
|
|
|
| 0.1.1 | Auth login | RU | src/auth/login.rs | ✅ | covered |
|
|
| 3.3.1.1 | Voice hotkey | WD | app/test/e2e/specs/voice.spec.ts | 🟡 | partial |
|
|
| 13.5.3 | Release smoke | MS | docs/RELEASE-MANUAL-SMOKE.md | 🚫 | manual only |
|
|
|
|
Trailing prose.`;
|
|
const result = parseMatrix(md);
|
|
expect(result.errors).toEqual([]);
|
|
expect(result.rows).toHaveLength(3);
|
|
expect(result.rows[0].id).toBe('0.1.1');
|
|
expect(result.rows[1].id).toBe('3.3.1.1');
|
|
expect(result.rows[2].status).toBe('🚫');
|
|
});
|
|
|
|
it('flags duplicate IDs and invalid statuses', () => {
|
|
const md = `| 1.1.1 | First | RU | a.rs | ✅ | ok |
|
|
| 1.1.1 | Duplicate | VU | b.ts | ✅ | second copy |
|
|
| 2.2.2 | Bad status | WD | c.spec.ts | ⚠️ | not a real legend |`;
|
|
const parsed = parseMatrix(md);
|
|
expect(parsed.errors.some((e: string) => e.includes('invalid status'))).toBe(true);
|
|
const validation = validateAgainstCatalog(parsed.rows, ['1.1.1', '2.2.2', '9.9.9']);
|
|
expect(validation.duplicates).toEqual(['1.1.1']);
|
|
expect(validation.missingFromMatrix).toEqual(['2.2.2', '9.9.9']);
|
|
});
|
|
|
|
it('drops rows with invalid status from the rows array (no double-counting)', () => {
|
|
const md = `| 4.4.4 | OK row | RU | a.rs | ✅ | ok |
|
|
| 5.5.5 | Bad status | RU | b.rs | ⚠️ | should not appear in rows |`;
|
|
const parsed = parseMatrix(md);
|
|
expect(parsed.rows).toHaveLength(1);
|
|
expect(parsed.rows[0].id).toBe('4.4.4');
|
|
expect(parsed.errors).toHaveLength(1);
|
|
});
|
|
});
|