public void TransactionFlowState_OnValidRequestAuthCodeSent_ReturnObjects()
        {
            // arrange
            var stlEnqMsg            = new SettlementEnquiryRequest(RequestIdHelper.Id("stlenq")).ToMessage();
            var transactionFlowState = new TransactionFlowState("1", TransactionType.SettlementEnquiry, 0, stlEnqMsg, $"Waiting for EFTPOS connection to make a settlement enquiry");

            // act
            transactionFlowState.AuthCodeSent("AuthCodeSent");

            // assert
            Assert.False(transactionFlowState.AwaitingPhoneForAuth);
            Assert.Equal("AuthCodeSent", transactionFlowState.DisplayMessage);
        }
        public void TransactionFlowState_OnValidRequestCancelling_ReturnObjects()
        {
            // arrange
            var stlEnqMsg            = new SettlementEnquiryRequest(RequestIdHelper.Id("stlenq")).ToMessage();
            var transactionFlowState = new TransactionFlowState("1", TransactionType.SettlementEnquiry, 0, stlEnqMsg, $"Waiting for EFTPOS connection to make a settlement enquiry");

            // act
            transactionFlowState.Cancelling("Cancelling");

            // assert
            Assert.True(transactionFlowState.AttemptingToCancel);
            Assert.Equal("Cancelling", transactionFlowState.DisplayMessage);
        }
        public void TransactionFlowState_OnValidResponseSignatureResponded_ReturnObjects()
        {
            // arrange
            var stlEnqMsg            = new SettlementEnquiryRequest(RequestIdHelper.Id("stlenq")).ToMessage();
            var transactionFlowState = new TransactionFlowState("1", TransactionType.SettlementEnquiry, 0, stlEnqMsg, $"Waiting for EFTPOS connection to make a settlement enquiry");

            // act
            transactionFlowState.SignatureResponded("SignatureResponded");

            // assert
            Assert.False(transactionFlowState.AwaitingSignatureCheck);
            Assert.Equal("SignatureResponded", transactionFlowState.DisplayMessage);
        }
        public void SettlementEnquiryRequest_OnValidRequest_ReturnObjects()
        {
            // arrange
            const string posRefId = "test";

            // act
            var request = new SettlementEnquiryRequest(posRefId);
            var msg     = request.ToMessage();

            // assert
            Assert.Equal("settlement_enquiry", msg.EventName);
            Assert.Equal(posRefId, request.Id);
        }
        public void TransactionFlowState_OnValidRequestCallingGlt_ReturnObjects()
        {
            // arrange
            var stlEnqMsg            = new SettlementEnquiryRequest(RequestIdHelper.Id("stlenq")).ToMessage();
            var transactionFlowState = new TransactionFlowState("1", TransactionType.SettlementEnquiry, 0, stlEnqMsg, $"Waiting for EFTPOS connection to make a settlement enquiry");

            // act
            transactionFlowState.CallingGlt("25");

            // assert
            Assert.True(transactionFlowState.AwaitingGltResponse);
            Assert.NotNull(transactionFlowState.LastStateRequestTime);
            Assert.Equal("25", transactionFlowState.LastGltRequestId);
        }
        public void TransactionFlowState_OnValidRequestFailed_ReturnObjects()
        {
            // arrange
            var stlEnqMsg            = new SettlementEnquiryRequest(RequestIdHelper.Id("stlenq")).ToMessage();
            var transactionFlowState = new TransactionFlowState("1", TransactionType.SettlementEnquiry, 0, stlEnqMsg, $"Waiting for EFTPOS connection to make a settlement enquiry");

            // act
            transactionFlowState.Failed(stlEnqMsg, "Failed");

            // assert
            Assert.Equal(stlEnqMsg, transactionFlowState.Response);
            Assert.True(transactionFlowState.Finished);
            Assert.Equal(Message.SuccessState.Failed, transactionFlowState.Success);
            Assert.Equal("Failed", transactionFlowState.DisplayMessage);
        }
        public void SettlementEnquiryRequest_OnValidRequestWithOptionsNone_ReturnObjects()
        {
            // arrange
            const string posRefId = "test";

            // act
            var request = new SettlementEnquiryRequest(posRefId);
            var msg     = request.ToMessage();

            // assert
            Assert.Equal("", msg.GetDataStringValue("merchant_receipt_header"));
            Assert.Equal("", msg.GetDataStringValue("merchant_receipt_footer"));
            Assert.Equal("", msg.GetDataStringValue("customer_receipt_header"));
            Assert.Equal("", msg.GetDataStringValue("customer_receipt_footer"));
        }
        public void TransactionFlowState_OnValidState_ReturnObjects()
        {
            // arrange
            var stlEnqMsg = new SettlementEnquiryRequest(RequestIdHelper.Id("stlenq")).ToMessage();

            // act
            var transactionFlowState = new TransactionFlowState("1", TransactionType.SettlementEnquiry, 0, stlEnqMsg, $"Waiting for EFTPOS connection to make a settlement enquiry");

            // assert
            Assert.Equal("1", transactionFlowState.PosRefId);
            Assert.Equal("1", transactionFlowState.Id);
            Assert.Equal(TransactionType.SettlementEnquiry, transactionFlowState.Type);
            Assert.Equal(0, transactionFlowState.AmountCents);
            Assert.False(transactionFlowState.AwaitingSignatureCheck);
            Assert.False(transactionFlowState.RequestSent);
            Assert.False(transactionFlowState.Finished);
            Assert.Equal(Message.SuccessState.Unknown, transactionFlowState.Success);
            Assert.Equal($"Waiting for EFTPOS connection to make a settlement enquiry", transactionFlowState.DisplayMessage);
        }
        public void SettlementEnquiryRequest_OnValidRequestWithConfig_ReturnObjects()
        {
            // arrange
            const string posRefId = "test";

            var config = new SpiConfig();

            config.PrintMerchantCopy             = true;
            config.PromptForCustomerCopyOnEftpos = true;
            config.SignatureFlowOnEftpos         = false;

            // act
            var request = new SettlementEnquiryRequest(posRefId);

            request.Config = config;
            var msg = request.ToMessage();

            // assert
            Assert.True(msg.GetDataBoolValue("print_merchant_copy", false));
            Assert.False(msg.GetDataBoolValue("prompt_for_customer_copy", false));
            Assert.False(msg.GetDataBoolValue("print_for_signature_required_transactions", false));
        }