Files
Mind-o-Mat/tests/ingest-e2e.test.ts
Jannik c717353037
CI / test (push) Canceled after 0s
CI / webapp (push) Canceled after 0s
fix: beheben von Lint- und Prettier-Fehlern in Tests und Config
2026-09-08 16:54:21 +02:00

122 lines
3.1 KiB
TypeScript

// E2E-Test fuer Ingest mit Mock-Modus
// Phase 2.3
import { describe, it, expect, afterEach } from 'vitest';
import { execSync } from 'node:child_process';
import {
mkdtempSync,
writeFileSync,
mkdirSync,
readFileSync,
existsSync,
rmSync,
copyFileSync,
readdirSync,
} from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
const TOOL = 'C:/GitHub/Mind-o-Mat';
const CLI = `node ${TOOL}/bin/mindomat.mjs`;
function setupTestVault(): string {
const vault = mkdtempSync(join(tmpdir(), 'mindomat-ingest-e2e-'));
const dirs = [
'00_Inbox',
'00_Inbox/Verarbeitet',
'00_Inbox/Problemfaelle',
'01_Daily',
'10_Wiki',
'10_Wiki/Seiten',
'20_Projekte',
'90_Templates',
'99_System',
'99_System/Skripte',
'99_System/Logs',
'99_System/Cache',
];
for (const d of dirs) {
mkdirSync(join(vault, d), { recursive: true });
}
// Konfig
writeFileSync(
join(vault, '99_System', 'Konfig.md'),
`---
veraltet_schwellwert_monate: 12
ki_provider: minimax
ki_modell: MiniMax-M3
ki_api_url: https://api.minimaxi.chat/v1
ki_api_key_env: MINIMAX_API_KEY
---
`,
);
// Schema
copyFileSync(join(TOOL, 'src/templates/_Schema.md'), join(vault, '10_Wiki/_Schema.md'));
return vault;
}
describe('Ingest E2E mit --mock', () => {
const vaults: string[] = [];
afterEach(() => {
for (const v of vaults) {
rmSync(v, { recursive: true, force: true });
}
});
it('erstellt Wiki-Seite aus Inbox-Notiz', () => {
const vault = setupTestVault();
vaults.push(vault);
const today = new Date().toISOString().slice(0, 10);
writeFileSync(
join(vault, '00_Inbox', `${today}_Kaffee_Ritual.md`),
`---
title: Kaffee_Ritual
created: ${today}
tags: [Gewohnheit]
---
# Kaffee Ritual
Jeden Morgen Kaffee, schwarz, aus der Handmuehle.
`,
);
execSync(`${CLI} ingest --vault "${vault}" --mock`, { stdio: 'pipe' });
// Wiki wurde erstellt
const wikiPath = join(vault, '10_Wiki', 'Seiten', `${today}_Kaffee_Ritual.md`);
expect(existsSync(wikiPath)).toBe(true);
// Frontmatter pruefen
const wiki = readFileSync(wikiPath, 'utf-8');
expect(wiki).toContain('type: wiki');
expect(wiki).toContain('status: aktuell');
expect(wiki).toContain('konflikt_hart: false');
expect(wiki).toContain('konflikt_wert: false');
expect(wiki).toContain('konflikt_logisch: false');
expect(wiki).toContain(`"[[${today}_Kaffee_Ritual]]"`);
// Original wurde nach Verarbeitet/ verschoben
const verarbeitetDir = join(vault, '00_Inbox', 'Verarbeitet', today);
expect(existsSync(join(verarbeitetDir, `${today}_Kaffee_Ritual.md`))).toBe(true);
expect(existsSync(join(vault, '00_Inbox', `${today}_Kaffee_Ritual.md`))).toBe(false);
});
it('Inbox ist leer nach Ingest', () => {
const vault = setupTestVault();
vaults.push(vault);
execSync(`${CLI} ingest --vault "${vault}" --mock`, { stdio: 'pipe' });
// Inbox hat nur die Original-Dateien nicht mehr
const inbox = readdirSync(join(vault, '00_Inbox'));
const notes = inbox.filter((f) => f.endsWith('.md'));
expect(notes).toEqual([]);
});
});