diff --git a/workspace-server/internal/handlers/activity_test.go b/workspace-server/internal/handlers/activity_test.go index f6611814c..2576c1a74 100644 --- a/workspace-server/internal/handlers/activity_test.go +++ b/workspace-server/internal/handlers/activity_test.go @@ -63,6 +63,31 @@ func TestSessionSearchReturnsActivityAndMemory(t *testing.T) { } } +func TestSessionSearch_DBError(t *testing.T) { + mock := setupTestDB(t) + setupTestRedis(t) + broadcaster := newTestBroadcaster() + handler := NewActivityHandler(broadcaster) + + mock.ExpectQuery("WITH session_items AS"). + WillReturnError(context.DeadlineExceeded) + + w := httptest.NewRecorder() + c, _ := gin.CreateTestContext(w) + c.Request = httptest.NewRequest("GET", "/workspaces/ws-123/session-search?q=test", bytes.NewBufferString("")) + c.Request.Header.Set("Content-Type", "application/json") + c.Params = gin.Params{{Key: "id", Value: "ws-123"}} + + handler.SessionSearch(c) + + if w.Code != http.StatusInternalServerError { + t.Errorf("expected 500 on DB error, got %d", w.Code) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unmet sqlmock expectations: %v", err) + } +} + // ---------- Activity List source filter ---------- func TestActivityList_SourceCanvas(t *testing.T) { diff --git a/workspace-server/internal/handlers/delegation_test.go b/workspace-server/internal/handlers/delegation_test.go index fcd17eec8..cc2b4fe12 100644 --- a/workspace-server/internal/handlers/delegation_test.go +++ b/workspace-server/internal/handlers/delegation_test.go @@ -543,6 +543,33 @@ func TestDelegationRecord_RejectsInvalidUUID(t *testing.T) { } } +func TestDelegationRecord_DBInsertFails(t *testing.T) { + mock := setupTestDB(t) + setupTestRedis(t) + broadcaster := newTestBroadcaster() + wh := NewWorkspaceHandler(broadcaster, nil, "http://localhost:8080", t.TempDir()) + h := NewDelegationHandler(wh, broadcaster) + + mock.ExpectExec("INSERT INTO activity_logs"). + WillReturnError(fmt.Errorf("connection refused")) + + w := httptest.NewRecorder() + c, _ := gin.CreateTestContext(w) + c.Params = gin.Params{{Key: "id", Value: "550e8400-e29b-41d4-a716-446655440000"}} + body := `{"target_id":"550e8400-e29b-41d4-a716-446655440001","task":"hello","delegation_id":"del-xyz"}` + c.Request = httptest.NewRequest("POST", "/delegations/record", bytes.NewBufferString(body)) + c.Request.Header.Set("Content-Type", "application/json") + + h.Record(c) + + if w.Code != http.StatusInternalServerError { + t.Errorf("expected 500 on DB insert failure, got %d", w.Code) + } + if err := mock.ExpectationsWereMet(); err != nil { + t.Errorf("unmet expectations: %v", err) + } +} + func TestDelegationUpdateStatus_CompletedInsertsResultRow(t *testing.T) { mock := setupTestDB(t) setupTestRedis(t)