Files

61 lines
2.3 KiB
C#

using WxAgent.Core;
using Xunit;
namespace WxAgent.Core.Tests;
public sealed class WechatManagementTests
{
[Fact]
public void RequireConfirmation_RejectsMissingOrWrongToken()
{
var missing = Assert.Throws<WxAgentException>(() => WechatOperationPolicy.RequireConfirmation(null, "delete session"));
var wrong = Assert.Throws<WxAgentException>(() => WechatOperationPolicy.RequireConfirmation("confirm", "delete session"));
Assert.Equal(WxAgentErrorCode.InvalidArgument, missing.Code);
Assert.Equal(WxAgentErrorCode.InvalidArgument, wrong.Code);
}
[Fact]
public void RequireConfirmation_AcceptsExactToken()
{
WechatOperationPolicy.RequireConfirmation(WechatOperationPolicy.Confirmation, "delete session");
}
[Fact]
public void ValidateNames_RequiresAtLeastOneUsableName()
{
Assert.Throws<WxAgentException>(() => WechatOperationPolicy.ValidateNames([], "members"));
Assert.Throws<WxAgentException>(() => WechatOperationPolicy.ValidateNames(["ok", ""], "members"));
Assert.Throws<WxAgentException>(() => WechatOperationPolicy.ValidateNames(["same", "same"], "members"));
WechatOperationPolicy.ValidateNames(["one", "two"], "members");
}
[Fact]
public void RequireUnique_RejectsMissingAndAmbiguousTargets()
{
Assert.Equal("one", WechatOperationPolicy.RequireUnique(new[] { "one" }, "target"));
Assert.Equal(WxAgentErrorCode.ControlNotFound,
Assert.Throws<WxAgentException>(() => WechatOperationPolicy.RequireUnique(Array.Empty<string>(), "target")).Code);
Assert.Equal(WxAgentErrorCode.ControlNotFound,
Assert.Throws<WxAgentException>(() => WechatOperationPolicy.RequireUnique(new[] { "one", "two" }, "target")).Code);
}
[Fact]
public void OperationResult_UnconfirmedIsNotSuccessAndWarnsAgainstRetry()
{
var result = WechatOperationResult.Unconfirmed("Submission");
Assert.False(result.Success);
Assert.Equal(WxAgentErrorCode.ResultUnconfirmed, result.Code);
Assert.Contains("Do not retry", result.Message);
}
[Fact]
public void OperationResult_OkHasNoErrorCode()
{
var result = WechatOperationResult.Ok("done");
Assert.True(result.Success);
Assert.Null(result.Code);
Assert.Equal("done", result.Message);
}
}