Files
joplin-cli-gateway/test/revisions.test.ts
T
2026-08-19 17:18:45 +01:00

29 lines
1.4 KiB
TypeScript

import DiffMatchPatch from 'diff-match-patch';
import { describe, expect, test } from 'vitest';
import { reconstructRevision } from '../src/domain/revisions.js';
import type { RevisionRecord } from '../src/domain/types.js';
const dmp = new DiffMatchPatch();
const patch = (before: string, after: string) => JSON.stringify(dmp.patch_make(before, after));
describe('revision reconstruction', () => {
test('follows Joplin parent revisions and applies text and metadata patches', () => {
const first: RevisionRecord = {
id: 'r1', parent_id: '', item_id: 'note', item_type: 1, item_updated_time: 10,
title_diff: patch('', 'Title one'), body_diff: patch('', 'First body'),
metadata_diff: JSON.stringify({ new: { parent_id: 'folder', user_created_time: 1, user_updated_time: 10 }, deleted: [] }),
encryption_applied: 0,
};
const second: RevisionRecord = {
id: 'r2', parent_id: 'r1', item_id: 'note', item_type: 1, item_updated_time: 20,
title_diff: patch('Title one', 'Title two'), body_diff: patch('First body', 'Second body'),
metadata_diff: JSON.stringify({ new: { user_updated_time: 20 }, deleted: [] }),
encryption_applied: 0,
};
expect(reconstructRevision([first, second], 'r2')).toEqual({
id: 'r2', note_id: 'note', item_updated_time: 20, title: 'Title two', body: 'Second body',
parent_id: 'folder', user_created_time: 1, user_updated_time: 20,
});
});
});