payment_seed_test.go 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package initialize
  2. import (
  3. "testing"
  4. "github.com/glebarez/sqlite"
  5. "github.com/stretchr/testify/require"
  6. "gorm.io/gorm"
  7. "wails-app/internal/dao"
  8. "wails-app/internal/global"
  9. )
  10. func TestEnsurePaymentConfigurationIsIdempotent(t *testing.T) {
  11. db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
  12. require.NoError(t, err)
  13. global.GVA_DB = db
  14. require.NoError(t, db.AutoMigrate(
  15. &dao.PaymentMethodConfig{}, &dao.PaymentEntryConfig{}, &dao.PaymentEntryMethod{},
  16. &dao.SysBaseMenu{}, &dao.SysAuthorityMenu{}, &dao.SysApi{},
  17. ))
  18. parking := dao.SysBaseMenu{Path: "parking", Name: "parking", Meta: dao.Meta{Title: "停车管理"}}
  19. require.NoError(t, db.Create(&parking).Error)
  20. require.NoError(t, EnsurePaymentConfiguration())
  21. require.NoError(t, EnsurePaymentConfiguration())
  22. var methods []dao.PaymentMethodConfig
  23. require.NoError(t, db.Order("sort").Find(&methods).Error)
  24. require.Len(t, methods, 3)
  25. require.Equal(t, "cash", methods[0].Code)
  26. require.True(t, methods[0].Enabled)
  27. require.Equal(t, []string{"counter"}, methods[0].Scenes)
  28. var entries []dao.PaymentEntryConfig
  29. require.NoError(t, db.Order("sort").Find(&entries).Error)
  30. require.Len(t, entries, 2)
  31. var relationCount int64
  32. require.NoError(t, db.Model(&dao.PaymentEntryMethod{}).Count(&relationCount).Error)
  33. require.EqualValues(t, 5, relationCount)
  34. var menuCount int64
  35. require.NoError(t, db.Model(&dao.SysBaseMenu{}).Where("name = ?", "paymentMethodConfig").Count(&menuCount).Error)
  36. require.EqualValues(t, 1, menuCount)
  37. var permissionCount int64
  38. require.NoError(t, db.Model(&dao.SysAuthorityMenu{}).Count(&permissionCount).Error)
  39. require.EqualValues(t, 7, permissionCount)
  40. var ruleCount int64
  41. require.NoError(t, db.Table("casbin_rule").Count(&ruleCount).Error)
  42. require.EqualValues(t, 47, ruleCount)
  43. }
  44. func TestEnsurePaymentConfigurationPermissionMatrix(t *testing.T) {
  45. db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
  46. require.NoError(t, err)
  47. global.GVA_DB = db
  48. t.Cleanup(func() { global.GVA_DB = nil })
  49. require.NoError(t, db.AutoMigrate(
  50. &dao.PaymentMethodConfig{}, &dao.PaymentEntryConfig{}, &dao.PaymentEntryMethod{},
  51. &dao.SysBaseMenu{}, &dao.SysAuthorityMenu{}, &dao.SysApi{},
  52. ))
  53. parking := dao.SysBaseMenu{Path: "parking", Name: "parking", Meta: dao.Meta{Title: "停车管理"}}
  54. require.NoError(t, db.Create(&parking).Error)
  55. require.NoError(t, EnsurePaymentConfiguration())
  56. assertPolicy := func(role, path, method string, expected bool) {
  57. t.Helper()
  58. var count int64
  59. require.NoError(t, db.Table("casbin_rule").Where(
  60. "ptype = ? AND v0 = ? AND v1 = ? AND v2 = ?", "p", role, path, method,
  61. ).Count(&count).Error)
  62. require.Equal(t, expected, count > 0, "role=%s path=%s method=%s", role, path, method)
  63. }
  64. for _, role := range []string{"618", "888", "9527"} {
  65. assertPolicy(role, "/payment/methods/enabled", "GET", true)
  66. assertPolicy(role, "/payment/methods/options", "GET", true)
  67. assertPolicy(role, "/payment/entries/enabled", "GET", true)
  68. assertPolicy(role, "/payment/entries/options", "GET", true)
  69. assertPolicy(role, "/digital-ticket/list", "GET", true)
  70. assertPolicy(role, "/digital-ticket/:ticketNo/pay", "POST", true)
  71. assertPolicy(role, "/digital-ticket/:ticketNo/exit", "POST", true)
  72. }
  73. for _, role := range []string{"888", "9527"} {
  74. assertPolicy(role, "/payment/methods", "POST", true)
  75. assertPolicy(role, "/payment/methods/:id/status", "PATCH", true)
  76. assertPolicy(role, "/payment/entries", "POST", true)
  77. assertPolicy(role, "/payment/entries/:id/status", "PATCH", true)
  78. }
  79. assertPolicy("618", "/payment/methods", "POST", false)
  80. assertPolicy("618", "/payment/methods/:id/status", "PATCH", false)
  81. assertPolicy("618", "/payment/entries", "POST", false)
  82. assertPolicy("618", "/payment/entries/:id/status", "PATCH", false)
  83. assertPolicy("618", "/payment/methods", "DELETE", false)
  84. }