67 lines
2.6 KiB
JavaScript
67 lines
2.6 KiB
JavaScript
/**
|
|
* 删除 SQL 规则配置工具(module-management/ruleUtils):
|
|
* 新增行构造、列表识别文案、SQL 内容校验。
|
|
*/
|
|
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
IDS_PLACEHOLDER,
|
|
createRuleRow,
|
|
ruleHasSql,
|
|
ruleIsReadOnlySql,
|
|
ruleLabel,
|
|
ruleSummary,
|
|
} from '@/views/module/module-management/ruleUtils'
|
|
|
|
describe('删除 SQL 规则工具', () => {
|
|
it('新增行:主键由调用方取号传入,模块列直接物化,无名称/编码字段', () => {
|
|
const rule = createRuleRow('order', { id: '1900000000000000001', xh: 30 })
|
|
expect(rule).toMatchObject({
|
|
b_id: '1900000000000000001',
|
|
b_module_id: 'order',
|
|
b_canuse: 1,
|
|
b_xh: 30,
|
|
})
|
|
// 新增行的 SQL 预填 :ids 骨架,直接可改
|
|
expect(rule.b_sql).toContain(IDS_PLACEHOLDER)
|
|
expect(rule.b_code).toBeUndefined()
|
|
expect(rule.b_name).toBeUndefined()
|
|
// 旧设计的字段不再出现
|
|
expect(rule.b_scope_type).toBeUndefined()
|
|
expect(rule.b_scope_id).toBeUndefined()
|
|
expect(rule.b_predicate).toBeUndefined()
|
|
expect(rule.b_hook).toBeUndefined()
|
|
})
|
|
|
|
it('摘要:SQL 单行化并按长度截断,空 SQL 给可读提示', () => {
|
|
const row = { b_sql: 'select\n b_id\nfrom bill where b_settled = 1' }
|
|
expect(ruleSummary(row)).toBe('select b_id from bill where b_settled = 1')
|
|
expect(ruleSummary({ b_sql: null })).toBe('未填写 SQL')
|
|
|
|
const long = { b_sql: `select b_id from t where ${'x'.repeat(100)}` }
|
|
const summary = ruleSummary(long)
|
|
expect(summary.endsWith('…')).toBe(true)
|
|
expect(summary.length).toBeLessThanOrEqual(81)
|
|
})
|
|
|
|
it('识别文案:优先提示文案,缺文案退回 SQL 片段', () => {
|
|
const row = {
|
|
b_sql: 'select 1 as b_id',
|
|
b_message: '单据已销账,不能删除',
|
|
}
|
|
expect(ruleLabel(row)).toBe('单据已销账,不能删除')
|
|
expect(ruleLabel({ ...row, b_message: null })).toBe('select 1 as b_id')
|
|
expect(ruleLabel({ ...row, b_message: ' ' })).toBe('select 1 as b_id')
|
|
})
|
|
|
|
it('SQL 校验:必须非空、包含 :ids、且是只读查询', () => {
|
|
expect(ruleHasSql({ b_sql: 'select b_id from t where b_id in (:ids)' })).toBe(true)
|
|
expect(ruleHasSql({ b_sql: 'select b_id from t' })).toBe(false)
|
|
expect(ruleHasSql({ b_sql: null })).toBe(false)
|
|
|
|
expect(ruleIsReadOnlySql({ b_sql: 'select b_id from t' })).toBe(true)
|
|
expect(ruleIsReadOnlySql({ b_sql: ' WITH x AS (select 1) select * from x' })).toBe(true)
|
|
expect(ruleIsReadOnlySql({ b_sql: 'delete from t' })).toBe(false)
|
|
expect(ruleIsReadOnlySql({ b_sql: null })).toBe(false)
|
|
})
|
|
})
|