import { test } from 'node:test'; import assert from 'node:assert/strict'; import { adoptedSessionID, adoptMissingMessage } from '../lib/adopt.js'; // 字段名是对外契约:三平台各写一遍时少个下划线就静默退化成「每封邮件新开一条」, // 而那个错误不报任何异常。这组测试锁住字段名本身。 test('adoptedSessionID: 取 platform_session_id', () => { assert.equal(adoptedSessionID({ platform_session_id: 'ses_abc123' }), 'ses_abc123'); }); test('adoptedSessionID: 去首尾空白', () => { assert.equal(adoptedSessionID({ platform_session_id: ' ses_abc ' }), 'ses_abc'); }); // 空串是「不是接管」的正常信号(服务端对非接管会话回空串),不是异常 test('adoptedSessionID: 空串表示不是接管', () => { assert.equal(adoptedSessionID({ platform_session_id: '' }), ''); assert.equal(adoptedSessionID({ platform_session_id: ' ' }), ''); }); test('adoptedSessionID: 字段缺失返回空串', () => { assert.equal(adoptedSessionID({}), ''); assert.equal(adoptedSessionID({ session_id: 'x' }), ''); }); // 老版本服务端不发这个字段;插件不能因此崩掉整条投递 test('adoptedSessionID: 非字符串与空输入都退回空串', () => { assert.equal(adoptedSessionID({ platform_session_id: 123 }), ''); assert.equal(adoptedSessionID({ platform_session_id: null }), ''); assert.equal(adoptedSessionID({ platform_session_id: ['a'] }), ''); assert.equal(adoptedSessionID(undefined), ''); assert.equal(adoptedSessionID(null), ''); }); // 话术必须给出可执行的下一步:只说「不存在」时模型会原地重试同一个地址 test('adoptMissingMessage: 带上 id 与 .new 的指引', () => { const msg = adoptMissingMessage('ses_gone'); assert.match(msg, /ses_gone/); assert.match(msg, /\.new/); assert.match(msg, /可能已被删除/); }); test('adoptMissingMessage: detail 可按平台定制', () => { const msg = adoptMissingMessage('mail-1', '磁盘上已无这条会话'); assert.match(msg, /磁盘上已无这条会话/); assert.match(msg, /\.new/); });