+ );
+}
diff --git a/apps/desktop/tests/dry-preview.test.ts b/apps/desktop/tests/dry-preview.test.ts
new file mode 100644
index 0000000..106d9e5
--- /dev/null
+++ b/apps/desktop/tests/dry-preview.test.ts
@@ -0,0 +1,15 @@
+import { expect, test } from 'bun:test';
+import { previewLines } from '../src/ui/DryRunPreview';
+
+test('change lines are picked from a dry run', () => {
+ const out = 'reading config\nconnected\n ~ en-US title: Old -> New\n + de-DE short description\ndone';
+ expect(previewLines(out).lines).toEqual([' ~ en-US title: Old -> New', ' + de-DE short description']);
+});
+test('no change lines: the last lines', () => {
+ expect(previewLines('a\nb\nc', 2).lines).toEqual(['b', 'c']);
+});
+test('long previews say how many more', () => {
+ const out = Array.from({ length: 20 }, (_, i) => `+ row ${i}`).join('\n');
+ const p = previewLines(out, 5);
+ expect(p.lines.length).toBe(5); expect(p.more).toBe(15);
+});