예제 #1
0
        public LinkRequest ResetDevice(LinkRequest linkRequest)
        {
            LinkActionRequest linkActionRequest = linkRequest?.Actions?.First();

            Console.WriteLine($"simulator: RESET DEVICE for SN='{linkActionRequest?.DeviceRequest?.DeviceIdentifier?.SerialNumber}'");
            return(linkRequest);
        }
예제 #2
0
        public static void SubworkflowErrorResponse(DeviceInformation deviceInformation, LinkRequest linkRequest, string type, string code, string description)
        {
            if (linkRequest != null)
            {
                LinkActionRequest linkActionRequest = linkRequest?.Actions.First();
                if (linkActionRequest.DeviceRequest == null)
                {
                    linkActionRequest.DeviceRequest = new LinkDeviceRequest();
                }

                /*linkActionRequest.DeviceRequest.LinkObjects = ErrorResponse(type, code, description);
                 *
                 * if (linkRequest.LinkObjects.LinkActionResponseList == null)
                 * {
                 *  linkRequest.LinkObjects.LinkActionResponseList[0].DALActionResponse = new LinkDeviceActionResponse();
                 * }
                 * linkRequest.LinkObjects.LinkActionResponseList[0].DALResponse = new LinkDALResponse
                 * {
                 *  Devices = new List<LinkDeviceResponse>
                 *  {
                 *      new LinkDeviceResponse
                 *      {
                 *          Manufacturer = deviceInformation?.Manufacturer,
                 *          Model = deviceInformation?.Model,
                 *          SerialNumber = deviceInformation?.SerialNumber,
                 *          //CardWorkflowControls = linkActionRequest.PaymentRequest?.CardWorkflowControls
                 *      }
                 *  }
                 * };*/
            }
        }
예제 #3
0
        public LinkRequest GetSecurityConfiguration(LinkRequest linkRequest)
        {
            LinkActionRequest linkActionRequest = linkRequest?.Actions?.First();

            Console.WriteLine($"simulator: GET SECURITY CONFIGURATION for SN='{linkActionRequest?.DeviceRequest?.DeviceIdentifier?.SerialNumber}'");
            return(linkRequest);
        }
예제 #4
0
        public LinkRequest AbortCommand(LinkRequest linkRequest)
        {
            LinkActionRequest linkActionRequest = linkRequest?.Actions?.First();

            Console.WriteLine($"simulator: ABORT COMMAND for SN='{linkActionRequest?.DeviceRequest?.DeviceIdentifier?.SerialNumber}'");
            return(linkRequest);
        }
예제 #5
0
        // ------------------------------------------------------------------------
        // Methods that are mapped for usage in their respective sub-workflows.
        // ------------------------------------------------------------------------
        #region --- subworkflow mapping
        public LinkRequest GetStatus(LinkRequest linkRequest)
        {
            LinkActionRequest linkActionRequest = linkRequest?.Actions?.First();

            Console.WriteLine($"simulator: GET STATUS for SN='{linkActionRequest?.DeviceRequest?.DeviceIdentifier?.SerialNumber}'");
            return(linkRequest);
        }
        public async void DoWork_ShouldForceCompletionWithCancelation__WhenTestingGetStautsAndUserCancels()
        {
            LinkActionRequest linkActionRequest = linkRequest.Actions.First();

            linkActionRequest.DeviceRequest = new LinkDeviceRequest()
            {
                //LinkObjects = new LinkDeviceRequestIPA5Object()
                //{
                //    DeviceResponseData = new LinkDeviceActionResponse
                //    {
                //        Errors = new List<LinkErrorValue>
                //        {
                //            new LinkErrorValue
                //            {
                //                Code = System.Enum.GetName(typeof(EventCodeType), EventCodeType.USER_CANCELED),
                //                Description = "Canceled"
                //            }
                //        }
                //    }
                //}
            };

            subject.SetState(linkRequest);

            var timeoutPolicy = PollyPolicyResultGenerator.GetSuccessfulPolicy <LinkRequest>();

            mockDeviceCancellationBroker.Setup(e => e.ExecuteWithTimeoutAsync(It.IsAny <Func <CancellationToken, LinkRequest> >(),
                                                                              It.IsAny <int>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(timeoutPolicy));

            await subject.DoWork();

            //Assert.NotNull(linkRequest.Actions[0].DeviceRequest.LinkObjects.DeviceResponseData.Errors);
            //Assert.Equal("USER_CANCELED", linkRequest.Actions[0].DeviceRequest.LinkObjects.DeviceResponseData.Errors[0].Code);
        }
예제 #7
0
        public async void DoWork_ShouldForceCompletionWithCancelation__WhenTestingGetCardData(string exception, string userEvent, DeviceEvent deviceEvent)
        {
            LinkActionRequest linkActionRequest = linkRequest.Actions.First();

            linkActionRequest.Action        = LinkAction.Payment;
            linkActionRequest.DeviceRequest = new LinkDeviceRequest()
            {
                //LinkObjects = new LinkDeviceRequestIPA5Object()
                //{
                //    DeviceResponseData = new LinkDeviceActionResponse
                //    {
                //        Errors = new List<LinkErrorValue>
                //        {
                //            new LinkErrorValue
                //            {
                //                Code = exception,
                //                Description = "Canceled"
                //            }
                //        }
                //    }
                //}
            };
            string expectedValue = linkActionRequest.Action.ToString();

            Mock <ICardDevice> fakeDeviceThree = new Mock <ICardDevice>();

            fakeDeviceThree.Setup(e => e.ResetDevice(It.IsAny <LinkRequest>())).Returns(linkRequest);

            subject.SetState(linkRequest);

            var timeoutPolicy = PollyPolicyResultGenerator.GetFailurePolicy <LinkRequest>(new Exception(exception));

            mockDeviceCancellationBroker.Setup(e => e.ExecuteWithTimeoutAsync(It.IsAny <Func <CancellationToken, LinkRequest> >(),
                                                                              It.IsAny <int>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(timeoutPolicy));
            mockSubController.Setup(e => e.DeviceEvent).Returns(deviceEvent);

            await subject.DoWork();

            //mockLoggingClient.Verify(e => e.LogErrorAsync(string.Format("Unable to obtain Card Data from device - '{0}'.", userEvent),
            //    It.IsAny<Dictionary<string, object>>()), Times.Once());

            //Assert.NotNull(linkRequest.Actions[0].DeviceRequest.LinkObjects.DeviceResponseData.Errors);
            //Assert.Equal(exception, linkRequest.Actions[0].DeviceRequest.LinkObjects.DeviceResponseData.Errors[0].Code);
            //Assert.Equal(expectedValue, linkRequest.Actions[0].DeviceRequest.LinkObjects.DeviceResponseData.Errors[0].Type);

            //DeviceInformation actualValue = new DeviceInformation()
            //{
            //    Manufacturer = linkRequest.LinkObjects.LinkActionResponseList[0].DeviceResponse.Devices[0].Manufacturer,
            //    Model = linkRequest.LinkObjects.LinkActionResponseList[0].DeviceResponse.Devices[0].Model,
            //    SerialNumber = linkRequest.LinkObjects.LinkActionResponseList[0].DeviceResponse.Devices[0].SerialNumber
            //};
            //Assert.NotEqual(deviceInformation, actualValue);
        }
예제 #8
0
        /*internal static LinkRequest LinkGetCardDataWorkflowRequest() =>
         *  new LinkRequest()
         *  {
         *      Actions = new List<LinkActionRequest> { BuildLinkPaymentRequestAction() },
         *      MessageID = RandomGenerator.BuildRandomString(8),
         *      Timeout = 1000
         *  };
         *
         * internal static LinkRequest LinkRequestSelectCreditOrDebit() =>
         *  new LinkRequest()
         *  {
         *      Actions = new List<LinkActionRequest> { BuildLinkGetCreditOrDebit() },
         *      MessageID = RandomGenerator.BuildRandomIntegerString(1),
         *      Timeout = 1000
         *  };
         *
         * internal static LinkRequest LinkRequestGetZip() =>
         *  new LinkRequest()
         *  {
         *      Actions = new List<LinkActionRequest> { BuildLinkGetZipAction() },
         *      MessageID = RandomGenerator.BuildRandomIntegerString(5),
         *      Timeout = 1000
         *  };
         *
         * internal static LinkRequest LinkRequestGetPin() =>
         *  new LinkRequest()
         *  {
         *      Actions = new List<LinkActionRequest> { BuildLinkGetPinAction() },
         *      MessageID = RandomGenerator.BuildRandomIntegerString(4),
         *      Timeout = 1000
         *  };
         *
         * internal static LinkRequest LinkRequestDeviceUI() =>
         *  new LinkRequest()
         *  {
         *      Actions = new List<LinkActionRequest> { BuildLinkDeviceUIAction() },
         *      MessageID = RandomGenerator.BuildRandomIntegerString(4),
         *      Timeout = 1000
         *  };
         *
         * internal static LinkRequest LinkDebitWorkflowRequest() =>
         *  new LinkRequest()
         *  {
         *      Actions = new List<LinkActionRequest> { BuildLinkDebitWorkflow() },
         *      MessageID = RandomGenerator.BuildRandomString(8),
         *      Timeout = 1000
         *  };*/

        private static LinkActionRequest BuildLinkGetDeviceStatusAction()
        {
            var action = new LinkActionRequest
            {
                MessageID           = RandomGenerator.BuildRandomString(8),
                Action              = LinkAction.DALAction,
                DeviceActionRequest = new LinkDeviceActionRequest
                {
                    DeviceAction = LinkDeviceActionType.GetStatus
                }
            };

            return(action);
        }
        public DeviceSubWorkflowState DetermineInitialState(LinkRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            LinkActionRequest      linkActionRequest = request.Actions.First();
            DeviceSubWorkflowState proposedState     = ((linkActionRequest.DeviceActionRequest?.DeviceAction) switch
            {
                LinkDeviceActionType.GetStatus => DeviceSubWorkflowState.GetStatus,
                LinkDeviceActionType.AbortCommand => DeviceSubWorkflowState.AbortCommand,
                LinkDeviceActionType.ResetCommand => DeviceSubWorkflowState.ResetCommand,
                _ => DeviceSubWorkflowState.Undefined
            });