(t *testing.T)
| 11 | ) |
| 12 | |
| 13 | func TestInMemoryStore_BasicCRUD(t *testing.T) { |
| 14 | store := NewInMemoryStore() |
| 15 | defer func() { _ = store.Close() }() |
| 16 | |
| 17 | ctx := context.Background() |
| 18 | namespace := "user:123" |
| 19 | |
| 20 | // 创建 Memory |
| 21 | mem := &LogicMemory{ |
| 22 | ID: "mem-1", |
| 23 | Namespace: namespace, |
| 24 | Scope: ScopeUser, |
| 25 | Type: "preference", |
| 26 | Key: "writing_tone", |
| 27 | Value: map[string]any{"tone": "casual"}, |
| 28 | Description: "用户偏好口语化表达", |
| 29 | Provenance: &memory.MemoryProvenance{ |
| 30 | SourceType: memory.SourceUserInput, |
| 31 | Confidence: 0.8, |
| 32 | }, |
| 33 | } |
| 34 | |
| 35 | // Save |
| 36 | err := store.Save(ctx, mem) |
| 37 | require.NoError(t, err) |
| 38 | |
| 39 | // Get |
| 40 | retrieved, err := store.Get(ctx, namespace, "writing_tone") |
| 41 | require.NoError(t, err) |
| 42 | assert.Equal(t, "mem-1", retrieved.ID) |
| 43 | assert.Equal(t, namespace, retrieved.Namespace) |
| 44 | assert.Equal(t, "preference", retrieved.Type) |
| 45 | assert.Equal(t, "用户偏好口语化表达", retrieved.Description) |
| 46 | assert.NotZero(t, retrieved.CreatedAt) |
| 47 | assert.NotZero(t, retrieved.UpdatedAt) |
| 48 | |
| 49 | // Update |
| 50 | mem.Description = "用户偏好简洁口语" |
| 51 | mem.Provenance.Confidence = 0.9 |
| 52 | err = store.Save(ctx, mem) |
| 53 | require.NoError(t, err) |
| 54 | |
| 55 | updated, err := store.Get(ctx, namespace, "writing_tone") |
| 56 | require.NoError(t, err) |
| 57 | assert.Equal(t, "用户偏好简洁口语", updated.Description) |
| 58 | assert.Equal(t, 0.9, updated.Provenance.Confidence) |
| 59 | |
| 60 | // Delete |
| 61 | err = store.Delete(ctx, namespace, "writing_tone") |
| 62 | require.NoError(t, err) |
| 63 | |
| 64 | _, err = store.Get(ctx, namespace, "writing_tone") |
| 65 | assert.ErrorIs(t, err, ErrMemoryNotFound) |
| 66 | } |
| 67 | |
| 68 | func TestInMemoryStore_List(t *testing.T) { |
| 69 | store := NewInMemoryStore() |
nothing calls this directly
no test coverage detected