Files
suitelinkclient/tests/SuiteLink.Client.IntegrationTests/TagRoundTripTests.cs
2026-03-16 16:46:32 -04:00

110 lines
3.0 KiB
C#

namespace SuiteLink.Client.IntegrationTests;
public sealed class TagRoundTripTests
{
[Fact]
public async Task BooleanTag_RoundTrip_WhenConfigured()
{
if (!TryGetTagSettings(out var settings, out var tagName, "bool"))
{
return;
}
await RunRoundTripAsync(
settings,
tagName,
SuiteLinkValue.FromBoolean(true),
value => value.TryGetBoolean(out _));
}
[Fact]
public async Task IntegerTag_RoundTrip_WhenConfigured()
{
if (!TryGetTagSettings(out var settings, out var tagName, "int"))
{
return;
}
await RunRoundTripAsync(
settings,
tagName,
SuiteLinkValue.FromInt32(42),
value => value.TryGetInt32(out _));
}
[Fact]
public async Task FloatTag_RoundTrip_WhenConfigured()
{
if (!TryGetTagSettings(out var settings, out var tagName, "float"))
{
return;
}
await RunRoundTripAsync(
settings,
tagName,
SuiteLinkValue.FromFloat32(12.25f),
value => value.TryGetFloat32(out _));
}
[Fact]
public async Task StringTag_RoundTrip_WhenConfigured()
{
if (!TryGetTagSettings(out var settings, out var tagName, "string"))
{
return;
}
await RunRoundTripAsync(
settings,
tagName,
SuiteLinkValue.FromString("integration-test"),
value => value.TryGetString(out _));
}
private static bool TryGetTagSettings(
out IntegrationSettings settings,
out string tagName,
string type)
{
settings = null!;
tagName = string.Empty;
if (!IntegrationSettings.TryLoad(out settings, out _))
{
return false;
}
tagName = type switch
{
"bool" => settings.BooleanTag ?? string.Empty,
"int" => settings.IntegerTag ?? string.Empty,
"float" => settings.FloatTag ?? string.Empty,
"string" => settings.StringTag ?? string.Empty,
_ => string.Empty
};
return !string.IsNullOrWhiteSpace(tagName);
}
private static async Task RunRoundTripAsync(
IntegrationSettings settings,
string tagName,
SuiteLinkValue writeValue,
Func<SuiteLinkValue, bool> typeCheck)
{
await using var client = new SuiteLinkClient();
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(20));
await client.ConnectAsync(settings.Connection, cts.Token);
var readBefore = await client.ReadAsync(tagName, TimeSpan.FromSeconds(10), cts.Token);
Assert.True(typeCheck(readBefore.Value));
await client.WriteAsync(tagName, writeValue, cts.Token);
var readAfter = await client.ReadAsync(tagName, TimeSpan.FromSeconds(10), cts.Token);
Assert.True(typeCheck(readAfter.Value));
}
}