/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġ ĠPay May a ĠPhil ipp ines , ĠInc . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ċ Ġ* Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ċ Ġ* Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ċ Ġ* Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ċ Ġ* Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED ĠINCLUDING ĠBUT Ċ Ġ* ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND Ċ Ġ* ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , Ċ Ġ* ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . pay m aya . sdk . android . vault Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġcom . pay m aya . sdk . android . R Ċ import Ġcom . pay m aya . sdk . android . common . LogLevel Ċ import Ġcom . pay m aya . sdk . android . common . internal . Logger Ċ import Ġcom . pay m aya . sdk . android . vault . internal . helpers . Card Type Detector Ċ import Ġcom . pay m aya . sdk . android . vault . internal . Token ize Card Success Response Wrapper Ċ import Ġcom . pay m aya . sdk . android . vault . internal . Token ize Card UseCase Ċ import Ġcom . pay m aya . sdk . android . vault . internal . helpers . Card Info Validator Ċ import Ġcom . pay m aya . sdk . android . vault . internal . models . Token ize Card Response Ċ import Ġcom . pay m aya . sdk . android . vault . internal . screen . Token ize Card Contract Ċ import Ġcom . pay m aya . sdk . android . vault . internal . screen . Token ize Card Presenter Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . test . Test Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . test . set Main Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito Annotations Ċ import Ġjava . util .* Ċ Ċ class ĠToken ize Card Presenter Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpresenter : ĠToken ize Card Contract . Presenter ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtokenize Card UseCase : ĠToken ize Card UseCase ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview : ĠToken ize Card Contract . View ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . set Main ( Test Coroutine Dispatcher ()) ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsome Date Ġ= ĠCalendar . getInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( Calendar . YEAR , ĠYEAR _ CURRENT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpresenter Ġ= ĠToken ize Card Presenter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Card UseCase , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCard Info Validator ( some Date ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCard Type Detector (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger ( LogLevel . WARN ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pay Ġbutton Ġclicked Ġ- Ġinvalid Ġcard Ġdata `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . view Created ( view ) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . pay Button Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number With Spaces Ġ= Ġ" 1 2 3 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Expiration Date Ġ= Ġ" 4 4 / 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard C vc Ġ= Ġ" 1 2 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). show Card Number Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). show Card Expiration Date Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). show Card C vc Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pay Ġbutton Ġclicked Ġ- Ġinvalid Ġcard Ġdata Ġ- Ġempty Ġfields `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . view Created ( view ) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . pay Button Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number With Spaces Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Expiration Date Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard C vc Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). show Card Number Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). show Card Expiration Date Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). show Card C vc Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pay Ġbutton Ġclicked Ġ- Ġcard Ġdata ĠOK `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . view Created ( view ) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( tokenize Card UseCase . run ( any ())). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToken ize Card Success Response Wrapper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToken ize Card Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Token Id Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . pay Button Clicked ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number With Spaces Ġ= ĠC ARD _ NUMBER _ VALID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Expiration Date Ġ= Ġ" 1 2 /$ YEAR _ F UT URE _ NO _ PREFIX ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard C vc Ġ= Ġ" 1 2 3 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġjust Ġcheck , Ġif Ġprogress Ġbar Ġis Ġdisplayed Ġand Ġrequest Ġis Ġsent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). show ProgressBar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( tokenize Card UseCase ). run ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). hide ProgressBar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( view ). finish Success ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` correct Ġcard Ġdetection Ġafter Ġcard Ġnumber Ġchanged `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorder Ġ= ĠMockito . in Order ( view ) ĊĠĠĠĠĠĠĠ Ġpresenter . view Created ( view ) ĊĊĠĠĠĠĠĠĠ Ġpresenter . card Number Changed (" 3 ") ĊĠĠĠĠĠĠĠ Ġpresenter . card Number Changed (" 3 5 ") ĊĠĠĠĠĠĠĠ Ġpresenter . card Number Changed (" 3 7 ") ĊĠĠĠĠĠĠĠ Ġpresenter . card Number Changed ("") ĊĠĠĠĠĠĠĠ Ġpresenter . card Number Changed (" 2 ") ĊĠĠĠĠĠĠĠ Ġpresenter . card Number Changed ("") ĊĠĠĠĠĠĠĠ Ġpresenter . card Number Changed (" 2 6 2 0 ") ĊĊĠĠĠĠĠĠĠ Ġorder . verify ( view ). show Card Icon ( R . drawable . ame x ) ĊĠĠĠĠĠĠĠ Ġorder . verify ( view ). show Card Icon ( R . drawable . j cb ) ĊĠĠĠĠĠĠĠ Ġorder . verify ( view ). show Card Icon ( R . drawable . ame x ) ĊĠĠĠĠĠĠĠ Ġorder . verify ( view ). hide Card Icon () ĊĠĠĠĠĠĠĠ Ġorder . verify ( view ). show Card Icon ( R . drawable . master card ) ĊĠĠĠĠĠĠĠ Ġorder . verify ( view ). hide Card Icon () ĊĠĠĠĠĠĠĠ Ġorder . verify ( view ). show Card Icon ( R . drawable . master card ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠYEAR _ CURRENT Ġ= Ġ 2 0 2 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠYEAR _ F UT URE _ NO _ PREFIX Ġ= Ġ" 3 0 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠC ARD _ NUMBER _ VALID Ġ= Ġ" 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 8 " ĊĠĠĠ Ġ} Ċ }