| package handler |
|
|
| import ( |
| "encoding/json" |
| "net/http" |
| "net/http/httptest" |
| "strings" |
| "testing" |
|
|
| "github.com/gin-gonic/gin" |
| "github.com/stretchr/testify/require" |
| ) |
|
|
| func TestDetectInterceptType_MaxTokensOneHaikuRequiresClaudeCodeClient(t *testing.T) { |
| body := []byte(`{"messages":[{"role":"user","content":[{"type":"text","text":"hello"}]}]}`) |
|
|
| notClaudeCode := detectInterceptType(body, "claude-haiku-4-5", 1, false, false) |
| require.Equal(t, InterceptTypeNone, notClaudeCode) |
|
|
| isClaudeCode := detectInterceptType(body, "claude-haiku-4-5", 1, false, true) |
| require.Equal(t, InterceptTypeMaxTokensOneHaiku, isClaudeCode) |
| } |
|
|
| func TestDetectInterceptType_SuggestionModeUnaffected(t *testing.T) { |
| body := []byte(`{ |
| "messages":[{ |
| "role":"user", |
| "content":[{"type":"text","text":"[SUGGESTION MODE:foo]"}] |
| }], |
| "system":[] |
| }`) |
|
|
| got := detectInterceptType(body, "claude-sonnet-4-5", 256, false, false) |
| require.Equal(t, InterceptTypeSuggestionMode, got) |
| } |
|
|
| func TestSendMockInterceptResponse_MaxTokensOneHaiku(t *testing.T) { |
| gin.SetMode(gin.TestMode) |
| rec := httptest.NewRecorder() |
| ctx, _ := gin.CreateTestContext(rec) |
|
|
| sendMockInterceptResponse(ctx, "claude-haiku-4-5", InterceptTypeMaxTokensOneHaiku) |
|
|
| require.Equal(t, http.StatusOK, rec.Code) |
|
|
| var response map[string]any |
| require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &response)) |
| require.Equal(t, "max_tokens", response["stop_reason"]) |
|
|
| id, ok := response["id"].(string) |
| require.True(t, ok) |
| require.True(t, strings.HasPrefix(id, "msg_bdrk_")) |
|
|
| content, ok := response["content"].([]any) |
| require.True(t, ok) |
| require.NotEmpty(t, content) |
|
|
| firstBlock, ok := content[0].(map[string]any) |
| require.True(t, ok) |
| require.Equal(t, "#", firstBlock["text"]) |
|
|
| usage, ok := response["usage"].(map[string]any) |
| require.True(t, ok) |
| require.Equal(t, float64(1), usage["output_tokens"]) |
| } |
|
|