public async Task TestInvokeMethodWithResponsePayload() { var identity = Mock.Of <IIdentity>(i => i.Id == "edgedevice/module1"); ActionExecutingContext actionExecutingContext = this.GetActionExecutingContextMock(identity); string responsePayload = "{ \"resp1\" : \"respvalue1\" }"; var directMethodResponse = new DirectMethodResponse(Guid.NewGuid().ToString(), Encoding.UTF8.GetBytes(responsePayload), 200); var edgeHub = new Mock <IEdgeHub>(); edgeHub.Setup(e => e.InvokeMethodAsync(It.Is <string>(i => i == identity.Id), It.IsAny <DirectMethodRequest>())) .ReturnsAsync(directMethodResponse); var validator = new Mock <IValidator <MethodRequest> >(); validator.Setup(v => v.Validate(It.IsAny <MethodRequest>())); var testController = new TwinsController(Task.FromResult(edgeHub.Object), validator.Object); testController.OnActionExecuting(actionExecutingContext); string toDeviceId = "device1"; string command = "showdown"; string payload = "{ \"prop1\" : \"value1\" }"; var methodRequest = new MethodRequest(command, new JRaw(payload)); IActionResult actionResult = await testController.InvokeDeviceMethodAsync(toDeviceId, methodRequest); Assert.NotNull(actionResult); var objectResult = actionResult as ObjectResult; Assert.NotNull(objectResult); var methodResult = objectResult.Value as MethodResult; Assert.NotNull(methodResult); Assert.Equal(200, methodResult.Status); Assert.Equal(new JRaw(responsePayload), methodResult.Payload); Assert.Equal(objectResult.StatusCode, (int)HttpStatusCode.OK); }
internal static MethodResult GetMethodResult(DirectMethodResponse directMethodResponse) => directMethodResponse.Exception.Map(e => new MethodErrorResult(directMethodResponse.Status, null, e.Message, string.Empty) as MethodResult) .GetOrElse(() => new MethodResult(directMethodResponse.Status, GetRawJson(directMethodResponse.Data)));
internal static MethodResult GetMethodResult(DirectMethodResponse directMethodResponse) => directMethodResponse.Exception.Map(e => new MethodErrorResult(directMethodResponse.HttpStatusCode, e.Message) as MethodResult) .GetOrElse(() => new MethodSuccessResult(directMethodResponse.Status, GetRawJson(directMethodResponse.Data)));
private static Task <IEdgeHub> CreateEdgeHubGetter(string targetDevice, Option <string> targetModule, DirectMethodResponse directMethodResponse) { string targetId = targetDevice + targetModule.Match(module => $"/{module}", () => string.Empty); var edgeHub = new Mock <IEdgeHub>(); edgeHub.Setup(e => e.InvokeMethodAsync(It.Is <string>(i => i == actorId), It.Is <DirectMethodRequest>(r => r.Id == targetId))) .ReturnsAsync(directMethodResponse); edgeHub.Setup(e => e.GetEdgeDeviceId()) .Returns(actorDevice); return(Task.FromResult(edgeHub.Object)); }