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 ab2ac5b
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 25 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
}
41 changes: 41 additions & 0 deletions net/httpx/httptestx/recorder_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// 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 (
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

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"`
}
25 changes: 2 additions & 23 deletions randx/rand_code_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func TestRandCode(t *testing.T) {
{
name: "小写字母验证码",
length: 100,
typ: randx.TypeLetter,
typ: randx.TypeLowerCase,
wantMatch: "^[a-z]+$",
wantErr: nil,
},
Expand All @@ -68,14 +68,7 @@ func TestRandCode(t *testing.T) {
{
name: "大写字母验证码",
length: 100,
typ: randx.TypeCapital,
wantMatch: "^[A-Z]+$",
wantErr: nil,
},
{
name: "大写字母验证码(兼容旧版本)",
length: 100,
typ: randx.TypeCapital,
typ: randx.TypeUpperCase,
wantMatch: "^[A-Z]+$",
wantErr: nil,
},
Expand All @@ -86,27 +79,13 @@ func TestRandCode(t *testing.T) {
wantMatch: "^[a-zA-Z]+$",
wantErr: nil,
},
{
name: "大小写字母验证码(兼容旧版本)",
length: 100,
typ: randx.TypeCapital | randx.TypeLetter,
wantMatch: "^[a-zA-Z]+$",
wantErr: nil,
},
{
name: "数字+大小写字母验证码",
length: 100,
typ: randx.TypeDigit | randx.TypeUpperCase | randx.TypeLowerCase,
wantMatch: "^[0-9a-zA-Z]+$",
wantErr: nil,
},
{
name: "数字+大小写字母验证码(兼容旧版本)",
length: 100,
typ: randx.TypeDigit | randx.TypeLetter | randx.TypeCapital,
wantMatch: "^[0-9a-zA-Z]+$",
wantErr: nil,
},
{
name: "所有类型验证",
length: 100,
Expand Down

0 comments on commit ab2ac5b

Please sign in to comment.