MCPcopy Index your code
hub / github.com/coder/coder / TestWriteFile

Function TestWriteFile

coderd/x/chatd/chattool/writefile_test.go:21–452  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

19)
20
21func TestWriteFile(t *testing.T) {
22 t.Parallel()
23
24 t.Run("PlanTurnRejectsNonPlanPath", func(t *testing.T) {
25 t.Parallel()
26 ctrl := gomock.NewController(t)
27 mockConn := agentconnmock.NewMockAgentConn(ctrl)
28 planPath := "/home/coder/.coder/plans/PLAN-test-uuid.md"
29 getWorkspaceConnCalled := false
30 tool := chattool.WriteFile(chattool.WriteFileOptions{
31 GetWorkspaceConn: func(context.Context) (workspacesdk.AgentConn, error) {
32 getWorkspaceConnCalled = true
33 return mockConn, nil
34 },
35 ResolvePlanPath: func(context.Context) (string, string, error) {
36 return planPath, "/home/coder", nil
37 },
38 IsPlanTurn: true,
39 })
40
41 resp, err := tool.Run(context.Background(), fantasy.ToolCall{
42 ID: "call-1",
43 Name: "write_file",
44 Input: `{"path":"/home/coder/README.md","content":"# Plan"}`,
45 })
46 require.NoError(t, err)
47 assert.True(t, resp.IsError)
48 assert.Equal(t, "during plan turns, write_file is restricted to "+planPath, resp.Content)
49 assert.False(t, getWorkspaceConnCalled)
50 })
51
52 t.Run("PlanTurnAllowsResolvedPlanPath", func(t *testing.T) {
53 t.Parallel()
54 ctrl := gomock.NewController(t)
55 mockConn := agentconnmock.NewMockAgentConn(ctrl)
56 planPath := "/home/coder/.coder/plans/PLAN-test-uuid.md"
57 resolvePlanPathCalls := 0
58 mockConn.EXPECT().ResolvePath(gomock.Any(), planPath).Return(planPath, nil)
59 mockConn.EXPECT().
60 WriteFile(gomock.Any(), planPath, gomock.Any()).
61 DoAndReturn(func(_ context.Context, path string, reader io.Reader) error {
62 data, err := io.ReadAll(reader)
63 require.NoError(t, err)
64 require.Equal(t, planPath, path)
65 require.Equal(t, "# Plan", string(data))
66 return nil
67 })
68
69 tool := chattool.WriteFile(chattool.WriteFileOptions{
70 GetWorkspaceConn: func(context.Context) (workspacesdk.AgentConn, error) {
71 return mockConn, nil
72 },
73 ResolvePlanPath: func(context.Context) (string, string, error) {
74 resolvePlanPathCalls++
75 return planPath, "/home/coder", nil
76 },
77 IsPlanTurn: true,
78 })

Callers

nothing calls this directly

Calls 12

EXPECTMethod · 0.95
NewMockAgentConnFunction · 0.92
WriteFileFunction · 0.92
relativePlanPathMessageFunction · 0.85
RunMethod · 0.65
ResolvePathMethod · 0.65
WriteFileMethod · 0.65
NewMethod · 0.65
EqualMethod · 0.45
ReadAllMethod · 0.45

Tested by

no test coverage detected