using NUnit.Framework;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Unity.Pipeline;
using Unity.Pipeline.Models;
namespace Unity.Pipeline.Tests.Editor.Models
{
///
/// Tests that binds handle-object keys case-INSENSITIVELY
/// (CLI-220 follow-up). Agents frequently send "instanceID"/"fileID" (capital D); a case-sensitive
/// lookup dropped those into an empty handle, which then resolved to nothing while the calling
/// command still reported success.
///
public class ObjectRefConverterTests
{
private static ObjectRef Parse(string json) => JsonConvert.DeserializeObject(json);
[Test]
public void CapitalInstanceID_BindsToInstanceId()
{
var r = Parse("{\"instanceID\": 53816}");
Assert.IsNotNull(r);
Assert.AreEqual(ObjectId.FromRaw(53816), r.InstanceId, "capital 'instanceID' should bind to InstanceId");
Assert.IsFalse(r.IsEmpty, "the handle must not be empty");
}
[Test]
public void LowercaseInstanceId_StillBinds()
{
Assert.AreEqual(ObjectId.FromRaw(1234), Parse("{\"instanceId\": 1234}").InstanceId);
}
[Test]
public void CapitalFileID_AndGuid_Bind()
{
var r = Parse("{\"guid\":\"abc123\",\"fileID\": 99}");
Assert.AreEqual("abc123", r.Guid);
Assert.AreEqual(99L, r.FileId, "capital 'fileID' should bind to FileId");
}
[Test]
public void BareInteger_IsInstanceId()
{
var r = JToken.Parse("48184").ToObject();
Assert.AreEqual(ObjectId.FromRaw(48184), r.InstanceId);
}
[Test]
public void StringHandles_Path_And_Hierarchy()
{
Assert.AreEqual("Assets/Foo.mat", Parse("\"Assets/Foo.mat\"").Path, "Assets/ string is a path");
Assert.AreEqual("/Player", Parse("\"/Player\"").HierarchyPath, "leading-slash string is a hierarchy path");
}
}
}