示例#1
0
        public void Calling_process_action_with_a_process_rule_response_request_for_an_in_flight_contract_with_no_triggered_actions_should_progress_the_trade_to_approved()
        {
            var processor          = GetProcessor(true);
            var currentContract    = new Contract();
            var contractRequest    = ProcessContractRequest.New(currentContract);
            var trackingRefernence = contractRequest.Payload.TrackingReference;

            var processResponse = processor.ProcessAction(contractRequest).Result;

            AwaitAssert(() => {
                Assert.IsNotNull(_contractPersistence.GetContractTrackingReference(trackingRefernence));
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == contractRequest && r.GetStateChange().NewState.CurrentState == "IsPendingApproval"));
            },
                        assertTimeout, assertInterval);

            var ruleResponse = new RuleResponse {
                TriggeredActions = new List <TriggeredAction>()
            };
            var ruleRequest = ProcessRuleResponseRequest.New(currentContract, ruleResponse, trackingRefernence);

            processResponse = processor.ProcessAction(ruleRequest).Result;

            AwaitAssert(() => {
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == contractRequest && r.GetStateChange().NewState.CurrentState == "IsNotPendingResubmit"));
            },
                        assertTimeout, assertInterval);
        }
示例#2
0
        public void Calling_process_action_with_a_process_contract_request_and_an_updated_contract_that_is_in_flight_and_has_been_put_onhold_should_progress_the_trade_to_pending_resubmit()
        {
            var processor       = GetProcessor(true);
            var currentContract = new Contract {
                GroupHeader = new ContractHeader {
                    HoldFromApproval = false
                }
            };
            var request            = ProcessContractRequest.New(currentContract);
            var trackingRefernence = request.Payload.TrackingReference;

            var response = processor.ProcessAction(request).Result;

            var updatedContract = new Contract {
                Id = 1, GroupHeader = new ContractHeader {
                    HoldFromApproval = true
                }
            };

            request = ProcessContractRequest.New(updatedContract, currentContract, trackingRefernence);

            response = processor.ProcessAction(request).Result;

            AwaitAssert(() => {
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == request && r.GetStateChange().NewState.CurrentState == "IsPendingResubmit"));
            },
                        assertTimeout, assertInterval);
        }
示例#3
0
        public void Calling_process_action_with_a_process_contract_request_and_a_new_valid_contract_should_progress_the_trade_to_pending_approval()
        {
            var processor = GetProcessor(true);
            var contract  = new Contract();
            var request   = ProcessContractRequest.New(contract);

            var response = processor.ProcessAction(request).Result;

            AwaitAssert(() => {
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == request && r.GetStateChange().NewState.CurrentState == "IsPendingApproval"));
            },
                        assertTimeout, assertInterval);
        }
示例#4
0
        public void Calling_process_action_with_a_process_contract_request_and_an_updated_contract_that_is_already_in_flight_and_has_no_material_changes_should_leave_the_trade_pending_approval()
        {
            var processor = GetProcessor(true);
            var contract  = new Contract()
            {
                Id = 1, ContractStatus = ContractStatus.InFlight
            };
            var request = ProcessContractRequest.New(contract);

            var response = processor.ProcessAction(request).Result;

            AwaitAssert(() => {
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == request && r.GetStateChange().NewState.CurrentState == "IsPendingApproval"));
            },
                        assertTimeout, assertInterval);
        }
示例#5
0
        public void Calling_process_action_with_a_process_workflow_response_request_for_an_in_flight_contract_with_triggered_actions_should_leave_the_contract_pending_approval_unless_all_actions_are_approved()
        {
            var processor          = GetProcessor(true);
            var currentContract    = new Contract();
            var contractRequest    = ProcessContractRequest.New(currentContract);
            var trackingRefernence = contractRequest.Payload.TrackingReference;

            var processResponse = processor.ProcessAction(contractRequest).Result;

            AwaitAssert(() => {
                Assert.IsNotNull(_contractPersistence.GetContractTrackingReference(trackingRefernence));
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == contractRequest && r.GetStateChange().NewState.CurrentState == "IsPendingApproval"));
            },
                        assertTimeout, assertInterval);

            var ruleResponse = new RuleResponse
            {
                TriggeredActions = new List <TriggeredAction>()
                {
                    new TriggeredAction {
                        ActionReference = Guid.NewGuid()
                    },
                    new TriggeredAction {
                        ActionReference = Guid.NewGuid()
                    }
                }
            };
            var ruleRequest = ProcessRuleResponseRequest.New(currentContract, ruleResponse, trackingRefernence);

            processResponse = processor.ProcessAction(ruleRequest).Result;

            AwaitAssert(() => {
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == ruleRequest && r.GetStateChange().NewState.CurrentState == "IsPendingApproval"));
            },
                        assertTimeout, assertInterval);

            var workflowResponse = new WorkflowResponse
            {
                ActionReference = ruleResponse.TriggeredActions.First().ActionReference,
                ActionState     = Domain.ActionState.Approved
            };
            var workflowRequest = ProcessWorkflowResponseRequest.New(currentContract, workflowResponse, trackingRefernence);

            processResponse = processor.ProcessAction(workflowRequest).Result;
        }
示例#6
0
        public void Calling_process_action_with_a_process_contract_request_and_a_new_on_hold_contract_should_progress_the_trade_to_not_available()
        {
            var processor = GetProcessor(true);
            var contract  = new Contract()
            {
                GroupHeader = new ContractHeader {
                    HoldFromApproval = true
                }
            };
            var request = ProcessContractRequest.New(contract);

            var response = processor.ProcessAction(request).Result;

            AwaitAssert(() => {
                Assert.IsTrue(_responseObserver.Responses.Any(r => (r.Request as IActionRequest)?.Context.OriginatingRequest == request && r.GetStateChange().NewState.CurrentState == "IsNotAvailable"));
            },
                        assertTimeout, assertInterval);
        }