From 2df45ebbfab5ad8255833161b6927fafa52963aa Mon Sep 17 00:00:00 2001 From: wuzilong <704541015@qq.com> Date: Sun, 18 Oct 2026 18:19:54 +0800 Subject: [PATCH] test(web-admin): add product confirm dialog source contract checks. Co-authored-by: Cursor --- .../test-mp-crm-product-confirm-dom.mjs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 web-admin/scripts/test-mp-crm-product-confirm-dom.mjs diff --git a/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs b/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs new file mode 100644 index 000000000..dd1ee213a --- /dev/null +++ b/web-admin/scripts/test-mp-crm-product-confirm-dom.mjs @@ -0,0 +1,40 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' + +const root = new URL('../src/views/m/crm/product/', import.meta.url) +const util = await readFile(new URL('../src/utils/mp-crm-product-confirm.ts', import.meta.url), 'utf8') +const scss = await readFile(new URL('product.scss', root), 'utf8') +const list = await readFile(new URL('index.vue', root), 'utf8') +const detail = await readFile(new URL('detail.vue', root), 'utf8') +const categories = await readFile(new URL('categories.vue', root), 'utf8') + +assert.match(util, /ProductConfirmKind\s*=\s*'default'\s*\|\s*'danger'/, 'helper 必须支持 danger kind') +assert.match(util, /kind\s*===\s*'danger'/, 'helper 必须分支处理 danger') +assert.match(util, /mp-product-dialog--danger/, 'helper 必须带 danger className') +assert.match(util, /#dc2626/, '删除确认色必须为危险红') +assert.match(util, /#0a9f6d/, '普通确认色必须为三墙绿') +assert.doesNotMatch(util, /round-button/, '禁止 round-button 主题') +assert.doesNotMatch(util, /#10b981/, '禁止 Fresh Mint') + +assert.match(scss, /body \.van-dialog\.mp-product-dialog/, 'scss 必须限定产品 Dialog') +assert.match(scss, /mp-product-dialog--danger/, 'scss 必须覆盖危险确认键') +assert.match(scss, /mp-product-dialog__warn-icon/, 'scss 必须有警示图标') +assert.doesNotMatch(scss, /#10b981/, 'scss 禁止 Fresh Mint') + +for (const [name, src] of [ + ['index', list], + ['detail', detail], + ['categories', categories] +]) { + assert.match(src, /showProductConfirmDialog/, `${name} 必须使用 showProductConfirmDialog`) + assert.doesNotMatch(src, /showConfirmDialog\s*\(/, `${name} 不得直接调用 showConfirmDialog`) +} + +assert.match(list, /kind:\s*'danger'/, '列表删除必须 danger') +assert.match(list, /kind:\s*'default'/, '列表上下架必须 default') +assert.match(detail, /kind:\s*'danger'/, '详情删除必须 danger') +assert.match(detail, /kind:\s*'default'/, '详情上下架必须 default') +assert.match(categories, /kind:\s*'danger'/, '分类删除必须 danger') +assert.match(categories, /删除分类/, '分类删除标题须为删除分类') + +console.log('mp-crm-product-confirm-dom: ok')