文件
mynode/packages/app-desktop/gui/NoteEditor/utils/searchNotesForMention.test.ts
chen 301194963b
一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

88 行
3.2 KiB
TypeScript

import { getChinesePinyinInitials, formatChineseDateTitle, searchNotesForMention } from './searchNotesForMention';
import Note from '@joplin/lib/models/Note';
import Folder from '@joplin/lib/models/Folder';
describe('searchNotesForMention', () => {
describe('getChinesePinyinInitials', () => {
it('extracts correct pinyin initials from Chinese characters', () => {
expect(getChinesePinyinInitials('工作周报')).toBe('gzzb');
expect(getChinesePinyinInitials('学习计划')).toBe('xxjh');
expect(getChinesePinyinInitials('会议记录')).toBe('hyjl');
expect(getChinesePinyinInitials('今天日志')).toBe('jtrz');
});
it('preserves alphanumeric characters and converts to lowercase', () => {
expect(getChinesePinyinInitials('2026年OKR目标')).toBe('2026nokrmb');
expect(getChinesePinyinInitials('Joplin开发')).toBe('joplinkf');
});
});
describe('formatChineseDateTitle', () => {
it('formats date with correct Chinese weekday', () => {
// 2026-11-01 is a Sunday
const timestamp = new Date('2026-11-01T12:00:00Z').getTime();
const title = formatChineseDateTitle(timestamp);
expect(title).toMatch(/^2026-11-01 星期/);
});
});
describe('searchNotesForMention query logic', () => {
const originalDb = Note.db;
const originalFolderAll = Folder.all;
beforeEach(() => {
Folder.all = jest.fn().mockResolvedValue([
{ id: 'folder-1', title: '工作' },
{ id: 'folder-2', title: '个人' },
]);
});
afterEach(() => {
Note.db = originalDb;
Folder.all = originalFolderAll;
});
it('suggests create today note when no note exists for today', async () => {
Note.db = jest.fn().mockReturnValue({
selectOne: jest.fn().mockResolvedValue(null),
selectAll: jest.fn().mockResolvedValue([]),
}) as any;
const results = await searchNotesForMention('今天');
expect(results.length).toBeGreaterThanOrEqual(1);
expect(results[0].id).toMatch(/^__CREATE_/);
expect(results[0].parentTitle).toBe('✨ 新建今日日志');
expect(results[0].section).toBe('📅 日志推荐');
});
it('matches existing note and attaches parentTitle folder name', async () => {
Note.db = jest.fn().mockReturnValue({
selectOne: jest.fn().mockResolvedValue(null),
selectAll: jest.fn().mockResolvedValue([
{ id: 'note-123', title: '项目进度汇报', parent_id: 'folder-1' },
]),
}) as any;
const results = await searchNotesForMention('进度');
const matched = results.find(r => r.id === 'note-123');
expect(matched).toBeDefined();
expect(matched?.title).toBe('项目进度汇报');
expect(matched?.parentTitle).toBe('工作');
expect(matched?.section).toBe('📝 关联笔记');
});
it('supports direct date input like 2026-12-25 and offers to create or link', async () => {
Note.db = jest.fn().mockReturnValue({
selectOne: jest.fn().mockResolvedValue(null),
selectAll: jest.fn().mockResolvedValue([]),
}) as any;
const results = await searchNotesForMention('2026-12-25');
const dateItem = results.find(r => r.id.includes('2026-12-25'));
expect(dateItem).toBeDefined();
expect(dateItem?.parentTitle).toBe('✨ 新建 2026-12-25 日志');
expect(dateItem?.title).toMatch(/^2026-12-25 星期/);
});
});
});