public void Test_GetMethodMetadata_UsesSerializerAndMethodOptions(Type serializerType)
        {
            var actionName      = "actionName";
            var controllerName  = "controllerName";
            var serializer      = testEnvironment.ServiceProvider.GetRequiredService(serializerType) as IJsonRpcSerializer;
            var controllerModel = new Mock <ControllerModel>(typeof(JsonRpcTestController).GetTypeInfo(), new List <object> {
            }).Object;
            var model           = new Mock <ActionModel>(typeof(JsonRpcTestController).GetMethod(nameof(JsonRpcTestController.VoidAction)), new List <object>()).Object;

            model.Controller = controllerModel;
            model.ActionName = actionName;
            model.Controller.ControllerName = controllerName;
            var options          = new JsonRpcOptions();
            var actionConvention = GetActionConvention(options);
            var methodOptions    = new JsonRpcMethodOptions()
            {
                RequestSerializer = serializerType
            };
            var result = actionConvention.GetMethodMetadata(model, methodOptions);

            result.Action.Should().BeEquivalentTo(serializer.GetJsonName(actionName));
            result.Controller.Should().BeEquivalentTo(serializer.GetJsonName(controllerName));
            result.MethodOptions.Should().NotBe(options.DefaultMethodOptions);
            result.MethodOptions.Should().Be(methodOptions);
        }
Exemplo n.º 2
0
 public ActionConvention(IOptions <JsonRpcOptions> options, IEnumerable <IJsonRpcSerializer> serializers, IMethodMatcher methodMatcher, IJsonRpcRoutes jsonRpcRoutes, ILogger <ActionConvention> log)
 {
     this.serializers     = serializers;
     this.methodMatcher   = methodMatcher;
     this.jsonRpcRoutes   = jsonRpcRoutes;
     this.log             = log;
     defaultMethodOptions = options.Value.DefaultMethodOptions;
 }
Exemplo n.º 3
0
        public void Test_JsonRpcMethodOptions_Defaults()
        {
            var options = new JsonRpcMethodOptions();

            options.Route.Value.Should().Be(JsonRpcConstants.DefaultRoute);
            options.MethodStyle.Should().Be(MethodStyle.ControllerAndAction);
            options.RequestSerializer.Should().Be <SnakeCaseJsonRpcSerializer>();
        }
Exemplo n.º 4
0
        internal MethodMetadata GetMethodMetadata(ActionModel actionModel, JsonRpcMethodOptions methodOptions)
        {
            var serializer     = Utils.GetSerializer(serializers, methodOptions.RequestSerializer);
            var controllerName = serializer.GetJsonName(actionModel.Controller.ControllerName);
            var actionName     = serializer.GetJsonName(actionModel.ActionName);
            var result         = new MethodMetadata(methodOptions, controllerName, actionName);

            log.LogTrace($"{actionModel.DisplayName}: metadata [{result}]");
            return(result);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Replace framework conventions with explicit route and action selector
        /// </summary>
        /// <param name="actionModel"></param>
        /// <param name="methodOptions"></param>
        internal void SetAttributes(ActionModel actionModel, JsonRpcMethodOptions methodOptions)
        {
            actionModel.Selectors.Clear();
            actionModel.Selectors.Add(new SelectorModel()
            {
                AttributeRouteModel = new AttributeRouteModel()
                {
                    Template = methodOptions.Route
                },

                ActionConstraints = { new JsonRpcAttribute(), new HttpMethodActionConstraint(new [] { HttpMethods.Post }) }  // TODO может, оставить?
            });
            log.LogTrace($"{actionModel.DisplayName}: applied {nameof(JsonRpcAttribute)}, route [{methodOptions.Route}]");
        }
Exemplo n.º 6
0
        public void Test_BindModelAsync_UsesParserAndBinder()
        {
            var jsonRpcMethodOptions = new JsonRpcMethodOptions();
            var methodMetadata       = new MethodMetadata(jsonRpcMethodOptions, new JsonName("test", "test"), new JsonName("test", "test"));
            var parameterMetadata    = new ParameterMetadata(new JsonName("test", "test"), typeof(object), 0, BindingStyle.Default, false);

            methodMetadata.Add(parameterMetadata);
            var name = "test";
            var bindingContextMock = MockContext(methodMetadata: methodMetadata, name: name);
            var binder             = testEnvironment.ServiceProvider.GetRequiredService <JsonRpcModelBinder>();

            binder.BindModelAsync(bindingContextMock.Object).GetAwaiter().GetResult();

            Mock.Get(testEnvironment.ServiceProvider.GetService <IParamsParser>())
            .Verify(x => x.ParseParams(It.IsAny <JToken>(), parameterMetadata), Times.Once);
            Mock.Get(testEnvironment.ServiceProvider.GetService <IParameterBinder>())
            .Verify(x => x.SetResult(bindingContextMock.Object, It.IsAny <IParseResult>(), name, It.IsAny <JsonRpcBindingContext>()), Times.Once);
        }
Exemplo n.º 7
0
        public void Test_GetRpcBindingContext_ThrowsOnNoSerializer()
        {
            var jsonRpcMethodOptions = new JsonRpcMethodOptions()
            {
                RequestSerializer = typeof(CamelCaseJsonRpcSerializer)
            };
            var methodMetadata = new MethodMetadata(jsonRpcMethodOptions, new JsonName("test", "test"), new JsonName("test", "test"));

            methodMetadata.Add(new ParameterMetadata(new JsonName("test", "test"), typeof(object), 0, BindingStyle.Default, false));
            var bindingContextMock = MockContext(methodMetadata: methodMetadata);
            var binder             = testEnvironment.ServiceProvider.GetRequiredService <JsonRpcModelBinder>();

            Action action = () => binder.GetRpcBindingContext(bindingContextMock.Object, "test");

            action.Should().Throw <InvalidOperationException>();
            bindingContextMock.VerifyGet(x => x.HttpContext);
            bindingContextMock.VerifyGet(x => x.ActionContext);
            bindingContextMock.VerifyGet(x => x.HttpContext.RequestServices);
        }
Exemplo n.º 8
0
        public void Test_GetRpcBindingContext_ReturnsValue()
        {
            var jsonRpcMethodOptions = new JsonRpcMethodOptions();
            var methodMetadata       = new MethodMetadata(jsonRpcMethodOptions, new JsonName("test", "test"), new JsonName("test", "test"));
            var parameterMetadata    = new ParameterMetadata(new JsonName("test", "test"), typeof(object), 0, BindingStyle.Default, false);

            methodMetadata.Add(parameterMetadata);
            var bindingContextMock = MockContext(methodMetadata: methodMetadata);
            var binder             = testEnvironment.ServiceProvider.GetRequiredService <JsonRpcModelBinder>();

            var result = binder.GetRpcBindingContext(bindingContextMock.Object, "test");

            bindingContextMock.VerifyGet(x => x.HttpContext);
            bindingContextMock.VerifyGet(x => x.ActionContext);
            bindingContextMock.VerifyGet(x => x.HttpContext.RequestServices);
            result.Should().NotBeNull();
            result.Call.Should().Be(Mock.Get(result.Call).Object);
            result.ParameterMetadata.Should().Be(parameterMetadata);
            result.Serializer.Should().BeOfType(jsonRpcMethodOptions.RequestSerializer);
        }
Exemplo n.º 9
0
 public MethodMetadata(JsonRpcMethodOptions methodOptions, JsonName controller, JsonName action)
 {
     MethodOptions = methodOptions;
     Controller    = controller ?? throw new ArgumentNullException(nameof(controller));
     Action        = action ?? throw new ArgumentNullException(nameof(action));
 }