1+ namespace TransactionProcessor . BusinessLogic . Tests . OperatorInterfaces
2+ {
3+ using System ;
4+ using System . Collections . Generic ;
5+ using System . Threading ;
6+ using System . Threading . Tasks ;
7+ using BusinessLogic . OperatorInterfaces ;
8+ using BusinessLogic . OperatorInterfaces . VoucherManagement ;
9+ using Moq ;
10+ using Shouldly ;
11+ using Testing ;
12+ using VoucherManagement . Client ;
13+ using VoucherManagement . DataTransferObjects ;
14+ using Xunit ;
15+
16+ public class VoucherManagementProxyTests
17+ {
18+ [ Fact ]
19+ public async Task VoucherManagementProxy_ProcessSaleMessage_VoucherIssueSuccessful_SaleMessageIsProcessed ( )
20+ {
21+ Mock < IVoucherManagementClient > voucherManagementClient = new Mock < IVoucherManagementClient > ( ) ;
22+ voucherManagementClient . Setup ( v => v . IssueVoucher ( It . IsAny < String > ( ) , It . IsAny < IssueVoucherRequest > ( ) , It . IsAny < CancellationToken > ( ) ) )
23+ . ReturnsAsync ( TestData . IssueVoucherResponse ) ;
24+ IOperatorProxy voucherManagementProxy = new VoucherManagementProxy ( voucherManagementClient . Object ) ;
25+
26+ OperatorResponse operatorResponse = await voucherManagementProxy . ProcessSaleMessage ( TestData . TokenResponse ( ) . AccessToken ,
27+ TestData . TransactionId ,
28+ TestData . OperatorIdentifier1 ,
29+ TestData . Merchant ,
30+ TestData . TransactionDateTime ,
31+ TestData . TransactionReference ,
32+ TestData . AdditionalTransactionMetaDataForVoucher ,
33+ CancellationToken . None ) ;
34+
35+ operatorResponse . ShouldNotBeNull ( ) ;
36+ operatorResponse . IsSuccessful . ShouldBeTrue ( ) ;
37+ operatorResponse . ResponseCode . ShouldBe ( "0000" ) ;
38+ operatorResponse . ResponseMessage . ShouldBe ( "SUCCESS" ) ;
39+ operatorResponse . AdditionalTransactionResponseMetadata . ShouldContainKey ( "VoucherCode" ) ;
40+ operatorResponse . AdditionalTransactionResponseMetadata . ShouldContainKey ( "VoucherExpiryDate" ) ;
41+ }
42+
43+ [ Fact ]
44+ public async Task VoucherManagementProxy_ProcessSaleMessage_FailedToSend_ErrorThrown ( )
45+ {
46+ Mock < IVoucherManagementClient > voucherManagementClient = new Mock < IVoucherManagementClient > ( ) ;
47+ voucherManagementClient . Setup ( v => v . IssueVoucher ( It . IsAny < String > ( ) , It . IsAny < IssueVoucherRequest > ( ) , It . IsAny < CancellationToken > ( ) ) )
48+ . ThrowsAsync ( new Exception ( ) ) ;
49+ IOperatorProxy voucherManagementProxy = new VoucherManagementProxy ( voucherManagementClient . Object ) ;
50+
51+ Should . Throw < Exception > ( async ( ) =>
52+ {
53+ await voucherManagementProxy . ProcessSaleMessage ( TestData . TokenResponse ( ) . AccessToken ,
54+ TestData . TransactionId ,
55+ TestData . OperatorIdentifier1 ,
56+ TestData . Merchant ,
57+ TestData . TransactionDateTime ,
58+ TestData . TransactionReference ,
59+ TestData . AdditionalTransactionMetaDataForVoucher ,
60+ CancellationToken . None ) ;
61+
62+
63+ } ) ;
64+ }
65+
66+ [ Theory ]
67+ [ InlineData ( "" ) ]
68+ [ InlineData ( null ) ]
69+ [ InlineData ( "A" ) ]
70+ public async Task VoucherManagementProxy_ProcessSaleMessage_InvalidData_TransactionAmount_ErrorThrown ( String transactionAmount )
71+ {
72+ Mock < IVoucherManagementClient > voucherManagementClient = new Mock < IVoucherManagementClient > ( ) ;
73+
74+ Dictionary < String , String > additionalMetatdata = TestData . AdditionalTransactionMetaDataForVoucher ;
75+ additionalMetatdata [ "Amount" ] = transactionAmount ;
76+
77+ IOperatorProxy voucherManagementProxy = new VoucherManagementProxy ( voucherManagementClient . Object ) ;
78+
79+ Should . Throw < Exception > ( async ( ) =>
80+ {
81+ await voucherManagementProxy . ProcessSaleMessage ( TestData . TokenResponse ( ) . AccessToken ,
82+ TestData . TransactionId ,
83+ TestData . OperatorIdentifier1 ,
84+ TestData . Merchant ,
85+ TestData . TransactionDateTime ,
86+ TestData . TransactionReference ,
87+ additionalMetatdata ,
88+ CancellationToken . None ) ;
89+
90+
91+ } ) ;
92+ }
93+
94+ [ Theory ]
95+ [ InlineData ( "" , "" ) ]
96+ [ InlineData ( "" , null ) ]
97+ [ InlineData ( null , "" ) ]
98+ [ InlineData ( null , null ) ]
99+ public async Task VoucherManagementProxy_ProcessSaleMessage_InvalidData_RecipientDetails_ErrorThrown ( String recipientEmail , String recipientMobile )
100+ {
101+ Mock < IVoucherManagementClient > voucherManagementClient = new Mock < IVoucherManagementClient > ( ) ;
102+
103+ Dictionary < String , String > additionalMetatdata = new Dictionary < String , String >
104+ {
105+ { "Amount" , "10.00" } ,
106+ { "RecipientEmail" , recipientEmail } ,
107+ { "RecipientMobile" , recipientMobile }
108+
109+ } ;
110+
111+ IOperatorProxy voucherManagementProxy = new VoucherManagementProxy ( voucherManagementClient . Object ) ;
112+
113+ Should . Throw < Exception > ( async ( ) =>
114+ {
115+ await voucherManagementProxy . ProcessSaleMessage ( TestData . TokenResponse ( ) . AccessToken ,
116+ TestData . TransactionId ,
117+ TestData . OperatorIdentifier1 ,
118+ TestData . Merchant ,
119+ TestData . TransactionDateTime ,
120+ TestData . TransactionReference ,
121+ additionalMetatdata ,
122+ CancellationToken . None ) ;
123+
124+
125+ } ) ;
126+ }
127+ }
128+ }
0 commit comments