From 1827dc08a5f7ae9b8897490b6f00298450690cca Mon Sep 17 00:00:00 2001 From: fatelei Date: Thu, 19 Feb 2026 23:48:38 +0800 Subject: [PATCH] chore: update test --- pkg/agent/context_test.go | 57 +++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/pkg/agent/context_test.go b/pkg/agent/context_test.go index 3eb054c8e..48b61c3f5 100644 --- a/pkg/agent/context_test.go +++ b/pkg/agent/context_test.go @@ -22,7 +22,6 @@ func TestBuildMessages_CoalescesConsecutiveUserMessages(t *testing.T) { cb := NewContextBuilder(ws) history := []providers.Message{ - {Role: "system", Content: "sys"}, {Role: "assistant", Content: "hi"}, {Role: "user", Content: "first"}, } @@ -31,16 +30,28 @@ func TestBuildMessages_CoalescesConsecutiveUserMessages(t *testing.T) { if len(msgs) < 2 { t.Fatalf("expected at least 2 messages, got %d", len(msgs)) } + // BuildMessages should inject a single fresh system message at the start if msgs[0].Role != "system" { t.Fatalf("expected first message to be system, got %s", msgs[0].Role) } - // ensure no consecutive user messages and last is a single coalesced user + for i := 1; i < len(msgs); i++ { + if msgs[i].Role == "system" { + t.Fatalf("unexpected system message at index %d; history should not include system messages", i) + } + } + // ensure no two consecutive messages are from user anywhere in the list + for i := 1; i < len(msgs); i++ { + if msgs[i-1].Role == "user" && msgs[i].Role == "user" { + t.Fatalf("found consecutive user messages at indices %d and %d", i-1, i) + } + } + // and the last is a single coalesced user message last := msgs[len(msgs)-1] if last.Role != "user" { t.Fatalf("expected last message role=user, got %s", last.Role) } - if last.Content != "first\n\nsecond" { - t.Fatalf("expected coalesced content 'first\\n\\nsecond', got %q", last.Content) + if got, want := last.Content, "first\n\nsecond"; got != want { + t.Fatalf("expected coalesced content %q, got %q", want, got) } }) } @@ -62,4 +73,40 @@ func TestBuildMessages_AppendsUserIfNoConsecutive(t *testing.T) { t.Fatalf("did not expect consecutive user messages") } }) -} \ No newline at end of file +} + +func TestBuildMessages_CoalescesWithEmptyLastUserMessage(t *testing.T) { + withTempWorkspace(t, func(ws string) { + cb := NewContextBuilder(ws) + history := []providers.Message{ + {Role: "assistant", Content: "hi"}, + {Role: "user", Content: ""}, + } + msgs := cb.BuildMessages(history, "", "second", nil, "cli", "chat1") + if len(msgs) < 2 { + t.Fatalf("expected at least 2 messages, got %d", len(msgs)) + } + // Only one injected system message should be at index 0 + if msgs[0].Role != "system" { + t.Fatalf("expected first message to be system, got %s", msgs[0].Role) + } + for i := 1; i < len(msgs); i++ { + if msgs[i].Role == "system" { + t.Fatalf("unexpected system message at index %d; history should not include system messages", i) + } + } + // ensure no consecutive user messages anywhere + for i := 1; i < len(msgs); i++ { + if msgs[i-1].Role == "user" && msgs[i].Role == "user" { + t.Fatalf("found consecutive user messages at indices %d and %d", i-1, i) + } + } + last := msgs[len(msgs)-1] + if last.Role != "user" { + t.Fatalf("expected last message role=user, got %s", last.Role) + } + if last.Content != "second" { + t.Fatalf("expected coalesced content 'second' when last history content is empty, got %q", last.Content) + } + }) +}