/**
* 電子發票權限測試腳本
*
* 測試電子發票工具的權限控制:
* - 所有電子發票操作:僅 admin/assistant 可用
*/
import { checkEInvoicePermission } from '../src/services/einvoice/tools.js'
import type { Permission } from '../src/services/permission/types.js'
interface TestCase {
name: string
permission: Permission
expected: boolean
}
const testCases: TestCase[] = [
// viewer - 不可用
{ name: 'viewer 操作電子發票', permission: 'viewer', expected: false },
// sales - 不可用
{ name: 'sales 操作電子發票', permission: 'sales', expected: false },
// construction - 不可用
{ name: 'construction 操作電子發票', permission: 'construction', expected: false },
// assistant - 可用
{ name: 'assistant 操作電子發票', permission: 'assistant', expected: true },
// admin - 可用
{ name: 'admin 操作電子發票', permission: 'admin', expected: true },
]
async function runTests(): Promise<void> {
console.log('🧪 電子發票權限測試\n')
console.log('='.repeat(60))
let passed = 0
let failed = 0
for (const tc of testCases) {
const result = checkEInvoicePermission(tc.permission)
const success = result.allowed === tc.expected
if (success) {
console.log(`✅ ${tc.name}`)
passed++
} else {
console.log(`❌ ${tc.name}`)
console.log(` 預期: ${tc.expected ? '允許' : '拒絕'}`)
console.log(` 實際: ${result.allowed ? '允許' : '拒絕'}`)
if (result.reason) {
console.log(` 原因: ${result.reason}`)
}
failed++
}
}
console.log('\n' + '='.repeat(60))
console.log(`📊 測試結果: ${passed} 通過, ${failed} 失敗`)
if (failed > 0) {
process.exit(1)
}
console.log('\n✅ 所有電子發票權限測試通過!')
}
runTests().catch(console.error)