using ZB.MOM.WW.ScadaBridge.Commons.Entities.Audit;
using ZB.MOM.WW.ScadaBridge.Commons.Types;

namespace ZB.MOM.WW.ScadaBridge.Commons.Tests.Entities.Audit;

/// <summary>
/// Verifies the <see cref="SiteCall"/> central operational entity carries the
/// SourceNode column (additive, nullable) through init-only construction and
/// <c>with</c> expressions.
/// </summary>
public class SiteCallTests
{
    private static SiteCall MinimalRow() => new()
    {
        TrackedOperationId = TrackedOperationId.New(),
        Channel = "ApiOutbound",
        Target = "ERP.GetOrder",
        SourceSite = "site-01",
        Status = "Submitted",
        RetryCount = 0,
        CreatedAtUtc = new DateTime(2026, 5, 23, 12, 0, 0, DateTimeKind.Utc),
        UpdatedAtUtc = new DateTime(2026, 5, 23, 12, 0, 0, DateTimeKind.Utc),
        IngestedAtUtc = new DateTime(2026, 5, 23, 12, 0, 1, DateTimeKind.Utc),
    };

    [Fact]
    public void SiteCall_carries_SourceNode()
    {
        // SourceNode identifies the cluster node that emitted the cached call
        // (site node-a/node-b or central-a/central-b). Additive nullable init
        // property — defaults to null on rows ingested before the column
        // existed, and round-trips its value via `with` expressions.
        var row = MinimalRow();
        Assert.Null(row.SourceNode);

        var stamped = row with { SourceNode = "node-b" };
        Assert.Equal("node-b", stamped.SourceNode);
        Assert.Null(row.SourceNode);
    }
}
