From bdb4da5cbc64b3c4677c87b70fc0b71936265b48 Mon Sep 17 00:00:00 2001 From: Haruko386 Date: Fri, 24 Jul 2026 12:07:30 +0800 Subject: [PATCH] fix: unable to get pipeline category in list-agent filter (#17335) --- internal/dao/user_canvas.go | 2 -- internal/dao/user_canvas_test.go | 57 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/internal/dao/user_canvas.go b/internal/dao/user_canvas.go index 412dae7f1d..0ef1e21f6a 100644 --- a/internal/dao/user_canvas.go +++ b/internal/dao/user_canvas.go @@ -433,8 +433,6 @@ func (dao *UserCanvasDAO) ListTags(ownerIDs []string, userID string, canvasCateg if canvasCategory != "" { query = query.Where("user_canvas.canvas_category = ?", canvasCategory) - } else { - query = query.Where("user_canvas.canvas_category = ?", "agent_canvas") } var rows []struct { diff --git a/internal/dao/user_canvas_test.go b/internal/dao/user_canvas_test.go index a670959366..36de36bab3 100644 --- a/internal/dao/user_canvas_test.go +++ b/internal/dao/user_canvas_test.go @@ -133,3 +133,60 @@ func TestUserCanvasDAOUpdateDSLNoMatch(t *testing.T) { t.Fatalf("expected original DSL to remain unchanged, got %v", path) } } + +func TestUserCanvasDAOListTagsIncludesPipelineWhenCategoryIsEmpty(t *testing.T) { + db := setupUserCanvasTestDB(t) + pushDB(t, db) + + dao := NewUserCanvasDAO() + pipelineType := "pipeline" + rows := []*entity.UserCanvas{ + { + ID: "agent-canvas", + UserID: "user-1", + Title: stringPtr("Agent Canvas"), + Permission: "me", + CanvasCategory: "agent_canvas", + Tags: "agent-tag,shared", + }, + { + ID: "pipeline-canvas", + UserID: "user-1", + Title: stringPtr("Pipeline Canvas"), + Permission: "me", + CanvasCategory: "dataflow_canvas", + CanvasType: &pipelineType, + Tags: "pipeline-tag,shared", + }, + } + for _, row := range rows { + if err := dao.Create(row); err != nil { + t.Fatalf("failed to create canvas %s: %v", row.ID, err) + } + } + + counts, err := dao.ListTags([]string{"user-1"}, "user-1", "") + if err != nil { + t.Fatalf("ListTags failed: %v", err) + } + if counts["agent-tag"] != 1 { + t.Fatalf("agent-tag count = %d, want 1", counts["agent-tag"]) + } + if counts["pipeline-tag"] != 1 { + t.Fatalf("pipeline-tag count = %d, want 1", counts["pipeline-tag"]) + } + if counts["shared"] != 2 { + t.Fatalf("shared count = %d, want 2", counts["shared"]) + } + + counts, err = dao.ListTags([]string{"user-1"}, "user-1", "agent_canvas") + if err != nil { + t.Fatalf("ListTags with category failed: %v", err) + } + if counts["pipeline-tag"] != 0 { + t.Fatalf("pipeline-tag count with agent_canvas filter = %d, want 0", counts["pipeline-tag"]) + } + if counts["agent-tag"] != 1 { + t.Fatalf("agent-tag count with agent_canvas filter = %d, want 1", counts["agent-tag"]) + } +}