|
@@ -137,8 +137,9 @@ func TestJwtAuthMiddleware_Handle(t *testing.T) {
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
|
require.NoError(t, err)
|
|
require.NoError(t, err)
|
|
|
- assert.Equal(t, 401, body.Code)
|
|
|
|
|
- assert.Equal(t, "未登录", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "未登录", body.ErrorMessage)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
t.Run("no Bearer prefix", func(t *testing.T) {
|
|
t.Run("no Bearer prefix", func(t *testing.T) {
|
|
@@ -154,8 +155,9 @@ func TestJwtAuthMiddleware_Handle(t *testing.T) {
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
|
require.NoError(t, err)
|
|
require.NoError(t, err)
|
|
|
- assert.Equal(t, 401, body.Code)
|
|
|
|
|
- assert.Equal(t, "token格式错误", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "token格式错误", body.ErrorMessage)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
t.Run("invalid token", func(t *testing.T) {
|
|
t.Run("invalid token", func(t *testing.T) {
|
|
@@ -171,8 +173,9 @@ func TestJwtAuthMiddleware_Handle(t *testing.T) {
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
|
require.NoError(t, err)
|
|
require.NoError(t, err)
|
|
|
- assert.Equal(t, 401, body.Code)
|
|
|
|
|
- assert.Equal(t, "token无效或已过期", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "token无效或已过期", body.ErrorMessage)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
t.Run("wrong secret", func(t *testing.T) {
|
|
t.Run("wrong secret", func(t *testing.T) {
|
|
@@ -192,8 +195,9 @@ func TestJwtAuthMiddleware_Handle(t *testing.T) {
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
|
require.NoError(t, err)
|
|
require.NoError(t, err)
|
|
|
- assert.Equal(t, 401, body.Code)
|
|
|
|
|
- assert.Equal(t, "token无效或已过期", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "token无效或已过期", body.ErrorMessage)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
t.Run("expired token", func(t *testing.T) {
|
|
t.Run("expired token", func(t *testing.T) {
|
|
@@ -213,8 +217,9 @@ func TestJwtAuthMiddleware_Handle(t *testing.T) {
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
|
require.NoError(t, err)
|
|
require.NoError(t, err)
|
|
|
- assert.Equal(t, 401, body.Code)
|
|
|
|
|
- assert.Equal(t, "token无效或已过期", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "token无效或已过期", body.ErrorMessage)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
// TC-0264: refresh token 不应被中间件接受
|
|
// TC-0264: refresh token 不应被中间件接受
|
|
@@ -235,8 +240,9 @@ func TestJwtAuthMiddleware_Handle(t *testing.T) {
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
err := json.Unmarshal(rr.Body.Bytes(), &body)
|
|
|
require.NoError(t, err)
|
|
require.NoError(t, err)
|
|
|
- assert.Equal(t, 401, body.Code)
|
|
|
|
|
- assert.Equal(t, "token无效或类型错误", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "token无效或类型错误", body.ErrorMessage)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
t.Run("frozen user rejected", func(t *testing.T) {
|
|
t.Run("frozen user rejected", func(t *testing.T) {
|
|
@@ -284,8 +290,9 @@ func TestJwtAuthMiddleware_Handle(t *testing.T) {
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
err = json.Unmarshal(rr.Body.Bytes(), &body)
|
|
err = json.Unmarshal(rr.Body.Bytes(), &body)
|
|
|
require.NoError(t, err)
|
|
require.NoError(t, err)
|
|
|
- assert.Equal(t, 403, body.Code)
|
|
|
|
|
- assert.Equal(t, "账号已被冻结", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 403, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "账号已被冻结", body.ErrorMessage)
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -405,9 +412,10 @@ func TestJwtAuthMiddleware_TokenVersionCheckedBeforeProductStatus(t *testing.T)
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
|
|
|
|
|
|
- assert.Equal(t, 401, body.Code,
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode,
|
|
|
"L-B:TokenVersion 失配必须先于产品禁用被识别(返回 401 而非 403)")
|
|
"L-B:TokenVersion 失配必须先于产品禁用被识别(返回 401 而非 403)")
|
|
|
- assert.Equal(t, "登录状态已失效,请重新登录", body.Msg,
|
|
|
|
|
|
|
+ assert.Equal(t, "登录状态已失效,请重新登录", body.ErrorMessage,
|
|
|
"L-B:文案必须是'登录状态已失效'而不是'该产品已被禁用',否则用户会被无关信息误导")
|
|
"L-B:文案必须是'登录状态已失效'而不是'该产品已被禁用',否则用户会被无关信息误导")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -471,8 +479,9 @@ func TestJwtAuthMiddleware_ProductDisabledAfterVersionOk(t *testing.T) {
|
|
|
|
|
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
|
- assert.Equal(t, 403, body.Code)
|
|
|
|
|
- assert.Equal(t, "该产品已被禁用", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 403, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "该产品已被禁用", body.ErrorMessage)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// --- 鉴权优先级完整矩阵(-B 延伸,TC-0754 ~ TC-0758)---
|
|
// --- 鉴权优先级完整矩阵(-B 延伸,TC-0754 ~ TC-0758)---
|
|
@@ -513,9 +522,10 @@ func TestJwtAuthMiddleware_UserDeletedBeatsTokenVersion(t *testing.T) {
|
|
|
|
|
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
|
- assert.Equal(t, 401, body.Code,
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 401, body.ErrorCode,
|
|
|
"L-B 矩阵: Username empty 必须在 TokenVersion 之前裁决")
|
|
"L-B 矩阵: Username empty 必须在 TokenVersion 之前裁决")
|
|
|
- assert.Equal(t, "用户不存在或已被删除", body.Msg,
|
|
|
|
|
|
|
+ assert.Equal(t, "用户不存在或已被删除", body.ErrorMessage,
|
|
|
"L-B 矩阵: 用户被删除时文案不可退化成 '登录已失效',否则泄漏软删除语义")
|
|
"L-B 矩阵: 用户被删除时文案不可退化成 '登录已失效',否则泄漏软删除语义")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -572,9 +582,10 @@ func TestJwtAuthMiddleware_FrozenBeatsEverything(t *testing.T) {
|
|
|
|
|
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
|
- assert.Equal(t, 403, body.Code,
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 403, body.ErrorCode,
|
|
|
"L-B 矩阵: 账号冻结(403) 胜出, 而非 TokenVersion(401) 或 ProductStatus(403/禁用)")
|
|
"L-B 矩阵: 账号冻结(403) 胜出, 而非 TokenVersion(401) 或 ProductStatus(403/禁用)")
|
|
|
- assert.Equal(t, "账号已被冻结", body.Msg,
|
|
|
|
|
|
|
+ assert.Equal(t, "账号已被冻结", body.ErrorMessage,
|
|
|
"L-B 矩阵: 冻结文案必须先于 '登录已失效'/'产品禁用' 返回给客户端")
|
|
"L-B 矩阵: 冻结文案必须先于 '登录已失效'/'产品禁用' 返回给客户端")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -623,8 +634,9 @@ func TestJwtAuthMiddleware_NonMemberRejected(t *testing.T) {
|
|
|
|
|
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
|
- assert.Equal(t, 403, body.Code)
|
|
|
|
|
- assert.Equal(t, "您已不是该产品的有效成员", body.Msg,
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 403, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "您已不是该产品的有效成员", body.ErrorMessage,
|
|
|
"L-B 矩阵: MemberType 空 + 非超管 + 产品启用 必须精确命中'不是有效成员'文案")
|
|
"L-B 矩阵: MemberType 空 + 非超管 + 产品启用 必须精确命中'不是有效成员'文案")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -712,8 +724,9 @@ func TestJwtAuthMiddleware_FrozenBeatsTokenVersionNoProduct(t *testing.T) {
|
|
|
|
|
|
|
|
var body response.Body
|
|
var body response.Body
|
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), &body))
|
|
|
- assert.Equal(t, 403, body.Code)
|
|
|
|
|
- assert.Equal(t, "账号已被冻结", body.Msg)
|
|
|
|
|
|
|
+ assert.False(t, body.Success)
|
|
|
|
|
+ assert.Equal(t, 403, body.ErrorCode)
|
|
|
|
|
+ assert.Equal(t, "账号已被冻结", body.ErrorMessage)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 覆盖目标:ParseWithHMAC 上移到 middleware 层作为唯一入口。
|
|
// 覆盖目标:ParseWithHMAC 上移到 middleware 层作为唯一入口。
|