Files
lmxopcua/tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests/Audit/AuditActorTests.cs
Joseph Doherty bd6c0b4d3d docs: complete XML doc comments via fixdocs (2757 to 131 findings)
Add missing <returns>/<param>/<summary>/<typeparam> tags and clean up
misused inheritdoc across 481 files so the documented API surface is
complete. Documentation-only (zero code lines changed). The 131 remaining
findings are inheritdoc-style warnings deliberately left to preserve
hand-written implementation rationale (plan-decision notes, race-condition
explanations).
2026-06-03 12:34:34 -04:00

83 lines
3.0 KiB
C#

using Shouldly;
using Xunit;
using ZB.MOM.WW.OtOpcUa.Security.Audit;
namespace ZB.MOM.WW.OtOpcUa.Security.Tests.Audit;
/// <summary>
/// Unit tests for <see cref="AuditActor"/> — the static resolution helper that sources the
/// <c>Actor</c> field of a canonical <c>ZB.MOM.WW.Audit.AuditEvent</c> from the current
/// HTTP principal and falls back to a configurable value when no principal is available.
/// </summary>
public sealed class AuditActorTests
{
/// <summary>
/// <see cref="AuditActor.Resolve(IAuditActorAccessor?)"/> returns the accessor's value
/// when the accessor returns a non-null string.
/// </summary>
[Fact]
public void Resolve_returns_accessor_value_when_present()
{
var accessor = new StubAccessor("alice");
AuditActor.Resolve(accessor).ShouldBe("alice");
}
/// <summary>
/// <see cref="AuditActor.Resolve(IAuditActorAccessor?)"/> returns
/// <see cref="AuditActor.SystemFallback"/> when the accessor returns null
/// (unauthenticated / no HTTP context).
/// </summary>
[Fact]
public void Resolve_returns_system_fallback_when_accessor_returns_null()
{
var accessor = new StubAccessor(null);
AuditActor.Resolve(accessor).ShouldBe(AuditActor.SystemFallback);
}
/// <summary>
/// <see cref="AuditActor.Resolve(IAuditActorAccessor?)"/> returns
/// <see cref="AuditActor.SystemFallback"/> when the accessor reference itself is null
/// (e.g. in a background/non-HTTP context where DI did not inject the accessor).
/// </summary>
[Fact]
public void Resolve_returns_system_fallback_when_accessor_is_null()
{
AuditActor.Resolve(null).ShouldBe(AuditActor.SystemFallback);
}
/// <summary>
/// <see cref="AuditActor.Resolve(IAuditActorAccessor?,string)"/> uses the explicit
/// fallback string rather than <see cref="AuditActor.SystemFallback"/> when the accessor
/// returns null.
/// </summary>
[Fact]
public void Resolve_uses_explicit_fallback_when_accessor_returns_null()
{
var accessor = new StubAccessor(null);
AuditActor.Resolve(accessor, "scheduler").ShouldBe("scheduler");
}
/// <summary>
/// <see cref="AuditActor.Resolve(IAuditActorAccessor?,string)"/> prefers the accessor's
/// value over the explicit fallback when the accessor returns a non-null string.
/// </summary>
[Fact]
public void Resolve_prefers_accessor_value_over_explicit_fallback()
{
var accessor = new StubAccessor("bob");
AuditActor.Resolve(accessor, "scheduler").ShouldBe("bob");
}
// ── stub ──────────────────────────────────────────────────────────────────────
private sealed class StubAccessor(string? value) : IAuditActorAccessor
{
/// <inheritdoc />
public string? CurrentActor { get; } = value;
}
}