(t *testing.T)
| 264 | } |
| 265 | |
| 266 | func TestLineageManager_DeleteMemoryWithLineage(t *testing.T) { |
| 267 | lm := NewLineageManager() |
| 268 | |
| 269 | // Create lineage |
| 270 | p1 := NewProvenance(SourceUserInput, "session-1") |
| 271 | if err := lm.TrackMemoryCreation("mem-1", p1, nil); err != nil { |
| 272 | t.Fatalf("TrackMemoryCreation failed: %v", err) |
| 273 | } |
| 274 | |
| 275 | p2 := NewProvenance(SourceUserInput, "session-1") |
| 276 | if err := lm.TrackMemoryCreation("mem-2", p2, []string{"mem-1"}); err != nil { |
| 277 | t.Fatalf("TrackMemoryCreation failed: %v", err) |
| 278 | } |
| 279 | |
| 280 | p3 := NewProvenance(SourceUserInput, "session-1") |
| 281 | if err := lm.TrackMemoryCreation("mem-3", p3, []string{"mem-2"}); err != nil { |
| 282 | t.Fatalf("TrackMemoryCreation failed: %v", err) |
| 283 | } |
| 284 | |
| 285 | ctx := context.Background() |
| 286 | |
| 287 | // Delete with cascade |
| 288 | deleted, err := lm.DeleteMemoryWithLineage(ctx, "mem-1", true) |
| 289 | if err != nil { |
| 290 | t.Fatalf("DeleteMemoryWithLineage() error = %v", err) |
| 291 | } |
| 292 | |
| 293 | // Should delete mem-1, mem-2, mem-3 |
| 294 | if len(deleted) != 3 { |
| 295 | t.Fatalf("Deleted %d memories, want 3", len(deleted)) |
| 296 | } |
| 297 | |
| 298 | expectedDeleted := map[string]bool{ |
| 299 | "mem-1": false, |
| 300 | "mem-2": false, |
| 301 | "mem-3": false, |
| 302 | } |
| 303 | |
| 304 | for _, id := range deleted { |
| 305 | if _, exists := expectedDeleted[id]; exists { |
| 306 | expectedDeleted[id] = true |
| 307 | } |
| 308 | } |
| 309 | |
| 310 | for id, found := range expectedDeleted { |
| 311 | if !found { |
| 312 | t.Errorf("Expected memory %v to be deleted", id) |
| 313 | } |
| 314 | } |
| 315 | |
| 316 | // Verify memories are removed from graph |
| 317 | if lm.graph.memoryMetadata["mem-1"] != nil { |
| 318 | t.Error("mem-1 should be removed from graph") |
| 319 | } |
| 320 | } |
| 321 | |
| 322 | func TestLineageManager_DeleteMemoryWithoutCascade(t *testing.T) { |
| 323 | lm := NewLineageManager() |
nothing calls this directly
no test coverage detected