joplock/tests/itemService.test.js
2026-04-28 22:25:46 +12:00

67 lines
1.8 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const { decodeItemContent, mapFolderRow, mapNoteHeaderRow, mapNoteRow } = require('../app/items/itemService');
test('decodeItemContent should parse buffer JSON', () => {
const output = decodeItemContent(Buffer.from('{"title":"Folder A"}', 'utf8'));
assert.equal(output.title, 'Folder A');
});
test('mapFolderRow should combine joplin ids and JSON content', () => {
const folder = mapFolderRow({
jop_id: 'folder1',
jop_parent_id: '',
jop_updated_time: 200,
created_time: 100,
content: Buffer.from('{"title":"Projects","icon":"📁"}', 'utf8'),
});
assert.deepEqual(folder, {
id: 'folder1',
parentId: '',
title: 'Projects',
icon: '📁',
deletedTime: 0,
createdTime: 100,
updatedTime: 200,
});
});
test('mapNoteRow should build preview and note metadata', () => {
const note = mapNoteRow({
jop_id: 'note1',
jop_parent_id: 'folder1',
jop_updated_time: 400,
created_time: 150,
content: Buffer.from('{"title":"Note","body":"Hello world","is_todo":0}', 'utf8'),
});
assert.equal(note.id, 'note1');
assert.equal(note.parentId, 'folder1');
assert.equal(note.title, 'Note');
assert.equal(note.body, 'Hello world');
assert.equal(note.bodyPreview, 'Hello world');
assert.equal(note.updatedTime, 400);
assert.equal(note.createdTime, 150);
assert.equal(note.isTodo, false);
assert.equal(note.todoCompleted, 0);
});
test('mapNoteHeaderRow should use projected note fields', () => {
const note = mapNoteHeaderRow({
jop_id: 'note1',
jop_parent_id: 'folder1',
jop_updated_time: 400,
title: 'Projected Note',
deleted_time: 0,
});
assert.deepEqual(note, {
id: 'note1',
parentId: 'folder1',
title: 'Projected Note',
isEncrypted: false,
deletedTime: 0,
updatedTime: 400,
});
});