package handlers import ( "bytes" "encoding/json" "net/http" "net/http/httptest" "testing" ) func TestAIExtractDeadlines_EmptyInput(t *testing.T) { h := &AIHandler{} body := `{"text":""}` r := httptest.NewRequest("POST", "/api/ai/extract-deadlines", bytes.NewBufferString(body)) r.Header.Set("Content-Type", "application/json") w := httptest.NewRecorder() h.ExtractDeadlines(w, r) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } var resp map[string]string json.NewDecoder(w.Body).Decode(&resp) if resp["error"] != "provide either a PDF file or text" { t.Errorf("unexpected error: %s", resp["error"]) } } func TestAIExtractDeadlines_InvalidJSON(t *testing.T) { h := &AIHandler{} r := httptest.NewRequest("POST", "/api/ai/extract-deadlines", bytes.NewBufferString(`{broken`)) r.Header.Set("Content-Type", "application/json") w := httptest.NewRecorder() h.ExtractDeadlines(w, r) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } } func TestAISummarizeCase_MissingCaseID(t *testing.T) { h := &AIHandler{} body := `{"case_id":""}` r := httptest.NewRequest("POST", "/api/ai/summarize-case", bytes.NewBufferString(body)) r.Header.Set("Content-Type", "application/json") w := httptest.NewRecorder() h.SummarizeCase(w, r) // Without auth context, the resolveTenant will fail first if w.Code != http.StatusUnauthorized { t.Errorf("expected 401, got %d", w.Code) } } func TestAISummarizeCase_InvalidJSON(t *testing.T) { h := &AIHandler{} r := httptest.NewRequest("POST", "/api/ai/summarize-case", bytes.NewBufferString(`not-json`)) r.Header.Set("Content-Type", "application/json") w := httptest.NewRecorder() h.SummarizeCase(w, r) // Without auth context, the resolveTenant will fail first if w.Code != http.StatusUnauthorized { t.Errorf("expected 401, got %d", w.Code) } }