import test from 'node:test' import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import ts from 'typescript' function evaluate(source, imports = {}) { const compiled = ts.transpileModule(source, { compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.CommonJS } }).outputText const module = { exports: {} } new Function('require', 'module', 'exports', compiled)( (name) => { assert.ok(imports[name], `Unexpected dependency: ${name}`) return imports[name] }, module, module.exports ) return module.exports } const types = evaluate(readFileSync('src/types/api/refund.ts', 'utf8')) const { RefundMethod } = types const { RefundMethodOptions, RefundMethodNameMap } = evaluate( readFileSync('src/config/constants/refund.ts', 'utf8'), { '@/types/api/refund': types } ) const dialogSource = readFileSync('src/components/business/CreateRefundDialog.vue', 'utf8') test('refund forms hide original route while preserving historical labels', () => { assert.deepEqual( RefundMethodOptions.map((option) => option.value), [RefundMethod.CUSTOMER_ACCOUNT, RefundMethod.ASSET_WALLET, RefundMethod.AGENT_WALLET] ) assert.equal(RefundMethodNameMap[RefundMethod.ORIGINAL_ROUTE], '原路退回') for (const path of [ 'src/components/business/CreateRefundDialog.vue', 'src/views/finance/refund/index.vue', 'src/views/finance/refund/detail.vue' ]) { assert.match(readFileSync(path, 'utf8'), /v-for="opt in RefundMethodOptions"/) } }) test('creation defaults and reset never select the hidden original route', () => { assert.match(dialogSource, /method: RefundMethod\.CUSTOMER_ACCOUNT/) assert.match(dialogSource, /formData\.method = RefundMethod\.CUSTOMER_ACCOUNT/) assert.doesNotMatch(dialogSource, /RefundMethod\.ORIGINAL_ROUTE/) const resolver = dialogSource.match(/const resolveRefundMethod = [\s\S]*?\n }/)[0] const { resolveRefundMethod } = evaluate( `const RefundMethod = ${JSON.stringify(RefundMethod)}; export ${resolver}` ) for (const payment_method of ['wechat', 'alipay', 'offline']) { assert.equal(resolveRefundMethod({ payment_method }), RefundMethod.CUSTOMER_ACCOUNT) } assert.equal( resolveRefundMethod({ payment_method: 'wallet', buyer_type: 'agent' }), RefundMethod.AGENT_WALLET ) assert.equal( resolveRefundMethod({ payment_method: 'wallet', buyer_type: 'customer' }), RefundMethod.ASSET_WALLET ) })