common_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package handlers
  2. import (
  3. "log/slog"
  4. "net/http"
  5. "net/http/httptest"
  6. "strings"
  7. "testing"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestAttachRequestID(t *testing.T) {
  11. t.Run("sets requestId from r query param", func(t *testing.T) {
  12. req := httptest.NewRequest("GET", "/buddylist/addBuddy?r=abc123", nil)
  13. data := attachRequestID(req, BaseResponse{
  14. Response: ResponseBody{
  15. StatusCode: 200,
  16. StatusText: "OK",
  17. },
  18. })
  19. br, ok := data.(BaseResponse)
  20. assert.True(t, ok)
  21. assert.Equal(t, "abc123", br.Response.RequestID)
  22. })
  23. t.Run("preserves explicit requestId", func(t *testing.T) {
  24. req := httptest.NewRequest("GET", "/buddylist/addBuddy?r=abc123", nil)
  25. data := attachRequestID(req, BaseResponse{
  26. Response: ResponseBody{
  27. StatusCode: 200,
  28. StatusText: "OK",
  29. RequestID: "existing",
  30. },
  31. })
  32. br, ok := data.(BaseResponse)
  33. assert.True(t, ok)
  34. assert.Equal(t, "existing", br.Response.RequestID)
  35. })
  36. t.Run("no-op without r param", func(t *testing.T) {
  37. req := httptest.NewRequest("GET", "/buddylist/addBuddy", nil)
  38. data := attachRequestID(req, BaseResponse{
  39. Response: ResponseBody{
  40. StatusCode: 200,
  41. StatusText: "OK",
  42. },
  43. })
  44. br, ok := data.(BaseResponse)
  45. assert.True(t, ok)
  46. assert.Empty(t, br.Response.RequestID)
  47. })
  48. }
  49. func TestSendResponseIncludesRequestID(t *testing.T) {
  50. req := httptest.NewRequest("GET", "/buddylist/addBuddy?r=req-42&f=json", nil)
  51. rr := httptest.NewRecorder()
  52. resp := BaseResponse{
  53. Response: ResponseBody{
  54. StatusCode: 200,
  55. StatusText: "OK",
  56. Data: map[string]string{"resultCode": "success"},
  57. },
  58. }
  59. SendResponse(rr, req, resp, slog.Default())
  60. assert.Equal(t, http.StatusOK, rr.Code)
  61. body := strings.TrimSpace(rr.Body.String())
  62. assert.Equal(t, `{"response":{"statusCode":200,"statusText":"OK","requestId":"req-42","data":{"resultCode":"success"}}}`, body)
  63. }