handler_test.tpl 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Code scaffolded by goctl. Safe to edit.
  2. // goctl {{.version}}
  3. package {{.PkgName}}
  4. import (
  5. "bytes"
  6. {{if .HasRequest}}"encoding/json"{{end}}
  7. "net/http"
  8. "net/http/httptest"
  9. "testing"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/stretchr/testify/require"
  12. {{.ImportPackages}}
  13. )
  14. {{if .HasDoc}}{{.Doc}}{{end}}
  15. func Test{{.HandlerName}}(t *testing.T) {
  16. // new service context
  17. c := config.Config{}
  18. svcCtx := svc.NewServiceContext(c)
  19. // init mock service context here
  20. tests := []struct {
  21. name string
  22. reqBody interface{}
  23. wantStatus int
  24. wantResp string
  25. setupMocks func()
  26. }{
  27. {
  28. name: "invalid request body",
  29. reqBody: "invalid",
  30. wantStatus: http.StatusBadRequest,
  31. wantResp: "unsupported type", // Adjust based on actual error response
  32. setupMocks: func() {
  33. // No setup needed for this test case
  34. },
  35. },
  36. {
  37. name: "handler error",
  38. {{if .HasRequest}}reqBody: types.{{.RequestType}}{
  39. //TODO: add fields here
  40. },
  41. {{end}}wantStatus: http.StatusBadRequest,
  42. wantResp: "error", // Adjust based on actual error response
  43. setupMocks: func() {
  44. // Mock login logic to return an error
  45. },
  46. },
  47. {
  48. name: "handler successful",
  49. {{if .HasRequest}}reqBody: types.{{.RequestType}}{
  50. //TODO: add fields here
  51. },
  52. {{end}}wantStatus: http.StatusOK,
  53. wantResp: `{"code":0,"msg":"success","data":{}}`, // Adjust based on actual success response
  54. setupMocks: func() {
  55. // Mock login logic to return success
  56. },
  57. },
  58. }
  59. for _, tt := range tests {
  60. t.Run(tt.name, func(t *testing.T) {
  61. tt.setupMocks()
  62. var reqBody []byte
  63. {{if .HasRequest}}var err error
  64. reqBody, err = json.Marshal(tt.reqBody)
  65. require.NoError(t, err){{end}}
  66. req, err := http.NewRequest("POST", "/ut", bytes.NewBuffer(reqBody))
  67. require.NoError(t, err)
  68. req.Header.Set("Content-Type", "application/json")
  69. rr := httptest.NewRecorder()
  70. handler := {{.HandlerName}}(svcCtx)
  71. handler.ServeHTTP(rr, req)
  72. t.Log(rr.Body.String())
  73. assert.Equal(t, tt.wantStatus, rr.Code)
  74. assert.Contains(t, rr.Body.String(), tt.wantResp)
  75. })
  76. }
  77. }