chore: update test

This commit is contained in:
fatelei 2026-02-19 23:48:38 +08:00
parent c241764b7d
commit 1827dc08a5
No known key found for this signature in database
GPG key ID: 2F91DA05646F4EED

View file

@ -22,7 +22,6 @@ func TestBuildMessages_CoalescesConsecutiveUserMessages(t *testing.T) {
cb := NewContextBuilder(ws) cb := NewContextBuilder(ws)
history := []providers.Message{ history := []providers.Message{
{Role: "system", Content: "sys"},
{Role: "assistant", Content: "hi"}, {Role: "assistant", Content: "hi"},
{Role: "user", Content: "first"}, {Role: "user", Content: "first"},
} }
@ -31,16 +30,28 @@ func TestBuildMessages_CoalescesConsecutiveUserMessages(t *testing.T) {
if len(msgs) < 2 { if len(msgs) < 2 {
t.Fatalf("expected at least 2 messages, got %d", len(msgs)) 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" { if msgs[0].Role != "system" {
t.Fatalf("expected first message to be system, got %s", msgs[0].Role) 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] last := msgs[len(msgs)-1]
if last.Role != "user" { if last.Role != "user" {
t.Fatalf("expected last message role=user, got %s", last.Role) t.Fatalf("expected last message role=user, got %s", last.Role)
} }
if last.Content != "first\n\nsecond" { if got, want := last.Content, "first\n\nsecond"; got != want {
t.Fatalf("expected coalesced content 'first\\n\\nsecond', got %q", last.Content) t.Fatalf("expected coalesced content %q, got %q", want, got)
} }
}) })
} }
@ -63,3 +74,39 @@ func TestBuildMessages_AppendsUserIfNoConsecutive(t *testing.T) {
} }
}) })
} }
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)
}
})
}