UpdateWorkingContextCommandTests.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using NUnit.Framework;
  2. using LLM.Editor.Commands;
  3. using LLM.Editor.Data;
  4. using LLM.Editor.Core;
  5. using Newtonsoft.Json.Linq;
  6. using System.Collections.Generic;
  7. namespace LLM.Editor.Tests.Unit
  8. {
  9. [TestFixture]
  10. public class UpdateWorkingContextCommandTests
  11. {
  12. private CommandContext _context;
  13. [SetUp]
  14. public void SetUp()
  15. {
  16. _context = new CommandContext();
  17. // Start a session to ensure file operations in SessionManager work correctly.
  18. SessionManager.StartNewSession();
  19. // Ensure a clean slate for each test
  20. SessionManager.SaveWorkingContext(new JObject());
  21. }
  22. [TearDown]
  23. public void TearDown()
  24. {
  25. // Clean up session state after tests
  26. SessionManager.EndSession();
  27. }
  28. [Test]
  29. public void Execute_WithUpdates_MergesDataIntoWorkingContext()
  30. {
  31. // Arrange
  32. var initialContext = new JObject { ["existingKey"] = "existingValue" };
  33. SessionManager.SaveWorkingContext(initialContext);
  34. var jsonParams = @"{
  35. ""updates"": {
  36. ""newKey"": ""newValue"",
  37. ""existingKey"": ""updatedValue""
  38. }
  39. }";
  40. var command = new UpdateWorkingContextCommand(jsonParams);
  41. // Act
  42. var outcome = command.Execute(_context);
  43. // Assert
  44. var finalContext = SessionManager.LoadWorkingContext();
  45. Assert.AreEqual(CommandOutcome.Success, outcome);
  46. Assert.AreEqual("newValue", (string)finalContext["newKey"]);
  47. Assert.AreEqual("updatedValue", (string)finalContext["existingKey"]);
  48. }
  49. [Test]
  50. public void Execute_WithPlanUpdate_PopulatesRuntimeContextPlan()
  51. {
  52. // Arrange
  53. var jsonParams = @"{
  54. ""updates"": {
  55. ""plan"": [""Step 1"", ""Step 2""]
  56. }
  57. }";
  58. var command = new UpdateWorkingContextCommand(jsonParams);
  59. // Act
  60. var outcome = command.Execute(_context);
  61. // Assert
  62. Assert.AreEqual(CommandOutcome.Success, outcome);
  63. Assert.IsNotNull(_context.Plan);
  64. Assert.AreEqual(2, _context.Plan.Count);
  65. Assert.AreEqual("Step 1", _context.Plan[0]);
  66. }
  67. [Test]
  68. public void Execute_WithKeysToRemove_RemovesDataFromWorkingContext()
  69. {
  70. // Arrange
  71. var initialContext = new JObject { ["key1"] = "value1", ["key2"] = "value2" };
  72. SessionManager.SaveWorkingContext(initialContext);
  73. const string jsonParams = @"{
  74. ""keysToRemove"": [""key1""]
  75. }";
  76. var command = new UpdateWorkingContextCommand(jsonParams);
  77. // Act
  78. var outcome = command.Execute(_context);
  79. // Assert
  80. var finalContext = SessionManager.LoadWorkingContext();
  81. Assert.AreEqual(CommandOutcome.Success, outcome);
  82. Assert.IsFalse(finalContext.ContainsKey("key1"));
  83. Assert.IsTrue(finalContext.ContainsKey("key2"));
  84. }
  85. [Test]
  86. public void Execute_WithClearAll_WipesWorkingContext()
  87. {
  88. // Arrange
  89. var initialContext = new JObject { ["key1"] = "value1" };
  90. SessionManager.SaveWorkingContext(initialContext);
  91. _context.Plan = new List<string> { "an old plan" };
  92. var jsonParams = @"{ ""clearAll"": true }";
  93. var command = new UpdateWorkingContextCommand(jsonParams);
  94. // Act
  95. var outcome = command.Execute(_context);
  96. // Assert
  97. var finalContext = SessionManager.LoadWorkingContext();
  98. Assert.AreEqual(CommandOutcome.Success, outcome);
  99. Assert.AreEqual(0, finalContext.Count);
  100. Assert.IsNull(_context.Plan, "Runtime context plan should also be cleared.");
  101. }
  102. }
  103. }