const test = require('node:test') const assert = require('node:assert/strict') const fs = require('node:fs') const path = require('node:path') const root = path.resolve(__dirname, '../..') const read = file => fs.readFileSync(path.join(root, file), 'utf8') const pay = read('inc/helpers/aksrt-pay.php') const resource = read('inc/helpers/aksrt-resource.php') const list = read('src/Admin/Native/PostListEnhance.php') const domain = read('src/Core/DomainModel.php') test('sales count has a single read path that adds the 销量浮动', () => { // 展示销量只有一个口径:真实订单 + 后台「销量浮动」(pay_count)。 // 此前各调用点各自拼 virtual_sales / sales_volume,pay_count 写进去却没人读。 assert.match(pay, /function aksrt_get_content_sales_count\(/) assert.match(pay, /RESOURCE_SALES_VOLUME_KEY/) assert.match(pay, /\$pay_meta\['pay_count'\]/) // 两部分都必须下限为 0,避免负的浮动把销量拉成负数。 assert.match(pay, /max\(0, \$real \+ \$float\)/) }) test('every sales_count producer goes through that read path', () => { // 内容帖、资源帖、付费墙、付费盒四处不得再各自拼装销量。 assert.match(pay, /'sales_count'\s*=>\s*\$show_sales \? aksrt_get_content_sales_count\(\$p, \$pay_meta\) : 0/) assert.match(resource, /'sales_count'\s*=>\s*\$show_sales \? aksrt_get_content_sales_count\(\$p, \$pay_meta\) : 0/) assert.match(pay, /\$sales = aksrt_get_content_sales_count\(\$post, \$meta\)/) // 不得再出现按 virtual_sales 现拼销量的旧写法。 assert.doesNotMatch(pay, /\$sales\s*=\s*max\(0, \(int\) \(\$meta\['virtual_sales'\] \?\? 0\)\);/) assert.doesNotMatch(pay, /\$virtual_sales \+ max\(0, \$sales_volume, \$download_count\)/) assert.doesNotMatch(resource, /\$virtual_sales \+ max\(0, max\(\$download_count, \$legacy_download_count\)\)/) }) test('pay_count is declared, sanitized and consumed end to end', () => { // 删掉任何一段,这个字段就又变成「设了不生效」的摆设。 assert.match(domain, /'pay_count'\s*=>\s*0/, 'default value exists') assert.match(domain, /\$meta\['pay_count'\]\s*=\s*\(int\)/, 'sanitize exists') // 后台两个入口都写这个键:资源 metabox 与文章列表快捷/批量编辑。 assert.match(read('src/Core/ResourceMetaBox.php'), /'pay_count'/) assert.match(list, /case 'pay_count':/) // 快捷编辑按整数运算,与读取口径的 max(0,(int)) 一致。 const branch = list.slice(list.indexOf("case 'pay_count':"), list.indexOf('case \'price\':')) assert.match(branch, /apply_operation/) assert.match(branch, /max\(0, \(int\) \$new\)/) }) test('the admin sales column shows 真实 + 浮动, not the raw meta', () => { // 列表列与前台同一口径:真实订单 + pay_count,否则后台与前台数字不一致。 assert.match(list, /\$sales_volume = max\(\$real_sales, \$meta_sales\) \+ max\(0, \(int\) \(\$pay_meta\['pay_count'\] \?\? 0\)\)/) // 真实销量取订单表统计,不能只有 meta 副本。 assert.match(list, /\$real_sales = \$this->real_sales_count\(\$post_id\)/) })