using MxGateway.Contracts.Proto; using MxGateway.Server.Security.Authorization; namespace MxGateway.Tests.Security.Authorization; public sealed class GatewayGrpcScopeResolverTests { [Theory] [InlineData(typeof(OpenSessionRequest), GatewayScopes.SessionOpen)] [InlineData(typeof(CloseSessionRequest), GatewayScopes.SessionClose)] [InlineData(typeof(StreamEventsRequest), GatewayScopes.EventsRead)] public void ResolveRequiredScope_KnownRpcRequest_ReturnsExpectedScope( Type requestType, string expectedScope) { GatewayGrpcScopeResolver resolver = new(); object request = Activator.CreateInstance(requestType)!; string scope = resolver.ResolveRequiredScope(request); Assert.Equal(expectedScope, scope); } [Theory] [InlineData(MxCommandKind.Register, GatewayScopes.InvokeRead)] [InlineData(MxCommandKind.AddItem, GatewayScopes.InvokeRead)] [InlineData(MxCommandKind.Advise, GatewayScopes.InvokeRead)] [InlineData(MxCommandKind.Write, GatewayScopes.InvokeWrite)] [InlineData(MxCommandKind.Write2, GatewayScopes.InvokeWrite)] [InlineData(MxCommandKind.WriteSecured, GatewayScopes.InvokeSecure)] [InlineData(MxCommandKind.WriteSecured2, GatewayScopes.InvokeSecure)] [InlineData(MxCommandKind.AuthenticateUser, GatewayScopes.InvokeSecure)] [InlineData(MxCommandKind.ArchestraUserToId, GatewayScopes.MetadataRead)] [InlineData(MxCommandKind.GetSessionState, GatewayScopes.MetadataRead)] [InlineData(MxCommandKind.GetWorkerInfo, GatewayScopes.MetadataRead)] [InlineData(MxCommandKind.DrainEvents, GatewayScopes.EventsRead)] [InlineData(MxCommandKind.ShutdownWorker, GatewayScopes.Admin)] public void ResolveRequiredScope_InvokeCommand_ReturnsExpectedScope( MxCommandKind commandKind, string expectedScope) { GatewayGrpcScopeResolver resolver = new(); string scope = resolver.ResolveRequiredScope(new MxCommandRequest { Command = new MxCommand { Kind = commandKind } }); Assert.Equal(expectedScope, scope); } }