AcadeDoc/apps/extension-clipper/tests/i18n.test.ts
Corentin 23a85267bf feat(acadenice): add sync blocks for cross-page content sharing — R4.2
Implements Notion-style sync blocks: a Tiptap node whose content is shared
across N pages. Editing via the Hocuspocus overlay propagates to all instances
via Yjs collab + SSE broadcast (EventEmitter2 bus).

Server: DB migration, NestJS module (CRUD + BFS cycle detection + broadcast),
Hocuspocus persistence extension extended for sync-block-* docs, 3 new RBAC
permissions (sync_blocks:create/edit/delete), seeded to Admin/Editor/Member.

Client: SyncBlockExtension (Tiptap node), SyncBlockNodeView (NodeView +
Mantine Modal overlay + SSE hook), /sync-block slash command, service client.

Tests: 32 server Jest + 18 client Vitest, all green.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 11:40:12 +02:00

39 lines
1.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { t, setLocale } from '../src/i18n/messages';
describe('i18n', () => {
it('returns English string by default or when set to EN', () => {
setLocale('en');
expect(t('btnClip')).toBe('Clip page');
expect(t('title')).toBe('Clip to DocAdenice');
});
it('returns French strings when locale is FR', () => {
setLocale('fr');
expect(t('btnClip')).toBe('Clipper la page');
expect(t('title')).toBe('Clipper vers DocAdenice');
});
it('returns a string for every key in both locales', () => {
const keys = [
'title', 'tabTitle', 'tabSettings', 'labelTitle',
'labelWorkspace', 'labelSpace', 'labelParent', 'labelSelection',
'selectionEmpty', 'selectionPresent', 'btnClip', 'btnClipping',
'settingsTitle', 'labelApiUrl', 'labelApiToken',
'labelDefaultWorkspace', 'labelDefaultSpace',
'btnSaveSettings', 'settingsSaved',
'successTitle', 'successOpen',
'errorTitle', 'errorNetwork', 'errorUnauthorized', 'errorGeneric',
'placeholderParent', 'optional',
] as const;
for (const locale of ['en', 'fr'] as const) {
setLocale(locale);
for (const key of keys) {
const val = t(key);
expect(typeof val).toBe('string');
expect(val.length).toBeGreaterThan(0);
}
}
});
});