MCPcopy Create free account
hub / github.com/coder/coder / TestFileReferencePreservation

Function TestFileReferencePreservation

coderd/x/chatd/chatprompt/chatprompt_test.go:1503–1546  ·  view source on GitHub ↗

TestFileReferencePreservation verifies file-reference parts survive the storage round-trip and convert to text for LLMs.

(t *testing.T)

Source from the content-addressed store, hash-verified

1501// TestFileReferencePreservation verifies file-reference parts
1502// survive the storage round-trip and convert to text for LLMs.
1503func TestFileReferencePreservation(t *testing.T) {
1504 t.Parallel()
1505
1506 raw, err := chatprompt.MarshalParts([]codersdk.ChatMessagePart{{
1507 Type: codersdk.ChatMessagePartTypeFileReference,
1508 FileName: "main.go",
1509 StartLine: 10,
1510 EndLine: 20,
1511 Content: "func main() {}",
1512 }})
1513 require.NoError(t, err)
1514
1515 // Storage round-trip: all fields intact.
1516 parts, err := chatprompt.ParseContent(testMsg(codersdk.ChatMessageRoleUser, raw))
1517 require.NoError(t, err)
1518 require.Len(t, parts, 1)
1519 assert.Equal(t, codersdk.ChatMessagePartTypeFileReference, parts[0].Type)
1520 assert.Equal(t, "main.go", parts[0].FileName)
1521 assert.Equal(t, 10, parts[0].StartLine)
1522 assert.Equal(t, 20, parts[0].EndLine)
1523 assert.Equal(t, "func main() {}", parts[0].Content)
1524
1525 // LLM dispatch: file-reference becomes a TextPart.
1526 prompt, err := chatprompt.ConvertMessagesWithFiles(
1527 context.Background(),
1528 []database.ChatMessage{{
1529 Role: database.ChatMessageRoleUser,
1530 Visibility: database.ChatMessageVisibilityBoth,
1531 Content: raw,
1532 }},
1533 nil,
1534 slogtest.Make(t, nil),
1535 )
1536 require.NoError(t, err)
1537 require.Len(t, prompt, 1)
1538 require.Len(t, prompt[0].Content, 1)
1539
1540 textPart, ok := fantasy.AsMessagePart[fantasy.TextPart](prompt[0].Content[0])
1541 require.True(t, ok, "file-reference should become TextPart for LLM")
1542 assert.Contains(t, textPart.Text, "[file-reference]")
1543 assert.Contains(t, textPart.Text, "main.go")
1544 assert.Contains(t, textPart.Text, "10-20")
1545 assert.Contains(t, textPart.Text, "func main() {}")
1546}
1547
1548// TestAssistantWriteRoundTrip verifies the Stage 4 write path:
1549// fantasy.Content (with ProviderMetadata) → PartFromContent →

Callers

nothing calls this directly

Calls 7

MarshalPartsFunction · 0.92
ParseContentFunction · 0.92
ConvertMessagesWithFilesFunction · 0.92
testMsgFunction · 0.85
LenMethod · 0.45
EqualMethod · 0.45
ContainsMethod · 0.45

Tested by

no test coverage detected