Files
ragflow/internal/service/memory_message_test.go

31 lines
814 B
Go
Raw Normal View History

feat: Implement API of ragflow server in Go (#15256) ## Summary - Implemented the Go API endpoint for Memory message forgetting: - `DELETE /api/v1/messages/{memory_id}:{message_id}` - Added route registration for the Memory message DELETE endpoint only. - Added request path validation for `memory_id:message_id`. - Added service logic to mark a message as forgotten by setting `forget_at`. - Preserved Python-compatible response behavior: - Success returns `code: 0`, `message: true`, `data: null`. - Added focused unit tests for message path parsing and invalid message ID handling. - Fixed Linux cgo linker config to use the installed shared PCRE2 library so Go tests/builds can run in this environment. ## Related Issue Closes: #15240 ## Change Type - [x] Feature - [x] Test - [x] Build / CI compatibility ## Implemented API - `DELETE /api/v1/messages/{memory_id}:{message_id}` ## Real Behavior Proof Validated with targeted Go tests: ```bash /tmp/go1.25.0/bin/go test ./internal/handler ./internal/router ``` Result: ```text ok ragflow/internal/handler ? ragflow/internal/router [no test files] ``` Validated server entrypoint build: ```bash /tmp/go1.25.0/bin/go build -o /tmp/ragflow-server-main ./cmd/server_main.go ``` Result: ```text build succeeded ``` Validated patch formatting: ```bash git diff --check ``` Result: ```text no whitespace errors ``` ## Checklist - [x] Implemented only `DELETE /api/v1/messages/{memory_id}:{message_id}`. - [x] Did not implement unrelated Memory message APIs. - [x] Added route registration. - [x] Added handler validation. - [x] Added service-level memory access check. - [x] Added tests. - [x] Ran targeted Go tests. - [x] Ran server build validation. - [x] Ran `git diff --check`.
2026-06-10 20:27:35 +07:00
package service
import (
"context"
"errors"
"fmt"
"testing"
enginetypes "ragflow/internal/engine/types"
)
func TestIsMessageDocumentNotFound(t *testing.T) {
if !isMessageDocumentNotFound(fmt.Errorf("wrapped: %w", enginetypes.ErrDocumentNotFound)) {
t.Fatal("expected wrapped document-not-found error to be recognized")
}
if isMessageDocumentNotFound(errors.New("index does not exist")) {
t.Fatal("expected unrelated backend error to remain a server error")
}
}
func TestRequireMemoryAccessReturnsCanceledContext(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
cancel()
err := ctx.Err()
if _, gotErr := NewMemoryService().requireMemoryAccess(ctx, "user-1", "memory-1"); !errors.Is(gotErr, err) {
t.Fatalf("requireMemoryAccess error = %v, want %v", gotErr, err)
}
}