Ctrl K
ComunidadGuías…

frontend/test/entity-names.test.ts

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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('枫花恋');
  });
});