package repo import ( "context" "testing" ) // SessionWorkspaceOf 必须真的读得到 `sessions.workspace`。 // // 为什么值得单独立一条测试:这个查询是**列名对不上就静默返回空串**的形态 // (读不到时按设计返回 "",不报错)。空串在这里的语义是「这条会话没有工作 // 目录」,与「我查错列了」无法区分 —— 于是列名写错的表现是:功能看起来还在 // 跑,只是工作目录永远继承不到,Agent 继续落在一次性空目录里。 // // 本轮演练里我刚因为猜错表名(`mail_attachments` 不存在)而崩过一次, // 这类错误只能靠对着真实 schema 跑一次来发现。 func TestSessionWorkspaceOf(t *testing.T) { ctx := context.Background() setupTestDB(t) sid, err := CreateSession(ctx, nil, "pi", "工作目录继承", "/root/projects/demo") if err != nil { t.Fatalf("建会话: %v", err) } got := SessionWorkspaceOf(ctx, sid) if got != "/root/projects/demo" { t.Fatalf("SessionWorkspaceOf = %q,期望 /root/projects/demo —— "+ "空串说明列名或表名对不上(本函数读不到时静默返回空串)", got) } // 反向对照:另一条没有 workspace 的会话必须返回空,而不是串上一条的值。 empty, err := CreateSession(ctx, nil, "pi", "无工作目录", "") if err != nil { t.Fatalf("建第二条会话: %v", err) } if got := SessionWorkspaceOf(ctx, empty); got != "" { t.Errorf("没有 workspace 的会话应返回空串,实得 %q —— "+ "这可能是查询漏了 WHERE session_id 条件", got) } // 不存在的会话:按设计返回空串而不是 panic/报错(投递路径不能因它中断)。 if got := SessionWorkspaceOf(ctx, sid); got == "" { t.Errorf("已存在的会话不应返回空串") } }