frontend/test/entity-names.test.ts
Rama master · réplica de lectura del repositorio original.
import { beforeEach, describe, expect, it } from 'vitest';
import {
entityDisplayName, nameLanguage, registerNameWriting, registerNameWritings,
setNameLanguage, type NameWriting,
} from '../src/core/entity-names';
const writing: NameWriting = {
id: 1, kind: 'performer', canonical_name: '枫花恋', zh_cn: '枫花恋', ja: '楓カレン',
};
beforeEach(() => { registerNameWritings([]); setNameLanguage('zh-CN') });
describe('实体名称的只读显示投影', () => {
it('同一艺名的已核对日文署名可显示中文,不把历史艺名换为现名', () => {
registerNameWritings([writing]);
expect(entityDisplayName('performer', '楓カレン', 1)).toBe('枫花恋');
expect(entityDisplayName('performer', '楓カレン')).toBe('枫花恋');
expect(entityDisplayName('performer', '田中レモン', 1)).toBe('田中レモン');
setNameLanguage('ja');
expect(entityDisplayName('performer', '枫花恋', 1)).toBe('楓カレン');
});
it('共享写法不能在未取得身份时选中另一人,显式身份仍使用各自来源', () => {
registerNameWritings([writing, { ...writing, id: 2, canonical_name: '另一艺名', zh_cn: '另一写法' }]);
expect(entityDisplayName('performer', '楓カレン')).toBe('楓カレン');
expect(entityDisplayName('performer', '楓カレン', 1)).toBe('枫花恋');
expect(entityDisplayName('performer', '楓カレン', 2)).toBe('另一写法');
});
it('原始纯汉字署名使用服务端字形表,未绑定艺名也不漏掉简体显示', () => {
const glyphs = { 宮: '宫', 澤: '泽', 寧: '宁', 鈴: '铃' };
registerNameWritings([], glyphs);
expect(entityDisplayName('performer', '宮澤寧音')).toBe('宫泽宁音');
expect(entityDisplayName('performer', '山田鈴奈')).toBe('山田铃奈');
expect(entityDisplayName('creator', '宮澤寧音')).toBe('宫泽宁音');
expect(entityDisplayName('performer', '宮澤かな')).toBe('宮澤かな');
expect(entityDisplayName('performer', 'Rin 鈴')).toBe('Rin 鈴');
expect(entityDisplayName('studio', '宮澤寧音')).toBe('宮澤寧音');
setNameLanguage('ja');
expect(entityDisplayName('performer', '宮澤寧音')).toBe('宮澤寧音');
expect(glyphs).toEqual({ 宮: '宫', 澤: '泽', 寧: '宁', 鈴: '铃' });
registerNameWritings([]);
setNameLanguage('zh-CN');
expect(entityDisplayName('performer', '宮澤寧音')).toBe('宮澤寧音');
});
it('切换显示语言保留原始名称、身份和来源对象', () => {
const original = { ...writing };
registerNameWritings([original]);
expect(entityDisplayName('performer', '枫花恋', 1)).toBe('枫花恋');
setNameLanguage('ja');
expect(entityDisplayName('performer', '枫花恋', 1)).toBe('楓カレン');
expect(original).toEqual(writing);
});
it('同一身份下其他艺名不会被替换为当前统称,人物与创作者分开索引', () => {
registerNameWriting(writing);
setNameLanguage('ja');
expect(entityDisplayName('performer', '田中柠檬', 1)).toBe('田中柠檬');
expect(entityDisplayName('creator', '枫花恋', 1)).toBe('枫花恋');
});
it('缺少已核对的写法时保留原名', () => {
registerNameWriting({ ...writing, zh_cn: null });
expect(entityDisplayName('performer', '枫花恋', 1)).toBe('枫花恋');
});
it('刷新资料集合清除过期名称,但保留用户的语言偏好', () => {
registerNameWritings([writing]);
setNameLanguage('ja');
registerNameWritings([]);
expect(nameLanguage()).toBe('ja');
expect(entityDisplayName('performer', '枫花恋', 1)).toBe('枫花恋');
});
});