feat:Rock刷新去UID拦截,新增绑定错误自动刷新与使用/绑定超时预警
This commit is contained in:
@@ -79,7 +79,8 @@ func TestRefreshTokenBinding_BoundMatchesExpectedUID(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRefreshTokenBinding_MarksMismatch(t *testing.T) {
|
||||
// 刷新链路只同步上游实时状态:即使本地预期 UID 与扫码 UID 不一致,也应直接标记为已绑定。
|
||||
func TestRefreshTokenBinding_IgnoresUIDMismatchAndMarksBound(t *testing.T) {
|
||||
db := newRockTestDB(t)
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
@@ -115,20 +116,27 @@ func TestRefreshTokenBinding_MarksMismatch(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("刷新绑定状态失败: %v", err)
|
||||
}
|
||||
if res.Status != model.RockStatusMismatch || !strings.Contains(res.Message, "不一致") {
|
||||
t.Fatalf("期望 mismatch 提示,实际 %+v", res)
|
||||
if res.Status != model.RockStatusBound || !res.Bound {
|
||||
t.Fatalf("UID 不一致时也应同步为 bound,实际 %+v", res)
|
||||
}
|
||||
|
||||
var saved model.RockToken
|
||||
if err := db.First(&saved, token.ID).Error; err != nil {
|
||||
t.Fatalf("读取 Token 失败: %v", err)
|
||||
}
|
||||
if saved.Status != model.RockStatusMismatch || saved.MismatchAt == nil || !strings.Contains(saved.MismatchReason, "3132710334") {
|
||||
t.Fatalf("数据库 mismatch 字段不符: %+v", saved)
|
||||
if saved.Status != model.RockStatusBound || saved.ActualRoleID != "3132710334" {
|
||||
t.Fatalf("应同步为 bound 并写入实际 UID,实际 %+v", saved)
|
||||
}
|
||||
if saved.MismatchAt != nil || saved.MismatchReason != "" {
|
||||
t.Fatalf("同步为 bound 后应清空绑定错误标记,实际 %+v", saved)
|
||||
}
|
||||
if saved.BoundAt == nil {
|
||||
t.Fatalf("bound_at 未写入")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRefreshTokenBinding_EmptyExpectedUIDKeepsStatus(t *testing.T) {
|
||||
// 本地没有预期 UID 时同样直接按上游状态落库,不再保留 using。
|
||||
func TestRefreshTokenBinding_EmptyExpectedUIDMarksBound(t *testing.T) {
|
||||
db := newRockTestDB(t)
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
@@ -160,22 +168,19 @@ func TestRefreshTokenBinding_EmptyExpectedUIDKeepsStatus(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("刷新绑定状态失败: %v", err)
|
||||
}
|
||||
if res.Status != model.RockStatusUsing {
|
||||
t.Fatalf("缺少预期 UID 时状态应保持 using,实际 %s", res.Status)
|
||||
if res.Status != model.RockStatusBound {
|
||||
t.Fatalf("缺少预期 UID 时也应同步为 bound,实际 %s", res.Status)
|
||||
}
|
||||
if !strings.Contains(res.Message, "人工核对") {
|
||||
t.Fatalf("应提示人工核对,实际 %q", res.Message)
|
||||
}
|
||||
if !res.Warning {
|
||||
t.Fatalf("缺少预期 UID 时应返回 warning=true")
|
||||
if !res.Bound {
|
||||
t.Fatalf("上游已绑定时 bound 应为 true,实际 %+v", res)
|
||||
}
|
||||
|
||||
var saved model.RockToken
|
||||
if err := db.First(&saved, token.ID).Error; err != nil {
|
||||
t.Fatalf("读取 Token 失败: %v", err)
|
||||
}
|
||||
if saved.Status != model.RockStatusUsing || saved.ActualRoleID != "3132710334" {
|
||||
t.Fatalf("只应同步角色信息,实际 %+v", saved)
|
||||
if saved.Status != model.RockStatusBound || saved.ActualRoleID != "3132710334" || saved.BoundAt == nil {
|
||||
t.Fatalf("应同步为 bound 并写入角色信息,实际 %+v", saved)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user