| 76 | } |
| 77 | |
| 78 | func TestRead(t *testing.T) { |
| 79 | t.Parallel() |
| 80 | t.Run("EmptyStruct", func(t *testing.T) { |
| 81 | t.Parallel() |
| 82 | ctx := context.Background() |
| 83 | rw := httptest.NewRecorder() |
| 84 | r := httptest.NewRequest("POST", "/", bytes.NewBufferString("{}")) |
| 85 | v := struct{}{} |
| 86 | require.True(t, httpapi.Read(ctx, rw, r, &v)) |
| 87 | }) |
| 88 | |
| 89 | t.Run("NoBody", func(t *testing.T) { |
| 90 | t.Parallel() |
| 91 | ctx := context.Background() |
| 92 | rw := httptest.NewRecorder() |
| 93 | r := httptest.NewRequest("POST", "/", nil) |
| 94 | var v json.RawMessage |
| 95 | require.False(t, httpapi.Read(ctx, rw, r, v)) |
| 96 | }) |
| 97 | |
| 98 | t.Run("Validate", func(t *testing.T) { |
| 99 | t.Parallel() |
| 100 | type toValidate struct { |
| 101 | Value string `json:"value" validate:"required"` |
| 102 | } |
| 103 | ctx := context.Background() |
| 104 | rw := httptest.NewRecorder() |
| 105 | r := httptest.NewRequest("POST", "/", bytes.NewBufferString(`{"value":"hi"}`)) |
| 106 | |
| 107 | var validate toValidate |
| 108 | require.True(t, httpapi.Read(ctx, rw, r, &validate)) |
| 109 | require.Equal(t, "hi", validate.Value) |
| 110 | }) |
| 111 | |
| 112 | t.Run("ValidateFailure", func(t *testing.T) { |
| 113 | t.Parallel() |
| 114 | type toValidate struct { |
| 115 | Value string `json:"value" validate:"required"` |
| 116 | } |
| 117 | ctx := context.Background() |
| 118 | rw := httptest.NewRecorder() |
| 119 | r := httptest.NewRequest("POST", "/", bytes.NewBufferString("{}")) |
| 120 | |
| 121 | var validate toValidate |
| 122 | require.False(t, httpapi.Read(ctx, rw, r, &validate)) |
| 123 | var v codersdk.Response |
| 124 | err := json.NewDecoder(rw.Body).Decode(&v) |
| 125 | require.NoError(t, err) |
| 126 | require.Len(t, v.Validations, 1) |
| 127 | require.Equal(t, "value", v.Validations[0].Field) |
| 128 | require.Equal(t, "Validation failed for tag \"required\" with value: \"\"", v.Validations[0].Detail) |
| 129 | }) |
| 130 | } |
| 131 | |
| 132 | func TestWebsocketCloseMsg(t *testing.T) { |
| 133 | t.Parallel() |