feat: 完成分类、worksheet 接口开发,资源迁移到七牛
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { test } from 'node:test';
|
||||
import { parseWorksheetExport } from '../src/imports/worksheet-import';
|
||||
import { worksheetFixture as fixture } from './worksheet-import.fixture';
|
||||
|
||||
test('题型导入:JSON Lines、BSON 日期、计数和缺省字段准确保留', () => {
|
||||
const row = {
|
||||
...fixture,
|
||||
grade: 23,
|
||||
downloads_seed: undefined,
|
||||
contentUpdatedAt: { $date: '2026-06-01T08:00:00+08:00' },
|
||||
};
|
||||
const result = parseWorksheetExport(`\uFEFF${JSON.stringify(row)}\n`);
|
||||
const stored = result.rows[0]!.data;
|
||||
assert.equal(stored.downloads, 23n);
|
||||
assert.equal(stored.downloadsSeed, 0n);
|
||||
assert.equal(stored.likesSeed, 14n);
|
||||
assert.equal(stored.grade, 23);
|
||||
assert.equal(stored.subcategory, null);
|
||||
assert.equal(stored.createdAt.toISOString(), fixture.createdAt.$date);
|
||||
assert.equal(
|
||||
stored.contentUpdatedAt?.toISOString(),
|
||||
'2026-06-01T00:00:00.000Z',
|
||||
);
|
||||
assert.equal(stored.firstPublishedAt, null);
|
||||
assert.equal(stored.rendererKey, null);
|
||||
assert.equal(result.warnings.length, 2);
|
||||
assert.equal(
|
||||
parseWorksheetExport(JSON.stringify([fixture])).rows[0]?.data.path,
|
||||
fixture.path,
|
||||
);
|
||||
});
|
||||
|
||||
test('题型导入:拒绝未知字段、重复 ID、非法日期、类型及计数精度丢失', () => {
|
||||
for (const patch of [
|
||||
{ unknown: true },
|
||||
{ title: 42 },
|
||||
{ category: null },
|
||||
{ difficulty: 0 },
|
||||
{ ageMax: 1 },
|
||||
{ tags: ['a', 1] },
|
||||
{ isNew: 'false' },
|
||||
{ downloads: -1 },
|
||||
{ downloads: Number.MAX_SAFE_INTEGER + 1 },
|
||||
{ grade: 32768 },
|
||||
{ status: 'deleted' },
|
||||
{ previewImg: 'https://example.com/a.jpg' },
|
||||
{ createdAt: { $date: '2026-02-30T00:00:00Z' } },
|
||||
{ createdAt: { $date: '2026-01-01' } },
|
||||
{ createdAt: null },
|
||||
{ createdAt: { $date: fixture.createdAt.$date, injected: true } },
|
||||
{ updatedAt: { $date: '2025-01-01T00:00:00Z' } },
|
||||
])
|
||||
assert.throws(() =>
|
||||
parseWorksheetExport(JSON.stringify([{ ...fixture, ...patch }])),
|
||||
);
|
||||
assert.throws(() =>
|
||||
parseWorksheetExport(JSON.stringify([fixture, fixture])),
|
||||
);
|
||||
for (const value of ['', '[]', '{}', '{broken'])
|
||||
assert.throws(() => parseWorksheetExport(value));
|
||||
});
|
||||
Reference in New Issue
Block a user