| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package initialize
- import (
- "testing"
- "github.com/glebarez/sqlite"
- "github.com/stretchr/testify/require"
- "gorm.io/gorm"
- "wails-app/internal/dao"
- "wails-app/internal/global"
- )
- func TestEnsureOperationPermissionsIsIdempotent(t *testing.T) {
- db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
- require.NoError(t, err)
- require.NoError(t, db.AutoMigrate(&dao.SysApi{}))
- global.GVA_DB = db
- t.Cleanup(func() { global.GVA_DB = nil })
- require.NoError(t, db.Create(&dao.SysApi{
- Path: "/ticket-machine/test", Description: "旧票机测试", ApiGroup: "开发调试", Method: "GET",
- }).Error)
- require.NoError(t, db.Exec(`CREATE TABLE casbin_rule (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- ptype TEXT, v0 TEXT, v1 TEXT, v2 TEXT, v3 TEXT, v4 TEXT, v5 TEXT
- )`).Error)
- require.NoError(t, db.Exec(
- "INSERT INTO casbin_rule (ptype, v0, v1, v2) VALUES (?, ?, ?, ?)",
- "p", "618", "/ticket-machine/test", "GET",
- ).Error)
- require.NoError(t, db.Exec(
- "INSERT INTO casbin_rule (ptype, v0, v1, v2) VALUES (?, ?, ?, ?)",
- "p", "618", "/channel/test-event", "POST",
- ).Error)
- require.NoError(t, EnsureOperationPermissions())
- require.NoError(t, EnsureOperationPermissions())
- routes := [][2]string{
- {"/vehicle/entry", "POST"},
- {"/vehicle/operation/context", "POST"},
- {"/vehicle/passage", "POST"},
- {"/channel/events", "GET"},
- {"/parking/gate/devices", "GET"},
- {"/parking/gate/open", "POST"},
- {"/parking/gate/close", "POST"},
- {"/ticket-machine/button", "POST"},
- }
- for _, route := range routes {
- var apiCount int64
- require.NoError(t, db.Model(&dao.SysApi{}).
- Where("path = ? AND method = ?", route[0], route[1]).Count(&apiCount).Error)
- require.EqualValues(t, 1, apiCount, route)
- var ruleCount int64
- require.NoError(t, db.Table("casbin_rule").
- Where("v0 IN ? AND v1 = ? AND v2 = ?", []string{"618", "888", "9527"}, route[0], route[1]).
- Count(&ruleCount).Error)
- require.EqualValues(t, 3, ruleCount, route)
- }
- debugRoutes := [][2]string{
- {"/ticket-machine/test", "POST"},
- {"/ticket-machine/debug", "POST"},
- {"/ticket-machine/usb-list", "GET"},
- {"/channel/test-event", "POST"},
- }
- for _, route := range debugRoutes {
- var apiCount int64
- require.NoError(t, db.Model(&dao.SysApi{}).
- Where("path = ? AND method = ?", route[0], route[1]).Count(&apiCount).Error)
- require.EqualValues(t, 1, apiCount, route)
- var adminRuleCount int64
- require.NoError(t, db.Table("casbin_rule").
- Where("v0 IN ? AND v1 = ? AND v2 = ?", []string{"888", "9527"}, route[0], route[1]).
- Count(&adminRuleCount).Error)
- require.EqualValues(t, 2, adminRuleCount, route)
- var operatorRuleCount int64
- require.NoError(t, db.Table("casbin_rule").
- Where("v0 = ? AND v1 = ? AND v2 = ?", "618", route[0], route[1]).
- Count(&operatorRuleCount).Error)
- require.Zero(t, operatorRuleCount, route)
- }
- var legacyAPICount int64
- require.NoError(t, db.Unscoped().Model(&dao.SysApi{}).
- Where("path = ? AND method = ?", "/ticket-machine/test", "GET").Count(&legacyAPICount).Error)
- require.Zero(t, legacyAPICount)
- var legacyRuleCount int64
- require.NoError(t, db.Table("casbin_rule").
- Where("v1 = ? AND v2 = ?", "/ticket-machine/test", "GET").Count(&legacyRuleCount).Error)
- require.Zero(t, legacyRuleCount)
- }
|