Skip to content

Commit

Permalink
httptestx: 支持 JSONRecorder
Browse files Browse the repository at this point in the history
  • Loading branch information
flycash committed Feb 11, 2024
1 parent 43c0955 commit b05760f
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 2 deletions.
File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ ut:

.PHONY: setup
setup:
@sh ./script/setup.sh
@sh ./.script/setup.sh

.PHONY: fmt
fmt:
@sh ./script/goimports.sh
@sh ./.script/goimports.sh

.PHONY: lint
lint:
Expand Down
44 changes: 44 additions & 0 deletions net/httpx/httptestx/recorder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Copyright 2021 ecodeclub
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package httptestx

import (
"encoding/json"
"net/http/httptest"
)

type JSONResponseRecorder[T any] struct {
*httptest.ResponseRecorder
}

func NewJSONResponseRecorder[T any]() *JSONResponseRecorder[T] {
return &JSONResponseRecorder[T]{
ResponseRecorder: httptest.NewRecorder(),
}
}

func (r JSONResponseRecorder[T]) Scan() (T, error) {
var t T
err := json.NewDecoder(r.Body).Decode(&t)
return t, err
}

func (r JSONResponseRecorder[T]) MustScan() T {
t, err := r.Scan()
if err != nil {
panic(err)
}
return t
}
40 changes: 40 additions & 0 deletions net/httpx/httptestx/recorder_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright 2021 ecodeclub
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package httptestx

import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"testing"
)

func TestJSONResponseRecorder_MustScan(t *testing.T) {
// 成功案例
recorder := NewJSONResponseRecorder[User]()
_, err := recorder.WriteString(`{"name": "Tom"}`)
require.NoError(t, err)
u := recorder.MustScan()
assert.Equal(t, User{Name: "Tom"}, u)

// panic 案例
recorder = NewJSONResponseRecorder[User]()
assert.Panics(t, func() {
recorder.MustScan()
})
}

type User struct {
Name string `json:"name"`
}

0 comments on commit b05760f

Please sign in to comment.