Files
jiapu/tests/attachment-edit-contract.test.js
T
2026-09-13 19:41:18 +08:00

50 lines
2.5 KiB
JavaScript

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(/<script\s+src="([^"]+)"/g), match => 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');
}
});