/**
* Shopify 權限測試腳本
*
* 測試 Shopify 工具的權限控制:
* - 讀取工具:所有人可用
* - 寫入工具:僅 admin/assistant 可用
*/
import { checkShopifyPermission } from '../src/services/shopify/tools.js'
import type { Permission } from '../src/services/permission/types.js'
interface TestCase {
name: string
toolName: string
permission: Permission
expected: boolean
}
const testCases: TestCase[] = [
// 讀取工具 - 所有人可用
{ name: 'viewer 搜尋產品', toolName: 'shopify_search_products', permission: 'viewer', expected: true },
{ name: 'viewer 取得產品', toolName: 'shopify_get_product', permission: 'viewer', expected: true },
{ name: 'viewer 取得位置', toolName: 'shopify_get_locations', permission: 'viewer', expected: true },
{ name: 'sales 搜尋產品', toolName: 'shopify_search_products', permission: 'sales', expected: true },
{ name: 'construction 搜尋產品', toolName: 'shopify_search_products', permission: 'construction', expected: true },
{ name: 'assistant 搜尋產品', toolName: 'shopify_search_products', permission: 'assistant', expected: true },
{ name: 'admin 搜尋產品', toolName: 'shopify_search_products', permission: 'admin', expected: true },
// 寫入工具 - viewer 不可用
{ name: 'viewer 建立產品', toolName: 'shopify_create_product', permission: 'viewer', expected: false },
{ name: 'viewer 更新產品', toolName: 'shopify_update_product', permission: 'viewer', expected: false },
{ name: 'viewer 更新價格', toolName: 'shopify_update_price', permission: 'viewer', expected: false },
// 寫入工具 - sales 不可用
{ name: 'sales 建立產品', toolName: 'shopify_create_product', permission: 'sales', expected: false },
{ name: 'sales 更新產品', toolName: 'shopify_update_product', permission: 'sales', expected: false },
// 寫入工具 - construction 不可用
{ name: 'construction 更新產品', toolName: 'shopify_update_product', permission: 'construction', expected: false },
// 寫入工具 - assistant 可用
{ name: 'assistant 建立產品', toolName: 'shopify_create_product', permission: 'assistant', expected: true },
{ name: 'assistant 更新產品', toolName: 'shopify_update_product', permission: 'assistant', expected: true },
{ name: 'assistant 更新價格', toolName: 'shopify_update_price', permission: 'assistant', expected: true },
// 寫入工具 - admin 可用
{ name: 'admin 建立產品', toolName: 'shopify_create_product', permission: 'admin', expected: true },
{ name: 'admin 更新產品', toolName: 'shopify_update_product', permission: 'admin', expected: true },
{ name: 'admin 更新價格', toolName: 'shopify_update_price', permission: 'admin', expected: true },
]
async function runTests(): Promise<void> {
console.log('🧪 Shopify 權限測試\n')
console.log('='.repeat(60))
let passed = 0
let failed = 0
for (const tc of testCases) {
const result = checkShopifyPermission(tc.toolName, 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✅ 所有 Shopify 權限測試通過!')
}
runTests().catch(console.error)