You've already forked agentic-coding-workflow
feat(project): add workspace_id to issue/requirement with tri-state update
This commit is contained in:
@@ -114,3 +114,72 @@ func TestIssueService_Update_BlockedWhenProjectArchived(t *testing.T) {
|
||||
require.True(t, ok)
|
||||
require.Equal(t, errs.CodeProjectArchived, ae.Code)
|
||||
}
|
||||
|
||||
func TestIssueService_Create_WithWorkspaceID(t *testing.T) {
|
||||
repo := newFakeRepo()
|
||||
owner := uuid.New()
|
||||
seedProject(t, repo, owner)
|
||||
issueSvc, _, spy := newIssueSvc(repo)
|
||||
caller := Caller{UserID: owner}
|
||||
|
||||
wsID := uuid.New()
|
||||
out, err := issueSvc.Create(context.Background(), caller, "demo", CreateIssueInput{
|
||||
Title: "I", WorkspaceID: &wsID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, out.WorkspaceID)
|
||||
require.Equal(t, wsID, *out.WorkspaceID)
|
||||
|
||||
// 再 Get 一次确认持久化
|
||||
got, err := issueSvc.Get(context.Background(), caller, "demo", out.Number)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, got.WorkspaceID)
|
||||
require.Equal(t, wsID, *got.WorkspaceID)
|
||||
|
||||
// audit metadata 包含 workspace_id
|
||||
require.NotEmpty(t, spy.entries)
|
||||
last := spy.entries[len(spy.entries)-1]
|
||||
require.Equal(t, "issue.create", last.Action)
|
||||
require.Equal(t, wsID.String(), last.Metadata["workspace_id"])
|
||||
}
|
||||
|
||||
func TestIssueService_Update_WorkspaceID_TriState(t *testing.T) {
|
||||
repo := newFakeRepo()
|
||||
owner := uuid.New()
|
||||
seedProject(t, repo, owner)
|
||||
issueSvc, _, _ := newIssueSvc(repo)
|
||||
caller := Caller{UserID: owner}
|
||||
|
||||
wsA := uuid.New()
|
||||
i, err := issueSvc.Create(context.Background(), caller, "demo", CreateIssueInput{
|
||||
Title: "I", WorkspaceID: &wsA,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, i.WorkspaceID)
|
||||
require.Equal(t, wsA, *i.WorkspaceID)
|
||||
|
||||
// 1) nil → 不变(用 Title 强制 changed 非空,走持久化路径,验证 nextWS 不被错误清空)
|
||||
newTitle := "I-renamed"
|
||||
out, err := issueSvc.Update(context.Background(), caller, "demo", i.Number, UpdateIssueInput{Title: &newTitle})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, newTitle, out.Title)
|
||||
require.NotNil(t, out.WorkspaceID)
|
||||
require.Equal(t, wsA, *out.WorkspaceID)
|
||||
|
||||
// 2) &id(非 Nil)→ 关联到新 workspace
|
||||
wsB := uuid.New()
|
||||
out, err = issueSvc.Update(context.Background(), caller, "demo", i.Number, UpdateIssueInput{
|
||||
WorkspaceID: &wsB,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, out.WorkspaceID)
|
||||
require.Equal(t, wsB, *out.WorkspaceID)
|
||||
|
||||
// 3) &uuid.Nil → 显式解绑
|
||||
nilUUID := uuid.Nil
|
||||
out, err = issueSvc.Update(context.Background(), caller, "demo", i.Number, UpdateIssueInput{
|
||||
WorkspaceID: &nilUUID,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, out.WorkspaceID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user