using NATS.Server.Protocol;

namespace NATS.Server.Tests;

public class ClientKindProtocolRoutingTests
{
    [Theory]
    [InlineData(ClientKind.Client, "RS+", false)]
    [InlineData(ClientKind.Router, "RS+", true)]
    [InlineData(ClientKind.Client, "RS-", false)]
    [InlineData(ClientKind.Router, "RS-", true)]
    [InlineData(ClientKind.Client, "RMSG", false)]
    [InlineData(ClientKind.Router, "RMSG", true)]
    [InlineData(ClientKind.Client, "A+", false)]
    [InlineData(ClientKind.Gateway, "A+", true)]
    [InlineData(ClientKind.Client, "A-", false)]
    [InlineData(ClientKind.Gateway, "A-", true)]
    [InlineData(ClientKind.Client, "LS+", false)]
    [InlineData(ClientKind.Leaf, "LS+", true)]
    [InlineData(ClientKind.Client, "LS-", false)]
    [InlineData(ClientKind.Leaf, "LS-", true)]
    [InlineData(ClientKind.Client, "LMSG", false)]
    [InlineData(ClientKind.Leaf, "LMSG", true)]
    public void Client_kind_protocol_matrix_enforces_inter_server_commands(ClientKind kind, string op, bool expected)
    {
        var matrix = new ClientCommandMatrix();
        matrix.IsAllowed(kind, op).ShouldBe(expected);
    }
}
