(t *testing.T)
| 605 | } |
| 606 | |
| 607 | func TestNewDynamicTool(t *testing.T) { |
| 608 | t.Parallel() |
| 609 | |
| 610 | type testArgs struct { |
| 611 | Query string `json:"query"` |
| 612 | } |
| 613 | |
| 614 | t.Run("CorrectSchema", func(t *testing.T) { |
| 615 | t.Parallel() |
| 616 | |
| 617 | tool := codersdk.NewDynamicTool( |
| 618 | "search", "search things", |
| 619 | func(_ context.Context, args testArgs, _ codersdk.DynamicToolCall) (codersdk.DynamicToolResponse, error) { |
| 620 | return codersdk.DynamicToolResponse{Content: args.Query}, nil |
| 621 | }, |
| 622 | ) |
| 623 | |
| 624 | require.Equal(t, "search", tool.Name) |
| 625 | require.Equal(t, "search things", tool.Description) |
| 626 | require.Contains(t, string(tool.InputSchema), `"query"`) |
| 627 | require.Contains(t, string(tool.InputSchema), `"string"`) |
| 628 | }) |
| 629 | |
| 630 | t.Run("HandlerReceivesArgs", func(t *testing.T) { |
| 631 | t.Parallel() |
| 632 | |
| 633 | var received testArgs |
| 634 | tool := codersdk.NewDynamicTool( |
| 635 | "search", "search things", |
| 636 | func(_ context.Context, args testArgs, _ codersdk.DynamicToolCall) (codersdk.DynamicToolResponse, error) { |
| 637 | received = args |
| 638 | return codersdk.DynamicToolResponse{Content: "ok"}, nil |
| 639 | }, |
| 640 | ) |
| 641 | |
| 642 | resp, err := tool.Handler(context.Background(), codersdk.DynamicToolCall{ |
| 643 | Args: `{"query":"hello"}`, |
| 644 | }) |
| 645 | require.NoError(t, err) |
| 646 | require.Equal(t, "ok", resp.Content) |
| 647 | require.Equal(t, "hello", received.Query) |
| 648 | }) |
| 649 | |
| 650 | t.Run("InvalidJSONArgs", func(t *testing.T) { |
| 651 | t.Parallel() |
| 652 | |
| 653 | tool := codersdk.NewDynamicTool( |
| 654 | "search", "search things", |
| 655 | func(_ context.Context, args testArgs, _ codersdk.DynamicToolCall) (codersdk.DynamicToolResponse, error) { |
| 656 | return codersdk.DynamicToolResponse{Content: "should not reach"}, nil |
| 657 | }, |
| 658 | ) |
| 659 | |
| 660 | resp, err := tool.Handler(context.Background(), codersdk.DynamicToolCall{ |
| 661 | Args: "not-json", |
| 662 | }) |
| 663 | require.NoError(t, err) |
| 664 | require.True(t, resp.IsError) |
nothing calls this directly
no test coverage detected