11package dev .vality .fraudbusters .resource .payment .handler ;
22
3+ import dev .vality .damsel .domain .Category ;
4+ import dev .vality .damsel .domain .ContactInfo ;
5+ import dev .vality .damsel .domain .PartyConfigRef ;
6+ import dev .vality .damsel .domain .ShopConfigRef ;
37import dev .vality .damsel .proxy_inspector .BlackListContext ;
8+ import dev .vality .damsel .proxy_inspector .BlockedShops ;
9+ import dev .vality .damsel .proxy_inspector .InspectUserContext ;
10+ import dev .vality .damsel .proxy_inspector .InspectorProxySrv ;
11+ import dev .vality .damsel .proxy_inspector .Party ;
12+ import dev .vality .damsel .proxy_inspector .Shop ;
13+ import dev .vality .damsel .proxy_inspector .ShopContext ;
14+ import dev .vality .damsel .domain .ShopLocation ;
415import dev .vality .damsel .wb_list .ListNotFound ;
516import dev .vality .damsel .wb_list .WbListServiceSrv ;
617import dev .vality .fraudbusters .converter .CheckedResultToRiskScoreConverter ;
718import dev .vality .fraudbusters .converter .ContextToFraudRequestConverter ;
819import dev .vality .fraudbusters .domain .CheckedResultModel ;
20+ import dev .vality .fraudbusters .domain .ConcreteResultModel ;
921import dev .vality .fraudbusters .domain .FraudResult ;
1022import dev .vality .fraudbusters .fraud .model .PaymentModel ;
1123import dev .vality .fraudbusters .stream .TemplateVisitor ;
24+ import dev .vality .fraudo .constant .ResultStatus ;
1225import org .apache .thrift .TException ;
26+ import org .junit .jupiter .api .BeforeEach ;
1327import org .junit .jupiter .api .Test ;
1428import org .junit .jupiter .api .extension .ExtendWith ;
29+ import org .mockito .ArgumentCaptor ;
1530import org .mockito .junit .jupiter .MockitoExtension ;
16- import org .springframework .boot .test .mock .mockito .MockBean ;
31+ import org .mockito .Mockito ;
32+ import org .springframework .beans .factory .annotation .Autowired ;
33+ import org .springframework .boot .test .context .TestConfiguration ;
34+ import org .springframework .context .annotation .Bean ;
1735import org .springframework .kafka .core .KafkaTemplate ;
36+ import org .springframework .test .context .ContextConfiguration ;
37+ import org .springframework .test .context .bean .override .mockito .MockitoBean ;
1838import org .springframework .test .context .junit .jupiter .SpringExtension ;
1939
40+ import java .util .ArrayList ;
41+ import java .util .List ;
42+
2043import static org .junit .jupiter .api .Assertions .assertEquals ;
2144import static org .mockito .ArgumentMatchers .any ;
45+ import static org .mockito .Mockito .times ;
46+ import static org .mockito .Mockito .verify ;
2247import static org .mockito .Mockito .when ;
2348
2449@ ExtendWith ({MockitoExtension .class , SpringExtension .class })
2550class FraudInspectorHandlerTest {
2651
27- @ MockBean
52+ @ MockitoBean
2853 CheckedResultToRiskScoreConverter checkedResultToRiskScoreConverter ;
29- @ MockBean
54+ @ MockitoBean
3055 ContextToFraudRequestConverter requestConverter ;
31- @ MockBean
56+ @ MockitoBean
3257 TemplateVisitor <PaymentModel , CheckedResultModel > templateVisitor ;
33- @ MockBean
58+ @ MockitoBean
3459 KafkaTemplate <String , FraudResult > kafkaFraudResultTemplate ;
35- @ MockBean
60+ @ MockitoBean
3661 WbListServiceSrv .Iface wbListServiceSrv ;
3762
3863 @ Test
@@ -59,11 +84,75 @@ void isExistInBlackList() throws TException {
5984 assertEquals (false , existInBlackList );
6085 }
6186
62- private static BlackListContext createBlackListContext () {
87+ @ Test
88+ void inspectUserShopsBlocked () throws TException {
89+ FraudInspectorHandler fraudInspectorHandler = new FraudInspectorHandler (
90+ "test" ,
91+ checkedResultToRiskScoreConverter ,
92+ requestConverter ,
93+ templateVisitor ,
94+ kafkaFraudResultTemplate ,
95+ wbListServiceSrv
96+ );
97+
98+ when (templateVisitor .visit (any ())).thenAnswer (invocation -> {
99+ PaymentModel model = invocation .getArgument (0 );
100+ if (model != null && "shop_1" .equals (model .getShopId ())) {
101+ return createCheckedResult (ResultStatus .DECLINE );
102+ }
103+ return createCheckedResult (ResultStatus .THREE_DS );
104+ });
105+
106+ BlockedShops blockedShops = fraudInspectorHandler .inspectUser (createInspectUserContext ());
107+
108+ assertEquals (1 , blockedShops .getShopListSize ());
109+ assertEquals ("shop_1" , blockedShops .getShopList ().get (0 ).getShop ().getShopRef ().getId ());
110+
111+ ArgumentCaptor <PaymentModel > captor = ArgumentCaptor .forClass (PaymentModel .class );
112+ verify (templateVisitor , times (2 )).visit (captor .capture ());
113+ for (PaymentModel model : captor .getAllValues ()) {
114+ assertEquals ("party_1" , model .getPartyId ());
115+ assertEquals ("user@email.com" , model .getEmail ());
116+ assertEquals ("79990001122" , model .getPhone ());
117+ }
118+ }
119+
120+ private BlackListContext createBlackListContext () {
63121 return new BlackListContext ()
64122 .setValue ("test" )
65123 .setFieldName ("field_test" )
66124 .setFirstId ("test_id" )
67125 .setSecondId ("test_sec_id" );
68126 }
69- }
127+
128+ private InspectUserContext createInspectUserContext () {
129+ ContactInfo contactInfo = new ContactInfo ();
130+ contactInfo .setEmail ("User@Email.Com" );
131+ contactInfo .setPhoneNumber ("79990001122" );
132+ return new InspectUserContext ()
133+ .setUserInfo (contactInfo )
134+ .setShopList (List .of (
135+ createShopContext ("party_1" , "shop_1" ),
136+ createShopContext ("party_1" , "shop_2" )
137+ ));
138+ }
139+
140+ private ShopContext createShopContext (String partyId , String shopId ) {
141+ ShopLocation location = new ShopLocation ();
142+ location .setUrl ("http://example.com" );
143+ return new ShopContext ()
144+ .setParty (new Party (new PartyConfigRef (partyId )))
145+ .setShop (new Shop (
146+ new ShopConfigRef (shopId ),
147+ new Category ("category" , "category" ),
148+ "shop-name" ,
149+ location
150+ ));
151+ }
152+
153+ private CheckedResultModel createCheckedResult (ResultStatus status ) {
154+ CheckedResultModel checkedResultModel = new CheckedResultModel ();
155+ checkedResultModel .setResultModel (new ConcreteResultModel (status , null , null ));
156+ return checkedResultModel ;
157+ }
158+ }
0 commit comments