数字我 Digital Me:全量入库(大文件走 Git LFS)
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s

This commit is contained in:
2026-10-10 16:24:43 +08:00
commit 0593ff7e62
1893 changed files with 361723 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { careerTrajectoryStories } from '../src/data/careerTrajectories.ts';
import {
applyCareerDynastyStoryline,
careerDynastyStoryline,
curatedCareerDynastyStorylineCount,
curatedCareerIds,
curatedDynastyCodes,
} from '../src/data/careerDynastyStorylines.ts';
import { careerHistoryIdForProfession, normalizeCareerHistoryId } from '../src/lib/careerHistory.ts';
test('all 79 modern professions keep their own life trajectory', () => {
assert.equal(careerTrajectoryStories.length, 79);
assert.equal(careerHistoryIdForProfession('game_blogger'), 'game_blogger');
assert.equal(careerHistoryIdForProfession('developer'), 'developer');
assert.equal(careerHistoryIdForProfession('photographer'), 'photographer');
assert.equal(careerHistoryIdForProfession('therapist'), 'therapist');
assert.equal(careerHistoryIdForProfession('beauty_blogger'), 'beauty_blogger');
assert.equal(careerHistoryIdForProfession('esports'), 'esports');
assert.equal(careerHistoryIdForProfession('makeup_artist'), 'makeup_artist');
assert.equal(careerHistoryIdForProfession('lawyer'), 'lawyer');
});
test('shared legacy links still resolve to the new profession ids', () => {
assert.equal(normalizeCareerHistoryId('game-blogger'), 'game_blogger');
assert.equal(normalizeCareerHistoryId('programmer'), 'developer');
assert.equal(normalizeCareerHistoryId('psychologist'), 'therapist');
assert.equal(normalizeCareerHistoryId('makeup-blogger'), 'beauty_blogger');
assert.equal(careerHistoryIdForProfession('not-a-profession'), undefined);
assert.equal(careerHistoryIdForProfession(undefined), undefined);
});
test('first curated batch contains 40 complete career-by-dynasty storylines', () => {
assert.equal(curatedCareerDynastyStorylineCount, 40);
for (const careerId of curatedCareerIds) {
for (const dynastyCode of curatedDynastyCodes) {
const storyline = careerDynastyStoryline(careerId, dynastyCode);
assert.ok(storyline, `${careerId}/${dynastyCode} should exist`);
assert.equal(storyline.acts.length, 4);
assert.ok(storyline.acts.every((act) => act.length >= 12));
assert.ok(storyline.choice.includes('?'));
assert.ok(storyline.result.length >= 12);
}
}
});
test('one profession receives genuinely different roles and actions across dynasties', () => {
const developer = careerTrajectoryStories.find((story) => story.id === 'developer');
assert.ok(developer);
const liao = applyCareerDynastyStoryline(developer, 'liao', '辽');
const tang = applyCareerDynastyStoryline(developer, 'tang', '唐');
const ming = applyCareerDynastyStoryline(developer, 'ming', '明');
assert.equal(liao.ancientRole, '北枢密院军簿计吏');
assert.equal(tang.ancientRole, '军中计吏');
assert.equal(ming.ancientRole, '户部黄册勾稽吏');
assert.notDeepEqual(liao.acts, tang.acts);
assert.notEqual(liao.choice, ming.choice);
});