mirror of
https://github.com/amitwh/markdown-converter.git
synced 2026-08-02 10:00:17 +05:30
test(renderer): add failing test for ipc wrapper + IpcResult types
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
export type IpcResult<T> =
|
||||
| { ok: true; data: T }
|
||||
| { ok: false; error: { code: string; message: string } };
|
||||
|
||||
export interface FileEntry {
|
||||
name: string;
|
||||
path: string;
|
||||
isDirectory: boolean;
|
||||
size?: number;
|
||||
modifiedAt?: string;
|
||||
}
|
||||
|
||||
export interface FileResult {
|
||||
path: string;
|
||||
content: string;
|
||||
}
|
||||
|
||||
export interface PdfOptions {
|
||||
inputPath: string;
|
||||
outputPath: string;
|
||||
format?: 'letter' | 'a4' | 'legal';
|
||||
margins?: { top: number; right: number; bottom: number; left: number };
|
||||
toc?: boolean;
|
||||
embedFonts?: boolean;
|
||||
}
|
||||
|
||||
export interface DocxOptions {
|
||||
inputPath: string;
|
||||
outputPath: string;
|
||||
template?: string;
|
||||
referenceDoc?: string;
|
||||
}
|
||||
|
||||
export interface HtmlOptions {
|
||||
inputPath: string;
|
||||
outputPath: string;
|
||||
standalone?: boolean;
|
||||
highlightStyle?: string;
|
||||
}
|
||||
|
||||
export interface ExportResult {
|
||||
outputPath: string;
|
||||
bytes: number;
|
||||
durationMs: number;
|
||||
}
|
||||
|
||||
export interface BatchItem {
|
||||
inputPath: string;
|
||||
outputPath: string;
|
||||
}
|
||||
|
||||
export interface BatchOptions {
|
||||
format: 'pdf' | 'docx' | 'html' | 'png';
|
||||
concurrency?: number;
|
||||
}
|
||||
|
||||
export interface BatchResult {
|
||||
total: number;
|
||||
succeeded: number;
|
||||
failed: number;
|
||||
results: Array<{ item: BatchItem; ok: boolean; error?: string }>;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
||||
import { ipc } from '@/lib/ipc';
|
||||
import type { FileResult } from '@/types/ipc';
|
||||
|
||||
describe('ipc wrapper', () => {
|
||||
beforeEach(() => {
|
||||
window.electronAPI = {
|
||||
file: {
|
||||
read: vi.fn().mockResolvedValue('# hello'),
|
||||
write: vi.fn().mockResolvedValue(undefined),
|
||||
list: vi.fn().mockResolvedValue([]),
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
it('file.read returns ok result on success', async () => {
|
||||
const result = await ipc.file.read('/foo.md');
|
||||
expect(result.ok).toBe(true);
|
||||
if (result.ok) {
|
||||
expect(result.data).toBe('# hello');
|
||||
}
|
||||
});
|
||||
|
||||
it('file.read returns err result when channel throws', async () => {
|
||||
window.electronAPI.file.read = vi.fn().mockRejectedValue(new Error('ENOENT'));
|
||||
const result = await ipc.file.read('/missing.md');
|
||||
expect(result.ok).toBe(false);
|
||||
if (!result.ok) {
|
||||
expect(result.error.message).toBe('ENOENT');
|
||||
}
|
||||
});
|
||||
|
||||
it('file.read returns err result when channel missing', async () => {
|
||||
delete (window.electronAPI.file as any).read;
|
||||
const result = await ipc.file.read('/foo.md');
|
||||
expect(result.ok).toBe(false);
|
||||
if (!result.ok) {
|
||||
expect(result.error.code).toBe('CHANNEL_MISSING');
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user