Пример #1
0
        public void Should_invoke_method_on_real_instance_and_map_response_params()
        {
            // Arrange
            var routeFinder = Substitute.For <IRpcRouteFinder>();
            var instance    = Substitute.For <ISomeService>();
            var server      = new BurrowRpcServerCoordinator <ISomeService>(instance, routeFinder, "queue-connnection-string", "10");
            var request     = new RpcRequest
            {
                Id = Guid.NewGuid(),
                ResponseAddress = "Address",
                MethodName      = "Search",
                Params          = new Dictionary <string, object> {
                    { "page", (long)1 /* long value will be converted to proper int value */ }, { "query", new SomeMessage
                                                                                                  {
                                                                                                      Name = "vantheshark"
                                                                                                  } }
                }
            };
            var methodInfo = typeof(ISomeService).GetMethod("Search");

            methodMatcher.Match <ISomeService>(request)
            .Returns(methodInfo);

            var returnValue = new List <SomeMessage> {
                new SomeMessage {
                    Money = "$1"
                }, new SomeMessage {
                    Money = "$1"
                }
            };

            instance.Search(1, Arg.Is <SomeMessage>(arg => arg.Name == "vantheshark"))
            .Returns(returnValue);

            // Action
            server.Start();
            server.HandleMesage(request);

            // Assert
            tunnel.Received(1).Publish(Arg.Is <RpcResponse>(arg => arg.Exception == null &&
                                                            arg.ReturnValue == returnValue &&
                                                            arg.ChangedParams["query"] is SomeMessage &&
                                                            1.Equals(arg.ChangedParams["page"]) &&
                                                            arg.RequestId == request.Id), "Address");
        }