main.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "fwh-toolbox-server/logger"
  6. "fwh-toolbox-server/repositories/api/plane_v2"
  7. )
  8. // 打印模式:true=完整JSON,false=简洁摘要
  9. var verbose = false
  10. func main() {
  11. // 初始化
  12. logger.Init("dev")
  13. slug := "au-version"
  14. projectId := "b44a29fc-496b-4767-bbf1-1912f4c922ab"
  15. host := "http://localhost:8600"
  16. email := "liang_jlyx@163.com"
  17. password := "Ljd@163.com"
  18. fmt.Println("=== Plane V2 API 测试 ===")
  19. fmt.Printf("Host: %s\n", host)
  20. fmt.Printf("Workspace: %s\n", slug)
  21. fmt.Printf("Project: %s\n", projectId)
  22. fmt.Println()
  23. // 初始化 Client
  24. fmt.Print("1. 初始化 PlaneClient... ")
  25. plane_v2.InitPlaneClient(host, email, password)
  26. svc := plane_v2.NewPlaneService()
  27. fmt.Println("✅ 登录成功")
  28. fmt.Println()
  29. // 测试 Workspace API
  30. fmt.Println("=== Workspace ===")
  31. testGet("ListWorkspaces", func() ([]byte, error) {
  32. return svc.ListWorkspaces()
  33. })
  34. testGet("GetWorkspace", func() ([]byte, error) {
  35. return svc.GetWorkspace(slug)
  36. })
  37. // 测试 Project API
  38. fmt.Println("\n=== Project ===")
  39. testGet("ListProjects", func() ([]byte, error) {
  40. return svc.ListProjects(slug)
  41. })
  42. testGet("GetProject", func() ([]byte, error) {
  43. return svc.GetProject(slug, projectId)
  44. })
  45. // 测试 Member API
  46. fmt.Println("\n=== Member ===")
  47. testGet("ListWorkspaceMembers", func() ([]byte, error) {
  48. return svc.ListWorkspaceMembers(slug)
  49. })
  50. testGet("ListProjectMembers", func() ([]byte, error) {
  51. return svc.ListProjectMembers(slug, projectId)
  52. })
  53. // 测试 Label API
  54. fmt.Println("\n=== Label ===")
  55. testGet("ListLabels", func() ([]byte, error) {
  56. return svc.ListLabels(slug, projectId)
  57. })
  58. // 测试 State API
  59. fmt.Println("\n=== State ===")
  60. testGet("ListStates", func() ([]byte, error) {
  61. return svc.ListStates(slug, projectId)
  62. })
  63. // 测试 Issue API
  64. fmt.Println("\n=== Issue ===")
  65. testGet("ListIssues", func() ([]byte, error) {
  66. return svc.ListIssues(slug, projectId)
  67. })
  68. // 测试 Intake API
  69. fmt.Println("\n=== Intake ===")
  70. testGet("ListIntakeIssues (all)", func() ([]byte, error) {
  71. return svc.ListIntakeIssues(slug, projectId, "-2,-1,0,1,2")
  72. })
  73. // 测试 Cycle API
  74. fmt.Println("\n=== Cycle ===")
  75. testGet("ListCycles", func() ([]byte, error) {
  76. return svc.ListCycles(slug, projectId)
  77. })
  78. // 测试 Module API
  79. fmt.Println("\n=== Module ===")
  80. testGet("ListModules", func() ([]byte, error) {
  81. return svc.ListModules(slug, projectId)
  82. })
  83. // 测试 Page API
  84. fmt.Println("\n=== Page ===")
  85. testGet("ListPages", func() ([]byte, error) {
  86. return svc.ListPages(slug, projectId)
  87. })
  88. // 测试 Sticky API
  89. fmt.Println("\n=== Sticky ===")
  90. testGet("ListStickies", func() ([]byte, error) {
  91. return svc.ListStickies(slug)
  92. })
  93. fmt.Println("\n=== 测试完成 ===")
  94. }
  95. func testGet(name string, fn func() ([]byte, error)) {
  96. fmt.Printf(" %s... ", name)
  97. data, err := fn()
  98. if err != nil {
  99. fmt.Printf("❌ %v\n", err)
  100. return
  101. }
  102. var parsed any
  103. if err := json.Unmarshal(data, &parsed); err == nil {
  104. if verbose {
  105. // 完整打印模式
  106. pretty, _ := json.MarshalIndent(parsed, " ", " ")
  107. fmt.Printf("✅\n %s\n", string(pretty))
  108. } else {
  109. // 简洁打印模式
  110. switch v := parsed.(type) {
  111. case []any:
  112. fmt.Printf("✅ (%d items)\n", len(v))
  113. case map[string]any:
  114. if results, ok := v["results"].([]any); ok {
  115. fmt.Printf("✅ (%d results)\n", len(results))
  116. } else {
  117. fmt.Printf("✅ (object, %d keys)\n", len(v))
  118. }
  119. default:
  120. fmt.Printf("✅ (%d bytes)\n", len(data))
  121. }
  122. }
  123. } else {
  124. fmt.Printf("✅ (%d bytes, non-JSON)\n", len(data))
  125. }
  126. }