const test = require('node:test'); const assert = require('node:assert/strict'); const { readFileSync } = require('node:fs'); const { resolve } = require('node:path'); const Feed = require('../public/js/feed-pages'); const Article = require('../public/js/article-pages'); const Video = require('../public/js/video-pages'); const Ceremony = require('../public/js/ceremony-admin-pages'); const Editor = require('../public/js/attachment-editor'); const Growth = require('../public/js/growth-pages'); const Memo = require('../public/js/memo-pages'); const Relative = require('../public/js/relative-pages'); test('附件编辑页在上传组件之前加载真实 MD5 依赖', () => { for (const page of ['feed', 'article', 'album', 'video', 'gift', 'growth', 'memo', 'relative']) { const html = readFileSync(resolve(__dirname, '../profile-' + page + '-edit.html'), 'utf8'); const scripts = Array.from(html.matchAll(/ match[1]); const md5Index = scripts.indexOf('public/js/md5.js'); const uploadIndex = scripts.indexOf('public/js/upload-pages.js'); assert.ok(md5Index >= 0 && md5Index < uploadIndex, page + ' 缺少上传所需的 MD5 依赖'); } }); test('删除全部动态附件时明确提交空列表', () => { assert.equal(Feed.buildFeedBody({ feedContent: '保留文字', mediaOssIds: '' }).mediaOssIds, ''); }); test('编辑附件保留精确的长 ID,拒绝缺失或已丢失精度的 ID', () => { const file = { ossId: '2062179707935264771', fileName: '照片.png', mediaType: 'image/png' }; assert.equal(Editor.normalizeFiles([file, file]).length, 1); assert.equal(Editor.normalizeFiles([file])[0].ossId, file.ossId); assert.throws(() => Editor.normalizeFiles([{ fileName: '照片.png' }])); assert.throws(() => Editor.normalizeFiles([{ ossId: 2062179707935264771 }])); }); test('多附件表单清空后显式发送空值', () => { for (const build of [Growth.buildGrowthRecordBody, Memo.buildMemoBody, Relative.buildRelativeRecordBody]) { assert.equal(build({ mediaOssIds: '' }).mediaOssIds, ''); assert.equal(build({ mediaOssIds: '2062179707935264771' }).mediaOssIds, '2062179707935264771'); } }); test('封面更新区分未操作、清空和替换', () => { for (const build of [Article.buildArticleBody, Video.buildVideoBody, Ceremony.buildCeremonyBody]) { assert.equal(build({}).coverOssId, undefined); assert.equal(build({ coverOssId: null }).coverOssId, null); assert.equal(build({ coverOssId: '2062179707935264771' }).coverOssId, '2062179707935264771'); } });