using SuiteLink.Client; namespace SuiteLink.Client.Tests; public sealed class SuiteLinkValueTests { [Fact] public void Default_ValueIsNone_AndTryGetMethodsReturnFalse() { var value = default(SuiteLinkValue); Assert.Equal(SuiteLinkValueKind.None, value.Kind); Assert.False(value.TryGetBoolean(out _)); Assert.False(value.TryGetInt32(out _)); Assert.False(value.TryGetFloat32(out _)); Assert.False(value.TryGetString(out _)); } [Fact] public void FromBoolean_CreatesBooleanValue_AndTryGetBooleanSucceeds() { var value = SuiteLinkValue.FromBoolean(true); Assert.Equal(SuiteLinkValueKind.Boolean, value.Kind); Assert.True(value.TryGetBoolean(out var boolValue)); Assert.True(boolValue); Assert.False(value.TryGetInt32(out _)); Assert.False(value.TryGetFloat32(out _)); Assert.False(value.TryGetString(out _)); } [Fact] public void FromInt32_CreatesInt32Value_AndTryGetInt32Succeeds() { var value = SuiteLinkValue.FromInt32(42); Assert.Equal(SuiteLinkValueKind.Int32, value.Kind); Assert.True(value.TryGetInt32(out var intValue)); Assert.Equal(42, intValue); Assert.False(value.TryGetBoolean(out _)); Assert.False(value.TryGetFloat32(out _)); Assert.False(value.TryGetString(out _)); } [Fact] public void FromFloat32_CreatesFloat32Value_AndTryGetFloat32Succeeds() { var value = SuiteLinkValue.FromFloat32(12.5f); Assert.Equal(SuiteLinkValueKind.Float32, value.Kind); Assert.True(value.TryGetFloat32(out var floatValue)); Assert.Equal(12.5f, floatValue); Assert.False(value.TryGetBoolean(out _)); Assert.False(value.TryGetInt32(out _)); Assert.False(value.TryGetString(out _)); } [Fact] public void FromString_CreatesStringValue_AndTryGetStringSucceeds() { var value = SuiteLinkValue.FromString("tag-value"); Assert.Equal(SuiteLinkValueKind.String, value.Kind); Assert.True(value.TryGetString(out var stringValue)); Assert.Equal("tag-value", stringValue); Assert.False(value.TryGetBoolean(out _)); Assert.False(value.TryGetInt32(out _)); Assert.False(value.TryGetFloat32(out _)); } [Fact] public void FromString_NullValue_ThrowsArgumentNullException() { Assert.Throws(() => SuiteLinkValue.FromString(null!)); } }