import { describe, expect, it } from 'vitest';

import { buildFormMappingRecord, formatRecordDepartmentName } from '../formMappingRecord';

describe('form mapping record', () => {
  it('uses the configured step title and converts escaped line breaks', () => {
    const result = buildFormMappingRecord({ nodeName: '旧步骤', fileList: '[]' }, { nodeName: String.raw`部门领导审核\nDepartment Manager`, type: 'approver' });
    expect(result.title).toBe('部门领导审核\nDepartment Manager');
    expect(result.actionLabel).toBe('审核');
  });

  it('uses processing labels and keeps attachments', () => {
    const files = [{ name: 'record.pdf' }];
    const result = buildFormMappingRecord({ nodeName: '办理', fileList: JSON.stringify(files) }, { type: 'processing' });
    expect(result.actionLabel).toBe('办理');
    expect(result.fileList).toEqual(files);
  });

  it('accepts array attachments and ignores malformed data', () => {
    const files = [{ name: 'record.pdf' }];
    expect(buildFormMappingRecord({ fileList: files }, {}).fileList).toBe(files);
    expect(buildFormMappingRecord({ fileList: '{bad' }, {}).fileList).toEqual([]);
    expect(buildFormMappingRecord({ fileList: '{}' }, {}).fileList).toEqual([]);
  });

  it('hides only ancestor root names in mapped approval departments', () => {
    const names = '博思涛/质量中心/质控部、博思涛/研发部、根组织';
    expect(formatRecordDepartmentName(names, 0)).toBe('质量中心/质控部、研发部、根组织');
    expect(formatRecordDepartmentName(names, 1)).toBe(names);
    expect(formatRecordDepartmentName(undefined, 0)).toBe('');
  });

  it('shows the last configured levels of each approval department', () => {
    const names = 'A/B/C/D、A/B/E、A';
    expect(formatRecordDepartmentName(names, 0, 2)).toBe('C/D、B/E、A');
    expect(formatRecordDepartmentName(names, 1, 2)).toBe('C/D、B/E、A');
    expect(formatRecordDepartmentName(names, 0, 4)).toBe('B/C/D、B/E、A');
    expect(formatRecordDepartmentName(names, 0, 9)).toBe('B/C/D、B/E、A');
    expect(formatRecordDepartmentName('A/B', 0, 2)).toBe('B');
    expect(formatRecordDepartmentName(names, 0, 0)).toBe('B/C/D、B/E、A');
  });
});
