import {test} from 'node:test'; import assert from 'node:assert/strict'; import {randomUUID} from 'node:crypto'; import {postInput} from '../src/lib/write'; import {noteEditInput,withRevision} from '../src/lib/note-edits'; import {publicPostId} from '../src/lib/model'; import {entryText,type ExploreEntry} from '../src/lib/explore'; test('generic API accepts stable public IDs while retaining UUID storage and rejecting invalid IDs',()=>{ const publicId='0123456789abcdef01234567',stored=randomUUID(); assert.equal(postInput.parse({kind:'article',title:'文本与图像',publicId}).publicId,publicId); for(const id of ['bad','ABCDEF0123456789abcdef01','1'.repeat(25)])assert.equal(postInput.safeParse({kind:'article',title:'x',publicId:id}).success,false); assert.equal(publicPostId({id:stored,public_id:publicId}),publicId);assert.equal(publicPostId({id:stored}),stored); }); test('media/cover edits are optional and change optimistic revisions independently of the text',()=>{ const a=randomUUID(),b=randomUUID(); const entry:ExploreEntry={id:'0123456789abcdef01234567',title:'笔记',description:'说明',markdown:'# 笔记\n\n正文',namespace:'Main',categories:[],imageCount:1,media:[],color:'#fff',assets:[{id:a,kind:'image',role:'content'}],coverAssetId:a}; const before=withRevision(entry).revision; assert.notEqual(withRevision({...entry,coverAssetId:b}).revision,before); assert.notEqual(withRevision({...entry,assets:[{id:b,kind:'image',role:'content'}]}).revision,before); const input={title:'笔记',description:'说明',markdown:'正文',tags:[],revision:before}; assert.equal(noteEditInput.parse(input).assets,undefined); assert.equal(noteEditInput.parse({...input,assets:[{id:a}],coverAssetId:null}).assets?.[0].role,'content'); }); test('AI text preserves JSON, code and media links as ordinary modalities',()=>{ const id=randomUUID(),markdown='# 文本说明\n\n```json\n{"type":"text","box":[1,2,3,4]}\n```\n\n```tsx\nexport default function Example(){return
}\n```'; const entry:ExploreEntry={id,title:'文本说明',description:'可访问',markdown,namespace:'Main',categories:[],imageCount:1,media:[{kind:'image',url:'/api/media/'+randomUUID(),title:'标注图'}],color:'#fff'}; const text=entryText(entry);assert.ok(text.includes(markdown));assert.ok(text.includes(entry.media[0].url));assert.ok(text.includes('/explore/'+id)); });