using Agent.Core.Ollama;using Xunit;namespace Agent.Core.DesignTests;public class ChatHistoryStoreTests{ [Fact] public void SaveSession_persists_messages_and_lists_summary() { string root = CreateTempHistoryRoot(); try { var store = new ChatHistoryStore(root); var history = new ChatHistory { new ChatMessage("user", "Design test ping"), new ChatMessage("assistant", "Design test pong", Tokens: 12) }; string id = store.SaveSession("gemma4", history); Assert.True(File.Exists(Path.Combine(root, id + ".xml"))); IReadOnlyList<ChatSessionSummary> sessions = store.ListSessions(); Assert.Single(sessions); Assert.Equal("Design test ping", sessions[0].Title); Assert.Equal(2, sessions[0].MessageCount); Assert.Equal("gemma4", sessions[0].Model); } finally { TryDeleteDirectory(root); } } [Fact] public void LoadSession_restores_messages_and_updates_current_id() { string root = CreateTempHistoryRoot(); try { var store = new ChatHistoryStore(root); var history = new ChatHistory { new ChatMessage("user", "Remember this"), new ChatMessage("assistant", "Acknowledged") }; string id = store.SaveSession("gemma4", history); store.StartNewSession(); SavedChatSession? loaded = store.LoadSession(id); Assert.NotNull(loaded); Assert.Equal(id, store.CurrentSessionId); Assert.Equal(2, loaded!.Messages.Count); Assert.Equal("Remember this", loaded.Messages[0].Content); } finally { TryDeleteDirectory(root); } } [Fact] public void StartNewSession_changes_current_id_without_deleting_files() { string root = CreateTempHistoryRoot(); try { var store = new ChatHistoryStore(root); string first = store.SaveSession("gemma4", new ChatHistory { new ChatMessage("user", "one") }); store.StartNewSession(); string second = store.CurrentSessionId; Assert.NotEqual(first, second); Assert.Single(store.ListSessions()); } finally { TryDeleteDirectory(root); } } [Fact] public void SaveSession_overwrites_same_id_and_bumps_message_count() { string root = CreateTempHistoryRoot(); try { var store = new ChatHistoryStore(root); string id = store.SaveSession("gemma4", new ChatHistory { new ChatMessage("user", "first line") }); store.UseSession(id); store.SaveSession("gemma4", new ChatHistory { new ChatMessage("user", "first line"), new ChatMessage("assistant", "second line") }); SavedChatSession? loaded = store.LoadSession(id); Assert.NotNull(loaded); Assert.Equal(2, loaded!.Messages.Count); Assert.Equal(2, store.ListSessions().Single().MessageCount); } finally { TryDeleteDirectory(root); } } private static string CreateTempHistoryRoot() { string path = Path.Combine(Path.GetTempPath(), "AgentCore-DesignTests", Guid.NewGuid().ToString("N")); Directory.CreateDirectory(path); return path; } private static void TryDeleteDirectory(string path) { try { if (Directory.Exists(path)) { Directory.Delete(path, recursive: true); } } catch { // Best-effort cleanup for temp design-test folders. } }}
Documentation
Version 1 design tests
Automated checks for chat and saved history (/history, /new, XML sessions under %AppData%/AgentCore/Version 1/ChatHistory).
Quick run
# From repo root (builds + offline unit tests)
python src/Version1/DesignTests/run-design-tests.py
# With live Ollama chat (localhost:11434, model gemma4)
python src/Version1/DesignTests/run-design-tests.py --live
.\src\Version1\DesignTests\run-design-tests.ps1
.\src\Version1\DesignTests\run-design-tests.ps1 -Live
What runs
| Suite | Needs network | Covers | |-------|----------------|--------| | ChatHistoryStoreTests | No | Save, list, load, session ids | | OllamaClientHistoryTests | No | Client save/load without HTTP | | OllamaLiveTests | Yes (--live) | Real StreamReply against Ollama |
dotnet only
dotnet test src/Version1/DesignTests/AgentCore.DesignTests.csproj
dotnet test src/Version1/DesignTests/AgentCore.DesignTests.csproj --filter "Category=Integration"
Set RUN_LIVE_TESTS=1 for integration tests without the Python runner.
Console video (testers)
Manual evidence runs use the shared test manager (records Lilith.exe):
python src/TestManager/test_manager.py list
python src/TestManager/test_manager.py record v1 chat-basic --build
See src/TestManager/README.md.