fix(微信订阅): 用微信真实关键词修正歌曲排期模板(thing1/phrase2/time3/character_string4),并修掉字段认领顺序导致的校准失效
This commit is contained in:
@@ -123,6 +123,66 @@ test('resolveFieldsFromKeywords:拿不到关键词表时一律沿用配置', (
|
||||
assert.deepEqual(r.fields, configured)
|
||||
})
|
||||
|
||||
/**
|
||||
* 回归:线上真实踩过的坑。
|
||||
*
|
||||
* 旧配置是「按常见命名猜的」thing2/date4/time1/character_string3/phrase5,五个编号全错,
|
||||
* 而且模板里**根本没有日期关键词**。当时按变量顺序贪心认领,playDate(首选 date,模板里
|
||||
* 没有 date)先把 character_string4 抢走,轮到 sequence 就没位置了,整张模板退回旧配置,
|
||||
* 发出去就是 `47003 data.thing1.value is empty`。
|
||||
*/
|
||||
const REAL_SONG_SELECTED_CONTENT =
|
||||
'歌曲名称:{{thing1.DATA}}\n排期状态:{{phrase2.DATA}}\n播放时间:{{time3.DATA}}\n排期序号:{{character_string4.DATA}}\n'
|
||||
|
||||
test('回归:真实排期模板 + 猜错的旧配置 → 校准成正确的四个编号,并丢掉模板里没有的 playDate', () => {
|
||||
const wrongConfigured = {
|
||||
thing2: 'songTitle',
|
||||
date4: 'playDate',
|
||||
time1: 'playTime',
|
||||
character_string3: 'sequence',
|
||||
phrase5: 'status'
|
||||
}
|
||||
const r = resolveFieldsFromKeywords(
|
||||
parseTemplateContent(REAL_SONG_SELECTED_CONTENT),
|
||||
wrongConfigured
|
||||
)
|
||||
assert.equal(r.source, 'wechat-api')
|
||||
assert.deepEqual(r.fields, {
|
||||
thing1: 'songTitle',
|
||||
phrase2: 'status',
|
||||
time3: 'playTime',
|
||||
character_string4: 'sequence'
|
||||
})
|
||||
// 模板里没有日期关键词 → playDate 被忽略(发了微信也不认)
|
||||
assert.deepEqual(r.unresolvedVariables, ['playDate'])
|
||||
assert.deepEqual(r.unclaimedCodes, [], '四个关键词必须全部填上,否则微信会报 value is empty')
|
||||
assert.match(r.reason, /已忽略/)
|
||||
})
|
||||
|
||||
test('回归:真实排期模板 + 已修正的内置配置 → 一致,不做任何改动', () => {
|
||||
const good = {
|
||||
thing1: 'songTitle',
|
||||
phrase2: 'status',
|
||||
time3: 'playTime',
|
||||
character_string4: 'sequence'
|
||||
}
|
||||
const r = resolveFieldsFromKeywords(parseTemplateContent(REAL_SONG_SELECTED_CONTENT), good)
|
||||
assert.equal(r.source, 'wechat-api')
|
||||
assert.deepEqual(r.fields, good)
|
||||
assert.deepEqual(r.invalidConfiguredCodes, [])
|
||||
assert.deepEqual(r.unclaimedCodes, [])
|
||||
assert.equal(r.reason, '配置与微信真实模板一致')
|
||||
})
|
||||
|
||||
test('unclaimedCodes:模板里有、配置里没有的关键词要被点名(这是 value is empty 的来源)', () => {
|
||||
const r = resolveFieldsFromKeywords(parseTemplateContent(REAL_SONG_SELECTED_CONTENT), {
|
||||
thing1: 'songTitle'
|
||||
})
|
||||
assert.deepEqual(r.unclaimedCodes.sort(), ['character_string4', 'phrase2', 'time3'])
|
||||
// 填不满模板时不动配置
|
||||
assert.equal(r.source, 'config')
|
||||
})
|
||||
|
||||
test('resolveFieldsFromKeywords:变量类型未知时不做自动映射', () => {
|
||||
const r = resolveFieldsFromKeywords(parseTemplateContent(SONG_SELECTED_CONTENT), {
|
||||
thing1: 'whateverCustomVar'
|
||||
|
||||
Reference in New Issue
Block a user