51 lines
1.9 KiB
Go
51 lines
1.9 KiB
Go
// 功能描述:验证资料更新保留头像、拒绝跨账户图片及空昵称。
|
||
// 版本:1.0.0。
|
||
package user
|
||
|
||
import (
|
||
"git.apinb.com/bsm-sdk/core/types"
|
||
"github.com/DATA-DOG/go-sqlmock"
|
||
"github.com/gin-gonic/gin"
|
||
"net/http/httptest"
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
// TestProfileUpdateBoundaries 对数据库读写使用 SQL Mock,不连接远程数据。
|
||
func TestProfileUpdateBoundaries(t *testing.T) {
|
||
for _, tc := range []struct {
|
||
name, body string
|
||
valid bool
|
||
}{
|
||
{"昵称修改保留头像", `{"name":"新昵称"}`, true},
|
||
{"允许保留旧头像", `{"name":"新昵称","avatar":"/uploads/avatars/old.png"}`, true},
|
||
{"空昵称拒绝", `{"name":" "}`, false},
|
||
{"他人头像拒绝", `{"name":"新昵称","avatar":"/uploads/avatars/other.png"}`, false},
|
||
} {
|
||
t.Run(tc.name, func(t *testing.T) {
|
||
mock := primaryTestDB(t)
|
||
mock.ExpectQuery(`SELECT .* FROM "user_account"`).WillReturnRows(sqlmock.NewRows([]string{"id", "identity", "name", "avatar"}).AddRow(1, "alice", "旧昵称", "/uploads/avatars/old.png"))
|
||
if tc.valid {
|
||
if strings.Contains(tc.body, "avatar") {
|
||
mock.ExpectExec(`UPDATE "user_account" SET "avatar"=.*"name"=`).WillReturnResult(sqlmock.NewResult(0, 1))
|
||
} else {
|
||
mock.ExpectExec(`UPDATE "user_account" SET "name"=`).WillReturnResult(sqlmock.NewResult(0, 1))
|
||
}
|
||
}
|
||
response := httptest.NewRecorder()
|
||
ctx, _ := gin.CreateTestContext(response)
|
||
ctx.Set("Auth", &types.JwtClaims{Client: "user_app", Identity: "alice"})
|
||
ctx.Request = httptest.NewRequest("PUT", "/auth/profile", strings.NewReader(tc.body))
|
||
ctx.Request.Header.Set("Content-Type", "application/json")
|
||
UpdateProfile(ctx)
|
||
if err := mock.ExpectationsWereMet(); err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
success := strings.Contains(response.Body.String(), `"code":0`)
|
||
if success != tc.valid {
|
||
t.Fatalf("更新状态错误: %s", response.Body.String())
|
||
}
|
||
})
|
||
}
|
||
}
|