CreateAssetCommandTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using NUnit.Framework;
  2. using UnityEngine;
  3. using UnityEditor;
  4. using System.IO;
  5. using LLM.Editor.Commands;
  6. using LLM.Editor.Data;
  7. using LLM.Editor.Helper;
  8. namespace LLM.Editor.Tests.Unit
  9. {
  10. [TestFixture]
  11. public class CreateAssetCommandTests
  12. {
  13. private static string TestFolderName => TestConstants.TestPath;
  14. private CommandContext _context;
  15. [SetUp]
  16. public void SetUp()
  17. {
  18. _context = new CommandContext();
  19. // Create a temporary folder for test assets
  20. Directory.CreateDirectory(Path.Combine(Application.dataPath, TestFolderName));
  21. AssetDatabase.Refresh();
  22. }
  23. [TearDown]
  24. public void TearDown()
  25. {
  26. // Clean up the temporary folder and its meta file
  27. var testFolderPath = Path.Combine(Application.dataPath, TestFolderName);
  28. if (!Directory.Exists(testFolderPath)) return;
  29. Directory.Delete(testFolderPath, true);
  30. File.Delete(testFolderPath + ".meta");
  31. AssetDatabase.Refresh();
  32. }
  33. private static CreateAssetCommand CreateCommand(AssetType type, string name, string logicalName, string content = "")
  34. {
  35. var parameters = new CreateAssetParams
  36. {
  37. assetType = type,
  38. assetName = name,
  39. logicalName = logicalName,
  40. path = $"Assets/{TestFolderName}",
  41. content = content
  42. };
  43. return new CreateAssetCommand(parameters.ToJson());
  44. }
  45. [Test]
  46. public void Execute_CreatesScriptAsset_Successfully()
  47. {
  48. // Arrange
  49. var command = CreateCommand(AssetType.Script, "MyTestScript", "script_1");
  50. var expectedPath = $"Assets/{TestFolderName}/MyTestScript.cs";
  51. // Act
  52. var outcome = command.Execute(_context);
  53. // Assert
  54. Assert.AreEqual(CommandOutcome.Success, outcome);
  55. Assert.IsTrue(File.Exists(expectedPath));
  56. Assert.AreEqual("script_1", (string)_context.CurrentSubject);
  57. Assert.IsTrue(_context.IdentifierMap.ContainsKey("script_1"));
  58. Assert.IsNotEmpty(_context.IdentifierMap["script_1"]); // Check that a GUID was assigned
  59. }
  60. [Test]
  61. public void Execute_CreatesMaterialAsset_Successfully()
  62. {
  63. // Arrange
  64. var command = CreateCommand(AssetType.Material, "MyTestMaterial", "mat_1");
  65. var expectedPath = $"Assets/{TestFolderName}/MyTestMaterial.mat";
  66. // Act
  67. var outcome = command.Execute(_context);
  68. // Assert
  69. Assert.AreEqual(CommandOutcome.Success, outcome);
  70. Assert.IsTrue(File.Exists(expectedPath));
  71. Assert.IsNotNull(AssetDatabase.LoadAssetAtPath<Material>(expectedPath));
  72. Assert.IsTrue(_context.IdentifierMap.ContainsKey("mat_1"));
  73. }
  74. [Test]
  75. public void Execute_CreatesFolderAsset_Successfully()
  76. {
  77. // Arrange
  78. var command = CreateCommand(AssetType.Folder, "MySubFolder", "folder_1");
  79. var expectedPath = $"Assets/{TestFolderName}/MySubFolder";
  80. // Act
  81. var outcome = command.Execute(_context);
  82. // Assert
  83. Assert.AreEqual(CommandOutcome.Success, outcome);
  84. Assert.IsTrue(Directory.Exists(expectedPath));
  85. Assert.IsTrue(_context.IdentifierMap.ContainsKey("folder_1"));
  86. }
  87. [Test]
  88. public void Execute_CreatesEmptyPrefab_Successfully()
  89. {
  90. // Arrange
  91. var command = CreateCommand(AssetType.Prefab, "MyTestPrefab", "prefab_1");
  92. var expectedPath = $"Assets/{TestFolderName}/MyTestPrefab.prefab";
  93. // Act
  94. var outcome = command.Execute(_context);
  95. // Assert
  96. Assert.AreEqual(CommandOutcome.Success, outcome);
  97. Assert.IsTrue(File.Exists(expectedPath));
  98. Assert.IsNotNull(AssetDatabase.LoadAssetAtPath<GameObject>(expectedPath));
  99. Assert.IsTrue(_context.IdentifierMap.ContainsKey("prefab_1"));
  100. }
  101. [Test]
  102. public void Execute_WithMissingAssetName_ReturnsError()
  103. {
  104. // Arrange
  105. var parameters = new CreateAssetParams { assetType = AssetType.Script, assetName = "" };
  106. var command = new CreateAssetCommand(parameters.ToJson());
  107. // Act
  108. var outcome = command.Execute(_context);
  109. // Assert
  110. Assert.AreEqual(CommandOutcome.Error, outcome);
  111. Assert.IsNotNull(_context.ErrorMessage);
  112. Assert.IsTrue(_context.ErrorMessage.Contains("assetName is required"));
  113. }
  114. }
  115. }